我是symfony 2的初学者。我有一个项目,我想用css创建一个动态树,这个树将显示我的类别级别。
我已经尝试自己做,我能够使用3个循环显示我的类别的前3个级别,但其他级别没有显示。
我想要的是知道我是否可以使用递归或其他方式将所有类别显示为树。
这是我使用的动作方法:
public function afficherArborescenceAction(){
$em = $this->getDoctrine()->getManager();
$categories = $em->getRepository('PortfolioBundle:Categorie')->findByCategorieParent();
$sousCategories = $em->getRepository('PortfolioBundle:Categorie')->findSousCategories();
return $this->render('AdministrateurBundle:NouvelleCategorie:showCategories.html.twig',array('categories'=>$categories,'sousCategories'=>$sousCategories));
}
这是我的HTML代码:
<div style="border:1px #999999 solid;border-radius: 5px;width:350px;margin: 100px auto;padding:10px;">
<p>Les catégories:</p>
{% for categorie in categories %}
<ul class="tree">
<li><a href="{{path('sous_categorie',{'id': categorie.id})}}">{{ categorie.libelle }}</a>
{% for sousCategorie in sousCategories %}
<ul>
{% if sousCategorie.categorieParent == categorie.id %}
<li>
<a href="{{path('sous_categorie',{'id': sousCategorie.id})}}">{{ sousCategorie.libelle }}</a>
{% for sous in sousCategories %}
{% if sous.categorieParent == sousCategorie.id %}
<ul>
<li>
<a href="{{path('sous_categorie',{'id': sous.id})}}">{{ sous.libelle }}</a>
</li>
</ul>
{% endif %}
{% endfor %}
</li>
{% endif %}
</ul>
{% endfor %}
</li>
</ul>
{% endfor %}
这是我得到的当前树,使用上面的代码:
答案 0 :(得分:1)
通过使用StofDoctrineExtensionBundle,您可以轻松完成所需的操作。例如,这将生成类别树的嵌套<ul>
:
$htmlTree = $repository->childrenHierarchy(
null,
false,
[
'decorate' => true,
'nodeDecorator' => function ($node)
{
return "<a href=\"https://www.google.com/search?q=$node[name]\">$node[name]</a>";
},
//'rootOpen' => '<ul>', leave it as is
//'rootClose' => '</ul>',
'childOpen' => function ($node)
{
return "<li data-node-id=\"$node[id]\">";
},
'childClose' => '</li>',
],
true
);
$io->writeln($htmlTree);
这里是一个完整的示例,涵盖了从配置到更高级查询的完整过程:Hierarchical Data in Relational Databases with Symfony 4 and Doctrine。
答案 1 :(得分:0)
使用组件树检查那里:
https://github.com/stof/StofDoctrineExtensionsBundle/blob/master/Resources/doc/index.rst
它可以完全满足您的需求