разбираемся с zii.widgets.CMenu

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
b10s
Сообщения: 72
Зарегистрирован: 2013.02.02, 18:22
Откуда: Краснодар-Сочи-Тимашевск
Контактная информация:

разбираемся с zii.widgets.CMenu

Сообщение b10s »

Здравствуйте, уважаемые!

Хочу в зависимости от url'а менять класс тэга <a>, который генерируется zii.widgets.CMenu следующим кодом:

Код: Выделить всё

<?php $this->widget('zii.widgets.CMenu', array(
                        'items' => array(
                            array('label' => 'Тесты', 'url' => array('/site/index')),
                            array('label' => 'Админка', 'url' => array('/site/admin'), 'visible' => !Yii::app()->user->isGuest),
                            array('label' => 'Войти', 'url' => array('/site/login'), 'visible' => Yii::app()->user->isGuest),
                            array('label' => 'Выйти (' . Yii::app()->user->name . ')', 'url' => array('/site/logout'), 'visible' => !Yii::app()->user->isGuest)
                        ),
                        'htmlOptions'=> array(

                        ),
                    )); ?>
Как это сделать?


Тут http://www.yiiframework.com/doc/api/1.1 ... ass-detail сказано, что по умолчанию активному элементу он ставит класс "active", но ставит он его желменту <li> при этом оставляя класс "active" у тэга <a> в первом <li>. Вот код, когда я нахожусь по адресу site/login

Код: Выделить всё

<ul id="yw0">
<li>
<a class="active" href="/index.php?r=site/index">Тесты</a>
</li>
<li class="active">
<a href="/index.php?r=site/login">Войти</a>
</li>
</ul>


Провёл несколько тестов. Один фиг он всегда присваивает первой ссылке класс актив, исправно меняя этот же класс элементам списка. Бага?
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: разбираемся с zii.widgets.CMenu

Сообщение yiijeka »

В данном случае, active ставится по имени контроллера site.

Тут нечего разбираться, всё уже давно разбиралось:
viewtopic.php?f=3&t=4551
Аватара пользователя
b10s
Сообщения: 72
Зарегистрирован: 2013.02.02, 18:22
Откуда: Краснодар-Сочи-Тимашевск
Контактная информация:

Re: разбираемся с zii.widgets.CMenu

Сообщение b10s »

Во-первых,
yiijeka писал(а):В данном случае, active ставится по имени контроллера site.
- не верно, т.к. при переходе на site/admin я получаю

Код: Выделить всё

<ul id="yw0">
<li class="222">
<a class="active" href="/index.php?r=site/index11">Тесты</a>
</li>
<li>
<a href="/index.php?r=site/index">Тесты</a>
</li>
<li class="111">
<a href="/index.php?r=site/admin">Админка</a>
</li>
<li>
<a href="/index.php?r=site/logout">Выйти (admin)</a>
</li>
</ul> 
что свидетельствует, о системе определении активного меню не только по контроллеру, но и по экшену.

Во-вторых, если я правильно понял смысл из того треда, то смысл в установке свойства 'active' у элемента, о котором говорится тут: http://www.yiiframework.com/doc/api/1.1 ... ems-detail
Однако. Делаю:

Код: Выделить всё

<?php $this->widget('zii.widgets.CMenu', array(
                        'items' => array(
                            array('label' => 'Тесты', 'url' => array('/site/index11'), 'active'=>false),
                            array('label' => 'Тесты', 'url' => array('/site/index')),
                            array('label' => 'Админка', 'url' => array('/site/admin'), 'visible' => !Yii::app()->user->isGuest),
                            array('label' => 'Войти', 'url' => array('/site/login'), 'visible' => Yii::app()->user->isGuest),
                            array('label' => 'Выйти (' . Yii::app()->user->name . ')', 'url' => array('/site/logout'), 'visible' => !Yii::app()->user->isGuest)
                        ),
                        'htmlOptions'=> array(

                        ),
                        'activeCssClass'=>'111',
                        'firstItemCssClass'=>'222'
                    )); ?>
находясь по адресу /site/index, получаю:

Код: Выделить всё

<ul id="yw0">
<li class="222">
<a class="active" href="/index.php?r=site/index11">Тесты</a>
</li>
<li class="111">
<a href="/index.php?r=site/index">Тесты</a>
</li>
<li>
<a href="/index.php?r=site/admin">Админка</a>
</li>
<li>
<a href="/index.php?r=site/logout">Выйти (admin)</a>
</li>
</ul> 
т.е. я тупо установил свойство эктив в фолс, однако. Так же я переопределил activeCssClass и на всякий случай firstItemCssClass, чтобы в случае чего он присвоил элементу эти классы. Однако.

Это как понимать?) Ни явное указание 'active'=>false, ни переопределние классов не пашет!
Аватара пользователя
b10s
Сообщения: 72
Зарегистрирован: 2013.02.02, 18:22
Откуда: Краснодар-Сочи-Тимашевск
Контактная информация:

Re: разбираемся с zii.widgets.CMenu

Сообщение b10s »

Мне понравился еще вот этот вариант, с linkOptions. Делаю:

Код: Выделить всё

 <?php $this->widget('zii.widgets.CMenu', array(
                        'items' => array(
                            array('label' => 'Тесты', 'url' => array('/site/index'), 'linkOptions' => array('class' => ($this->action->id == 'index' ? 'active2' : ''))),
                            array('label' => 'Админка', 'url' => array('/site/admin'), 'visible' => !Yii::app()->user->isGuest),
                            array('label' => 'Войти', 'url' => array('/site/login'), 'visible' => Yii::app()->user->isGuest),
                            array('label' => 'Выйти (' . Yii::app()->user->name . ')', 'url' => array('/site/logout'), 'visible' => !Yii::app()->user->isGuest)
                        ),
                        'htmlOptions'=> array(

                        ),
                    )); ?>
Получаю:

Код: Выделить всё

<ul id="yw0">
<li class="active">
<a class="active2 active" href="/index.php?r=site/index">Тесты</a>
</li>
<li>
<a href="/index.php?r=site/login">Войти</a>
</li>
</ul> 
Ахахаха, zii.widgets.CMenu, что ты делаешь! прекрати!
Аватара пользователя
b10s
Сообщения: 72
Зарегистрирован: 2013.02.02, 18:22
Откуда: Краснодар-Сочи-Тимашевск
Контактная информация:

Re: разбираемся с zii.widgets.CMenu

Сообщение b10s »

Вопрос открыт.
Кратко: как отучить zii.widgets.CMenu дописывать в свойства class первой ссылки в списке "active" ?
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: разбираемся с zii.widgets.CMenu

Сообщение yiijeka »

Не нужно его отучать не от чего, он всё прекрасно работает, у вас проблема скорее всего с какими-то js. Они делают первый пункт меню активным.....Любой ваш код у меня работает правильно, т.е. в первой ссылке active нету.
Аватара пользователя
b10s
Сообщения: 72
Зарегистрирован: 2013.02.02, 18:22
Откуда: Краснодар-Сочи-Тимашевск
Контактная информация:

Re: разбираемся с zii.widgets.CMenu

Сообщение b10s »

неужели действительно какой-то js :(

спасибо за помощь и разъяснения.
Ответить