【问题标题】:Create Multi-Level menu in Phalcon在 Phalcon 中创建多级菜单
【发布时间】:2014-12-12 10:00:35
【问题描述】:

我正在尝试根据类别表在 Phalcon 框架中创建多级菜单。到目前为止,我这样做了:

MySql 表分类:

id  parent          name                count_post
1     0         level_1_name_1              0                   
2     1         level_2_name_2              0
3     1         level_2_name_3              0   
4     2         level_3_name_4              60      
5     2         level_3_name_5              30
6     0         level_1_name_6              0
7     6         level_2_name_7              0
8     6         level_2_name_8              0
9     7         level_3_name_9              80
10    7         level_3_name_10             90  

我需要创建一个这样的 html:

<ul>
   <li>
      <a>level_1_name_1</a>
      <ul>
         <li>
            <a>level_2_name_2</a>
            <ul>
               <li><a>level_3_name_4</a></li>
               <li><a>level_3_name_5</a></li>
            </ul>
         </li>
         <li>
            <a>level_2_name_3</a>
         </li>
      </ul>
   </li>
   <li>
      <a>level_1_name_6</a>
      <ul>
         <li>
            <a>level_2_name_7</a>
            <ul>
               <li><a>level_3_name_9</a></li>
               <li><a>level_3_name_10</a></li>
            </ul>
         </li>
         <li>
            <a>level_2_name_8</a>
         </li>
      </ul>
   </li>
</ul>

在控制器中,我从模型中获取数据:

$menu = Menu::find();
$this->view->setVar('menu', $menu);

但是如何在 volt 模板中生成 HTML 以像上面一样输出?感谢您的帮助!

【问题讨论】:

    标签: phalcon


    【解决方案1】:

    这样的事情可能对你有用:

    型号

    class Menu extends ModelBase
    {
        public $id;
        public $parent;
        public $name;
        public $count_post;
    
        public function getChilds()
        {
            $result = false;
    
            if($this->id) {
                $childs = self::find("parent = $this->id");
                if(count($childs)) {
                    $result = $childs;
                }
            }
    
            return $result;
        }
    }
    

    查看

    {%- macro print_menu_level(menu_level_items) %}
    
        {%- for menu_item in menu_level_items %}
    
            {% if loop.first %}
                <ul>
            {% endif %}
    
            <li>
    
                <a>{{ menu_item.name }}</a>
    
                {% set next_menu_level_items = menu_item.getChilds() %}
                {% if next_menu_level_items %}
                    {{ print_menu_level(next_menu_level_items) }}
                {% endif %}
    
            </li>
    
            {% if loop.last %}
                </ul>
            {% endif %}
    
        {%- endfor %}
    
    {%- endmacro %}
    
    
    
    {{ print_menu_level(root_menu_items) }}
    

    控制器

    $rootMenuItems = Menu::find('parent = 0');
    $this->view->setVar('root_menu_items', $rootMenuItems);
    

    免责声明:这只是一个我没有测试过的例子_

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 1970-01-01
      相关资源
      最近更新 更多