remonator
remonator

Reputation: 15

How can I display the version of my sitepackage in the frontend?

I want to display the version of my sitepackage (from my declaration file ext_emconf.php ) in the frontend.

How do I query this information? I was thinking of using a DataProcessor in my FLUIDTEMPLATE, but I’m not sure whether I need to write my own or if there’s already one I can use for that.

Thank you!

Upvotes: 0

Views: 140

Answers (2)

Thomas Löffler
Thomas Löffler

Reputation: 6164

There is no DataProcessor for that.

I'd suggest to create a small PHP class to read out the version and integrate it via TypoScript as a USER object.

namespace Vendor\Sitepackage\Service;

class SitepackageVersionService
{

    public function getVersion(): string
    {
        $version = '';
        $packageManager = GeneralUtility::makeInstance(\TYPO3\CMS\Core\Package\PackageManager::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 = Vendor\Sitepackage\Service\SitepackageVersionService->getVersion
<strong>Version: {sitePackageVersion}</strong>

Upvotes: 0

Mathias Brodala
Mathias Brodala

Reputation: 6460

Depending on your exact needs you could make use of ExtensionManagementUtility::getExtensionVersion() to inject a global TypoScript constant via ExtensionManagementUtility::addTypoScriptConstants():

// ext_localconf.php
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants(sprintf(
    'site.version = %s',
    \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::getExtensionVersion('sitepackage')
));

Afterwards you can use this constant anywhere in TypoScript setup including variables of Fluid templates:

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

Now use this variable anywhere you like in your template:

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

Upvotes: 2

Related Questions