Diese kurze Anleitung zeigt, wie man schnell und einfach Seiteninformationen in TYPO3 12.4 auslesen kann, wenn man keinen FE Context hat (z.B. in einem Scheduler Task)
SiteFinder Klasse
Um Seiteneigenschaften schnell und einfach herauszubekommen gibt es eine Klasse namens "TYPO3\CMS\Core\Site\SiteFinder" - diese hat diverse wertvolle Methoden, unter Anderem diese hier: getSiteByPageId().
Mit dieser Funktion bekommen wir einein Array zurück, der alle Seiteneigenschaften beinhaltet (Also alles was in "pages" zu sehen ist). Die Methode benötigt nur einen Parameter für die Seiten UID.
In diesem Beispielcode möchten wir alle Rootpages herausbekommen und dann die Base-URLs davon in einen Array schreiben:
<?php
namespace LdoerrDotCom\PageInfoExt\Task;
use TYPO3\CMS\Core\Site\SiteFinder;
use TYPO3\CMS\Core\Utility\GeneralUtility;
class ExampleSchedulerTask extends AbstractTask {
public function execute() {
$siteFinder = GeneralUtility::makeInstance(SiteFinder::class);
$rootPages = $this->getRootPages();
$data['rootPages'] = [];
foreach ($rootPages as $rootPage) {
$baseUrl = (string)$site->getBase();
try {
$data['rootPages'][$rootPage['uid']] = $baseUrl;
} catch (\Exception $e) {
$data['rootPages'][$rootPage['uid']] = 'no_baseurl_set';
}
}
/**
* Get all root pages from the database
*
* @return array Returns an array of root pages
*/
protected function getRootPages() {
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
->getQueryBuilderForTable('pages');
$rootPages = $queryBuilder
->select('uid')
->from('pages')
->where(
$queryBuilder->expr()->eq('is_siteroot', $queryBuilder->createNamedParameter(1, \PDO::PARAM_INT)),
$queryBuilder->expr()->eq('deleted', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
$queryBuilder->expr()->eq('sys_language_uid', $queryBuilder->createNamedParameter(0, \PDO::PARAM_INT)),
)
->execute()
->fetchAll();
return $rootPages;
}
}
Kurz erklärt: Wir sind hier in einem Task und holen uns in diesem Bereich die Rootpages. Dann gehen wir mit einer foreach Schleife durch die Rootpages und holen uns die gewünschten Informationen. getSiteByPageId stellt uns das Page Objekt bereit. Darin haben wir jetzt diverse Möglichkeiten, Daten aus dem Objekt zu holen, z.B. die Base-URL (getBase) der Seite. Dies geht aber auch nur, wenn im Sitemanagement alles eingerichtet ist.