예제 #1
0
 protected function pageTree($model = 'Model_Page_Base', $label = null, $active_url = null, $extra_fields = null)
 {
     $extra_fields_str = !is_null($extra_fields) ? ', page.' . implode(', page.', $extra_fields) : '';
     if ($model == 'Model_Page_Base') {
         $extra_fields_str = ', TYPE(page) AS type';
     }
     $nodes = $model::select('page.id, page.title, page.menu_title, page.lvl, page.lft, page.rgt' . $extra_fields_str . ', url.url, url.slug', 'page')->leftJoin('page.url', 'url')->where('page.lvl > 0')->andWhere('page.visible = true')->orderBy('page.root, page.lft', 'ASC')->getQuery();
     // Set the query hint if multi lingual!
     if (\CMF\Doctrine\Extensions\Translatable::enabled()) {
         $nodes->setHint(\Doctrine\ORM\Query::HINT_CUSTOM_OUTPUT_WALKER, 'Gedmo\\Translatable\\Query\\TreeWalker\\TranslationWalker');
     }
     $nodes = $nodes->getArrayResult();
     $root_label = $label ? $label . '_level1' : 'level1';
     $crumbs_label = $label ? $label . '_crumbs' : 'crumbs';
     $uri = $active_url ? $active_url : \CMF::link(\CMF::original_uri());
     $nodes = \D::manager()->getRepository($model)->buildTree($nodes, array());
     $this->{$crumbs_label} = array();
     $this->processNodes($nodes, $uri, 1, $label, $model);
     $crumbs = $this->{$crumbs_label};
     ksort($crumbs);
     $this->{$crumbs_label} = $crumbs;
     return $this->{$root_label} = $nodes;
 }