Как я могу отобразить версию моего sitepackage во внешнем интерфейсе?

#typo3 #typoscript

#typo3 #typoscript

Вопрос:

Я хочу отобразить версию моего sitepackage (из моего файла объявления ext_emconf.php ) во внешнем интерфейсе.

Как мне запросить эту информацию? Я думал об использовании a DataProcessor в my FLUIDTEMPLATE , но я не уверен, нужно ли мне писать свой собственный или уже есть тот, который я могу использовать для этого.

Спасибо!

Ответ №1:

В зависимости от ваших конкретных потребностей вы можете использовать ExtensionManagementUtility::getExtensionVersion() для ввода глобальной константы TypoScript через ExtensionManagementUtility::addTypoScriptConstants() :

 // ext_localconf.php
TYPO3CMSCoreUtilityExtensionManagementUtility::addTypoScriptConstants(sprintf(
    'site.version = %s',
    TYPO3CMSCoreUtilityExtensionManagementUtility::getExtensionVersion('sitepackage')
));
 

После этого вы можете использовать эту константу в любом месте настройки TypoScript, включая variables шаблоны Fluid:

 // TypoScript setup
10 = FLUIDTEMPLATE
10 {
  // ...
  variables {
    siteVersion = {$site.version}
  }
}
 

Теперь используйте эту переменную в любом месте вашего шаблона:

 <!-- Fluid template -->
<p>Site {siteVersion}</p>
 

Ответ №2:

Для этого нет процессора обработки данных.

Я бы предложил создать небольшой класс PHP для считывания версии и интеграции ее с помощью TypoScript в качестве пользовательского объекта.

 namespace VendorSitepackageService;

class SitepackageVersionService
{

    public function getVersion(): string
    {
        $version = '';
        $packageManager = GeneralUtility::makeInstance(TYPO3CMSCorePackagePackageManager::class);
        $extensionKey = 'my_extension_key';
        if ($packageManager->isPackageActive($extensionKey)) {
            $package = $packageManager->getPackage($extensionKey);
            $version = $package->getPackageMetaData()->getVersion();
        }

        return $version;
    }

}
 
 page.10.variables.sitePackageVersion = USER
page.10.variables.sitePackageVersion.userFunc = VendorSitepackageServiceSitepackageVersionService->getVersion
 
 <strong>Version: {sitePackageVersion}</strong>
 

Комментарии:

1. Я бы предложил также использовать ExtensionManagementUtility::getExtensionVersion() здесь, поскольку он уже выявляет множество возможных проблем.

2. Не знал этой функции, приятно!