В настоящее время я работаю над выводом иерархии в терминах навигационного меню из вложенного набора в Doctrine.
У меня есть несколько родителей, у которых тогда есть несколько детей.
В данный моментсо временем есть только 2 уровня: родитель и ребенок (без внуков).
У меня есть следующий код:
//actions:
public function executeShow(sfWebRequest $request)
{
$this->tree = Doctrine::getTable('Model')->getMenuTree();
}
//lib:
class ModelTable extends Doctrine_Table
{
/**
* Gets tree element in one query
*/
public function getMenuTree()
{
$q = $this->createQuery('g')
->orderBy('g.root_id')
->addOrderBy('g.lft')
->where('g.root_id NOT NULL');
return $q->execute(array(), Doctrine_Core::HYDRATE_ARRAY_HIERARCHY);
}
}
//template:
<?php function echoNode($tree, $parent=null) { ?>
<ul>
<?php foreach ($tree as $node): ?>
<li data-id='<?php echo $node['id'] ?>'>
<?php echo $node['name'] ?>
<?php if (count($node['__children']) > 0): ?>
<?php echo echoNode($node['__children'], $node) ?>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
<?php } ?>
<?php echo echoNode($tree) ?>
Это выдает:
Parent Node 1
Child Node 1
Child Node 2
Parent Node 2
Child Node 3
Это здорово.
Проблема в том, что я хочу, чтобы мои URL соответствовали отношениям родитель / потомок.
Таким образом, URL для дочернего узла 2 будет /parent-node-1/child-node-2
(это как slug
поля).
Таким образом, любой дочерний элемент родителя также должен иметь слаг-маршрут родительского узла.
Надеюсь, это имеет смысл?
Спасибо