Für eine Erweiterung benötigte ich im Frontend den gesamten Seitenbaum als Array. Hierbei kann man auf t3lib_pageSelect zurückgreifen. Zwar liefert getMenu() standardmäßig nur eine Ebene, aber das ist kein Problem – man kann einfach eine rekursive Funktion daraus erstellen.
Verwendung innerhalb einer Klasse:
/**
* @param int $pageUid Ausgangspunkt / Root page
* @param array $pageTree
* @return array
*/
protected function getPageTree($pageUid = 1, $pageTree = array()) {
$this->pageSelect = new t3lib_pageSelect();
$this->pageSelect->init(TRUE);
$pageTree = $this->pageSelect->getMenu($pageUid);
foreach($pageTree as &$page) {
$page['subPages'] = $this->getPageTree($page['uid'], $pageTree);
}
return $pageTree;
}
Und als „standalone“ Funktion:
/**
* @param int $pageUid Ausgangspunkt / Root page
* @param array $pageTree
* @return array
*/
function getPageTree($pageUid = 1, $pageTree = array()) {
$pageSelect = new t3lib_pageSelect();
$pageSelect->init(TRUE);
$pageTree = $pageSelect->getMenu($pageUid);
foreach($pageTree as &$page) {
$page['subPages'] = getPageTree($page['uid'], $pageTree);
}
return $pageTree;
}
$pageTree = getPageTree($rootPage = 1);
Hey super!
Wollte ich mir gerade selbst bauen, aber da dachte ich: schau doch mal vorher nach. Da bist Du bestimmt nicht der erste, der das braucht.
Vielen Dank 🙂
Danke für den Code – funktioniert super.
Ein Problem habe ich aber noch: Im WorkspacePreview werden nur Seiten angezeigt, die schon live geschaltet sind, also somit kein echter Workspace-Preview.
Gibts dazu ne Lösungsidee?
Hi Tobias,
da weiß ich leider auch nix genaues, aber siehr dir mal die Dokumentation von t3lib_pageSelect an, dort gibt es eine Methode getWorkspaceVersionOfRecord. Vielleicht hilft dir das weiter!