繁体   English   中英

TYPO3 Extbase:如何从模型渲染页面树?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM