Last active
November 13, 2019 16:39
-
-
Save georgringer/c0f8263aa719c7f0373723011158e455 to your computer and use it in GitHub Desktop.
Get relevant langage ids for menus, e.g. hreflang or language switch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace GeorgRinger\News\Hooks; | |
use TYPO3\CMS\Core\Database\ConnectionPool; | |
use TYPO3\CMS\Core\Utility\GeneralUtility; | |
/** | |
* Get language ids for news language menu | |
* | |
* Having a language menu with | |
* [globalVar = GP:tx_news_pi1|news > 0] | |
* page.headerData.25.special.value.cObject = USER | |
* page.headerData.25.special.value.cObject.userFunc = GeorgRinger\Bda\Hooks\HrefLangNews->run | |
* [global] | |
* | |
* The userfunc will return the relevant ids | |
* | |
*/ | |
class HrefLangNews | |
{ | |
public function run(): string | |
{ | |
$newsUid = $this->getNewsUid(); | |
if ($newsUid === 0) { | |
return ''; | |
} | |
return $this->getLanguageIdsFromNews($newsUid); | |
} | |
/** | |
* @param int $newsUid | |
* @return string | |
*/ | |
protected function getLanguageIdsFromNews(int $newsUid): string | |
{ | |
$list = []; | |
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_news_domain_model_news'); | |
$rows = $queryBuilder | |
->select('*') | |
->from('tx_news_domain_model_news') | |
->where( | |
$queryBuilder->expr()->orX( | |
$queryBuilder->expr()->eq('uid', $queryBuilder->createNamedParameter($newsUid, \PDO::PARAM_INT)), | |
$queryBuilder->expr()->eq('l10n_parent', $queryBuilder->createNamedParameter($newsUid, \PDO::PARAM_INT)) | |
) | |
) | |
->execute() | |
->fetchAll(); | |
foreach ($rows as $row) { | |
$list[] = $row['sys_language_uid']; | |
} | |
return implode(',', $list); | |
} | |
protected function getNewsUid(): int | |
{ | |
$vars = GeneralUtility::_GET('tx_news_pi1'); | |
if ($vars['news']) { | |
return (int)$vars['news']; | |
} | |
return 0; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
hi Georg,
the optionsplits:
NO.stdWrap.cObject.value = en || de || fr
stdWrap.typolink.additionalParams = &L=0 || &L=1 || &L=2
remain unchanged by this userfunc, this mashes up the rendered menu. What would the best solution for this?