2016-06-28 91 views
-1

在我的数据库我的表结构是这样的:遍历类,childcategories和产品在树枝

enter image description here

某些类别具有孩子类别,有些不是。一个产品可以属于:

  • 儿童类
  • 父类(该类没有子类别)

我的数组是这样的:

enter image description here

范畴A是父类别。 B类 - 头也是一个父类别。 B类 - 儿童是儿童类乙 - 头。现在

我想显示这个数组是这样的:

enter image description here

但是我卡在如何知道它是否是一个类别或产品的列表。有人可以帮我弄这个吗?

+0

的数据结构看起来并不理想的你想要什么去做。父类别可以有最大数量的子类别吗?例如,类别B下是否可以有另一个类别?或者一件物品只能在两种类别下使用? – Shane

+0

@Shane,类别B - 头下可能有另一个孩子类别。你会建议什么结构? .. – nielsv

+0

一个类别可以同时具有子类别和产品吗? – qooplmao

回答

1

如果您使用的是Doctrine Models(如果您使用的是Symfony,那么您应该是),那么您所做的只是循环遍历对象上的方法。

几乎没有假设的快速和肮脏的例子,例如使用@Template()注解和标准的DAO又名的EntityManager [秒],以及具有的getChildren()和的getProducts()在Category.php(AKA模型/实体)方法

在控制器

/** 
* @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,那么你可以创建和包括宏吐出了这一点你。

这是基本的,但我认为它几乎涵盖了你在问我是否正确理解你的问题。

顺便说一句,你一定要阅读小枝和Symfony的文档,因为他们有这样的例子到处都是。

我会编辑此答案,如果您作出适当的响应。现在你还没有发布足够的信息来真正指导你,但希望这有助于你。

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) &amp; {{ 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,而不是东西,你可以用它来可视化)...

enter image description here