Задать вопрос

Yii2. Как удалить классы генерируемые Yii в виджетах?

Использую виджет NavBar. Такой код:
<?php NavBar::begin([
             'renderInnerContainer' => false,
             'options' => [
                      'renderInnerContainer' => false,
                      'tag' => 'div',
                      'class' => 'row',
             ],
 ]); ?>
...
<?php NavBar::end(); ?>

В результате получаю такой HTML:
<div id="w0" class="row navbar" role="navigation">
...
</div>

В настройках виджета прописал класс "row", а на выходе получаю "row navbar". Как мне избавиться от класса "navbar"?
  • Вопрос задан
  • 4179 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
IvanCher
@IvanCher
Мысли шире
Переопределите класс своим и делов-то.
class NavBar extends \yii\bootstrap\NavBar
{
    public function init()
    {
        parent::init();
        Html::removeCssClass($this->options, 'navbar');
    }
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@melnikov_m
Настоятельно не рекомендую так делать. Через полгода вы забудите, что там что-то поменяли, а при обновлении виджета все затрется, если так хочется удалить класc сделайте через jQuery.

$('#w0').removeClass('navbar');
Ответ написан
@SaGrok
А может просто использовать yii\widgets\Menu вместо yii\bootstrap\NavBar?
Ответ написан
Комментировать
Flexo
@Flexo Автор вопроса
В общем не придумал ничего лучше чем залезть в исходник виджета и там закоментить строчку добавляющую этот класс.
Html::addCssClass($this->options, 'navbar');
Вопрос в силе. Хотелось бы более изящного решения.

//Update
Лучше строчку не коментить, а переписать так:
if (!isset($this->options['class'])){
            Html::addCssClass($this->options, 'navbar');
}

Если просто закомментировать строку, то в случае когда класс явно не задан, будет вываливаться исключение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы