我的数据库中的表结构如下:
某些类别有儿童类别,有些则没有。产品可以属于:
我的数组看起来像这样:
A类是父类别。 B类 - 头也是父类别。 B类 - 儿童是 B - Head 的子类别。
现在我想像这样显示这个数组:
但我仍然坚持如何知道它是一个类别还是一个产品列表。有人可以帮我这个吗?
答案 0 :(得分:1)
如果您正在使用Doctrine Models(如果您正在使用Symfony,那么您应该这样做),那么您所做的就是遍历对象上的方法。
快速而肮脏的例子,几乎没有假设,例如:使用@Template()注释和标准DAO(即EntityManager [s])以及在Category.php(AKA模型/实体)上使用getChildren()和getProducts()方法
在控制器上
/**
* @Route("/products", name="all_products")
* @Template()
*/
public function someAction()
{
...
$categories = $this->getCategoryManager()->findBy([]);
...
return [
'categories' => $categories
];
}
在你的树枝模板中
{% if categories|length > 0 %}
{% for category in categories %}
{% if category.children|length > 0 %}
... Here you create the HTML for nested ...
{% else %}
... Here you create the HTML for Category ...
{% for product in category.products %}
... Here you create the HTML for products ...
{% endfor %}
{% endif %}
{% endfor %}
{% else %}
.... some html to handle empty categories ....
{% endif %}
如果嵌套的HTML在HTML for flat(非常可能的场景)中重复,那么你可以创建并包含一个宏来为你吐出。
这是基本的,但我认为它几乎涵盖了您在正确理解问题时所提出的问题。
顺便说一句,你应该阅读twig和Symfony的文档,因为他们到处都有这样的例子。如果您做出适当的回复,我会编辑此答案。现在你还没有发布足够的信息来真正指导你,但希望这会有所帮助。
答案 1 :(得分:0)
您可以使用递归宏。在宏中,您可以打印产品列表或打印类别列表,然后自行调用..依此类推......
{% macro navigation(categories, products) %}
{% from '_macros.html.twig' import navigation %}
{% if categories|length > 0 or products|length > 0 %}
<ul>
{% for category in categories %}
<li>
{{ category.name }}
({{ category.children|length }} child(ren) & {{ category.products|length }} products)
{{ navigation(category.children, category.products) }}
</li>
{% endfor %}
{% for product in products %}
<li>{{ product.name }}</li>
{% endfor %}
</ul>
{% endif %}
{% endmacro %}
你可以在像...这样的模板中使用它。
{% from '_macros.html.twig' import navigation %}
{{ navigation(array_of_categories) }}
这只是创建一组基本的嵌套无序列表,但显然可以与任何你想要的HTML一起使用。
对于小提琴,请参阅http://twigfiddle.com/mzsq8z)。
小提琴呈现如下(twigfiddle只显示HTLM,而不是你可以用来形象化的东西)......