0

extbase/fluid (ページツリーに基づく) にある種のサイトマップを作成したいと考えています。pagesテーブルをモデルにロードしました:

config.tx_extbase.persistence.classes.Tx_MyExt_Domain_Model_Page.mapping.tableName = pages

コントローラーとリポジトリーを作成しましたが、モデルへの関係としてサブページをロードできる部分に行き詰まります。

例えば:

$page = $this->pageRepository->findByPid($rootPid);

私のルートページを返します。しかし、使用できるモデルをどのように拡張できます$page->getSubpages()$page->getNestedPages()?

モデル内である種のクエリを作成する必要がありますか? または、既存の機能 (オブジェクト ストレージなど) でこれを解決する必要がありますか?

私は多くのことを試しましたが、これがどのように機能するかを簡単に理解できます。

4

2 に答える 2

1

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-method を次のように書くことができます

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;
}

このメソッドはテストしていませんが、すべてのサブページを取得するには次のようになります。

于 2013-01-12T10:00:08.370 に答える
0

完全なページ ツリーを返す Typo3 メソッドを見つけることができなかったのだろうか :( それで、小さな関数を書きます (extbase 拡張機能で使用できます)。カスタマイズ;)

最初に PageRepository のインスタンスが必要です

$this->t3pageRepository = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Frontend\\Page\\PageRepository');

this->t3pageRepository->init();

「WHERE deletet = 0 AND hidden = 0...」のようないくつかの基本的なconfを設定するために、initを作成します

次に、この関数を使用して、ページ データとサブページを含む配列を取得します。yust を最大 3 つのレベルで実装します。

 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;
}
于 2014-09-30T07:37:21.640 に答える