@asder117

Создание блочного сайта и передача переменной в layout?

рошу помощи в чем, у меня в index.php рендерится одно представвление и работает врод норм. выводится в content/


<?php $this->renderPartial('_topicday', array('topicday' => $topicday)); ?>


Сейчас надо сделать сделать новую верстку и загнать этот блок в haeder где лого. Одна из идей - вставить данный блок в layout но вот и проблема - выдается ошибка - "undefined variable topicday "/ Как решить эту задачу, может кто посоветуете. Я понимаю вопрос дилетантский но я не догоняю как сделать. Или первый вариант или второй.
а также второй вопрос:
Хочется сделать сайт с 3 колонками, но хочу чтобы 1 и 3 колонка не изменялась. Кто что посоветует?. Есть вариант сделать панелями, а есть через портлет. Жду совета, заранее спасибо.
  • Вопрос задан
  • 189 просмотров
Решения вопроса 1
igorbelikov
@igorbelikov
Fullstack Developer
Вот пару способов:
  • оформить как виджет
  • объявить переменную в контроллере и выводите ее в представьении
// В контроллере
public $topicday = "defaultvalue";;
public function actionTest() {
  $this->topicday = "somevalue";
  // ...
}
// Вывод в представлении (layout)
<?= $this->topicday ?>


PS
Если необходимо использовать второй способ, то вам нужно в вью сделать так:
<?php $this->renderPartial('_topicday', array('topicday' => $this->topicday)); ?>

Только учтите, что этому свойству нужно задавать какое-то значения по умолчанию или делать проверку в самом _topicday и если оно NULL, то ничего не выводить ибо ваш layout могут использовать другие контроллеры и в них значение свойства public $topicday может быть не определенно.
А вообще, то этот случай полностью подходит под категорию - виджет, там нет ничего сложно в их реализации, а после того, как вы его сделаете - вы поймете на сколько это красивое решение и как оно удобно. Гайд можно посмотреть тут www.bsourcecode.com/yiiframework2/how-to-create-cu...
В коде он будет выводится примерно так:
<?= TopicDay::widget() ?>
И главное - вся логика, представления и его контрол - будут в одном месте и никак не будут от чего-то зависеть.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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