2012-10-24 2 views
0

extrate/fluid (pagetree 기반)에서 어떤 종류의 사이트 맵을 만들고 싶습니다. 내가 컨트롤러와 저장소를 생성 한TYPO3 Extbase : 내 모델에서 페이지 트리를 렌더링하는 방법?

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

,하지만 내 모델로 관계로 하위 페이지를로드 할 수있는 부분 느릅 나무에 박히 : 나는 모델로 pages 테이블을로드했습니다. 예를 들어

:

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

내 rootpage를 돌려줍니다. 그러나 $page->getSubpages() 또는 $page->getNestedPages()을 사용할 수있는 모델을 어떻게 확장 할 수 있습니까?

내 모델에서 일종의 쿼리를 만들어야합니까? 또는 객체 저장과 같은 기존 함수로이를 해결해야하고 어떻게해야합니까?

나는 많은 것을 시도했지만 이것이 어떻게 작동하는지 간단히 알 수 있습니다.

답변

0

당신은 당신의 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; 
} 

을 추가해야합니다.

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

과 같은 getSubpages 메서드를 직접 작성할 수는 없지만이 방법은 테스트하지 않았지만 alle 서브 페이지를 얻는 방법은 다음과 같습니다.

0

나는 완벽한 Page-Tree를 반환하는 typo3 메서드를 찾을 수 없다는 것을 의아하게 생각합니다. (그래서 나는 (extbase 확장자에서 사용할 수있는) 작은 함수를 작성합니다. 당신이 PageRepository

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

this-> t3pageRepository->의 init()의 인스턴스를 필요로 처음

) 확장하거나 사용자 정의하기 쉬운;

당신의 페이지 데이터와 하위 페이지와 배열을 얻을이 기능으로 다음 "... h 제하십시오 = 0 = 0 숨겨진 WHERE"

를 초기화 할 같은 몇 가지 기본적인 confs을 설정할 수 있습니다. 내가 구현 최고 수준 :

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; 
} 
관련 문제