Php 在细枝中循环浏览类别、子类别和产品
我的数据库中的表结构如下所示: 有些类别有子类别,有些则没有。产品可以属于:Php 在细枝中循环浏览类别、子类别和产品,php,symfony,view,twig,Php,Symfony,View,Twig,我的数据库中的表结构如下所示: 有些类别有子类别,有些则没有。产品可以属于: 子类别 父类别(此类别没有子类别) 我的数组如下所示: 类别A是父类别B类-头部也是父类类别B-儿童是B-头部的儿童类别 现在我想这样展示这个数组: 但我被困在如何知道它是一个类别还是一个产品列表上。有人能帮我吗?如果您使用的是条令模型(如果您使用的是Symfony,您应该是这样),那么您所做的就是在对象上的方法之间循环 简单快速的示例,假设很少,例如使用@Template()注释和标准DAOs(也称为Ent
- 子类别
- 父类别(此类别没有子类别)
但我被困在如何知道它是一个类别还是一个产品列表上。有人能帮我吗?如果您使用的是条令模型(如果您使用的是Symfony,您应该是这样),那么您所做的就是在对象上的方法之间循环 简单快速的示例,假设很少,例如使用@Template()注释和标准DAOs(也称为EntityManager),以及在Category.php(也称为model/entity)上使用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 for flat中重复了嵌套的HTML(很可能是这种情况),那么您可以创建并包含一个宏来为您输出
这是基本的,但我想它基本上涵盖了你的问题,如果我正确理解你的问题
顺便说一句,你绝对应该阅读twig和Symfony的文档,因为它们到处都有这样的例子
如果您做出适当回应,我将编辑此答案。目前您还没有发布足够的信息来正确指导您,但希望这能有所帮助。您可以使用递归宏。在宏中,您可以打印产品列表或打印类别列表,然后调用自己。。等等
{% 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 %}
这只是创建了一组基本的嵌套无序列表,但显然可以用于任何您想要的HTML
看一看)
小提琴呈现如下(TwigWiddle仅显示HTLM,而不是可用于可视化的内容)
数据结构看起来并不适合您正在尝试的操作。父类别可以拥有的子类别是否有最大数量?例如,B类下是否还有其他类别?或者一件物品只能分为两类?@Shane,在B类-头下可能还有另一个儿童类。你建议什么结构。。一个类别可以同时包含子类别和产品,还是只能包含其中之一?@qoopmao,一个类别可以包含子类别(这些类别可以包含产品)或产品。不是两者都有。@nielsv老实说,我对Symfony不太了解,但它可以是一个实际的实体,而不仅仅是一个数组键(取决于它在后端的设置方式)。然后,我认为检查您当前循环的内容是否是/有子类别会更容易一些。
{% from '_macros.html.twig' import navigation %}
{{ navigation(array_of_categories) }}