Другой ответ, более простой (и, возможно, более эффективный), с getAncestors () и рекурсией:
//module/templates/_breadcrumbElement.php
if ($node = array_pop($nodes)) // stop condition
{
$currentNodeUrl = $parentUrl . $node->getSlug() . '/';
echo link_to($node->getName(), $currentNodeUrl) . ' > ' ;
include_partial('module/breadcrumbElement', array(
'nodes' => $nodes, 'parentUrl' => $currentNodeUrl));
}
Назовите это с массивом узлов-предков или найдите способ получить Doctrine_Collection
, если вы хотите использовать его с getAncestors()
напрямую.
Опять же, вся ваша проблема связана с тем, что ваши URL рекурсивно вычисляются, было бы проще и быстрее отображать их, если бы у вас был путь столбца с текущим URL (но тогда вам пришлось бы вычислять, обновлять его) и т. . подумайте об этом, если у вас больше операций чтения, чем записи (если ваше дерево меняется не часто).