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