将 HTML Megamenu 转换为 Yii CMenu zii Widget

Convert HTML Megamenu to Yii CMenu zii Widget

我刚开始使用 Yii,在将我的 HTML Megamenu 转换为 Yii 时遇到了一些问题。基本上我的 html 是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
        <ul class="some_class">
            <li class="active">Parent 1
               
                   
                        Child 1
                   
                   
                       
                           
<ul>

                               
<li>
Child 3
</li>

                               
<li>
Child 4
</li>

                           
</ul>

                                     
                   
               
           
</li>

         
</ul>

事实证明,将其适应 CMenu 小部件比我想象的要困难......尤其是对于像我这样的初学者。我可以想出类和列表,但是如何将 Div 放在 CMenu 小部件中?

谢谢


您应该创建自己的小部件。创建小部件并不比创建控制器难。

从简单的事情开始,看看它是如何发挥作用的。让我们尝试一下,这是一个简单的示例,不处理递归,但可能没问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
class MyMenu extends CWidget
{
    public $items = [];
    public function init()
    {
       // Possibli do something with items
    }

    public function run()
    {
        $this->render('menu', ['items' => $this->items]);
    }
}

在views/menu.php中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
        <ul class="some_class">
              <?php foreach($items as $item):?>
            <li class="active"><?=$item['title'];?>
               

                   
                        <?= $item['overview'];?>
                   
                   
                       
                           
<ul>

                                         <?php foreach($item['items'] as $row):?>
                               
<li>
<?= $row['title'];?>
</li>

                                          <?php endforeach;?>
                           
</ul>

                       
                   
               
           
</li>

                <?php endforeach;?>
         
</ul>

然后在你的 ccontorller 视图中使用它

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$this->widget('path.to.MyMenu', [
    'items' => [
        [
            'title' => 'Foo',
            'overview' => 'Some overview',
            'items' => [
                [
                    'title' => 'Bar'
                ],
                [
                    'title' => 'Baz'
                ]
            ]
        ]
    ]
]);
?>

免责声明:未经测试,只是为了展示想法,可能有效或无效。