[英]TYPO3 Extbase: How to render the pagetree from my model?
我想在extbase / fluid(基于pagetree)中创建某种站点地图。 我已将pages
表加载到模型中:
config.tx_extbase.persistence.classes.Tx_MyExt_Domain_Model_Page.mapping.tableName = pages
我已经创建了一个控制器和存储库,但是被卡住的那部分可以将子页面作为关系加载到我的模型中。
例如:
$page = $this->pageRepository->findByPid($rootPid);
返回我的根页。 但是如何扩展可以使用$page->getSubpages()
或$page->getNestedPages()
?
我必须在模型内部创建某种查询吗? 还是我必须使用现有功能(例如对象存储)解决此问题,以及如何解决?
我尝试了很多事情,但可以简单地弄清楚它应该如何工作。
您必须覆盖findByPid存储库方法并添加
public function findByPid($pid) {
$querySettings = $this->objectManager->create('Tx_Extbase_Persistence_Typo3QuerySettings');
$querySettings->setRespectStoragePage(FALSE);
$this->setDefaultQuerySettings($querySettings);
$query = $this->createQuery();
$query->matching($query->equals('pid', $pid));
$pages = $query->execute();
return $pages;
}
获取所有页面。 比起您可以编写自己的getSubpages方法
function getSubpages($currentPid) {
$subpages = $this->pagesRepository->findByPid($currentPid);
if (count($subpages) > 0) {
$i = 0;
foreach($subpages as $subpage) {
$subpageUid = $subpage->getUid();
$subpageArray[$i]['page'] = $subpage;
$subpageArray[$i]['subpages'] = $this->getSubpages($subpageUid);
$i++;
}
} else {
$subpageArray = Array();
}
return $subpageArray;
}
我没有测试这种方法,但它看起来像这样以获得alle子页面。
我想知道我找不到返回完整的Page-Tree的typo3方法:(因此,我写了一个小函数(可以在extbase扩展中使用),肯定不是最好的或斋戒的方法,但易于扩展或定制;)
首先,您需要一个PageRepository的实例
$this->t3pageRepository = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\Page\\PageRepository');
this-> t3pageRepository-> init();
进行初始化,以设置一些基本的conf,例如“ WHERE deletet = 0 AND hidden = 0 ...”
然后使用此功能,您将获得一个包含页面数据和子页面的数组。我最多可以实现三个级别:
function getPageTree($pid,$deep=2){
$fields = '*';
$sortField = 'sorting';
$pages = $this->t3pageRepository->getMenu($pid,$fields,$sortField);
if($deep>=1){
foreach($pages as &$page) {
$subPages1 = $this->t3pageRepository->getMenu($page['uid'],$fields,$sortField);
if(count($subPages1)>0){
if($deep>=2){
foreach($subPages1 as &$subPage1){
$subPages2 = $this->t3pageRepository->getMenu($subPage1['uid'],$fields,$sortField);
if(count($subPages2>0)){
$subPage1['subpages'] = $subPages2;
}
}
}
$page['subpages'] = $subPages1;
}
}
}
return $pages;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.