@DarkByte2015

Как сделать наследование шаблонов?

Возможно ли в Yii2 сделать наследование шаблонов как в Django? Я знаю что по умолчанию тут уже есть наследование всех шаблонов от layout, но мне надо отнаследовать шаблон от другого шаблона наследованного от layout. Т.е. layout -> template1 -> template2. Еще мне говорили что такие вещи можно как-то решить с помощью виджетов, но я не понимаю как в данном случае это можно сделать.

Идея простая: мне на странице нужны вкладки. Я использую вот эти (хотя есть и стандартные в Yii - я знаю). Пытался разобраться с аяксовой подгрузкой контента, но бросил эту затею - слишком сложно. Мне надо чтобы каждая вкладка была доступна по ссылке вида "/edit?step=1". Т.е. каждая вкладка - шаг редактирования модели.

Сейчас я сделал так: создал по экшэну для каждого шага (actionEditStep1, actionEditStep2...) и в каждом возвращаю одну и ту же вьюху в которой создается виджет вкладок, а вот активную вкладку я определяю прямо во вьюхе с помощью грязного хака - получаю имя вызванного экшена, беру из него номер шага и рендерю вьюху нужного шага. Т.е. вьюхи у меня называются view.php, step1.php, step2.php...

Но хочется сделать как-то поприличнее. Только не знаю как... Если бы я мог вьюху вкладки отнаследовать от вьюхи в которой создается виджет со всеми вкладками (view.php) было бы идеально. Я бы тогда мог из каждого экшена возвращать уже нужную вьюху шага. Еще мне не нравится то что ссылка получается типа "/edit/step1", а не "/edit?step=1". Т.е. наверное было бы лучше иметь один экшен для редактирования, хотя тут я не уверен... В общем подскажите как лучше сделать?

P.S. PHP 5.6, Yii2.
  • Вопрос задан
  • 582 просмотра
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
Вы явно используете слово "наследование" не в том значении, в котором понимают остальные. А в чем проблема с подгрузкой ajax?
$this->registerJs("
$('.someLink').on('click',function(){
    $('.someBlock').load('/someContrioller/someAction');
});
");

public function actionSomeAction(){
    return $this->renderAjax('some_view');
}
Ответ написан
qonand
@qonand
Software Engineer
Я знаю что по умолчанию тут уже есть наследование всех шаблонов от layout, но мне надо отнаследовать шаблон от другого шаблона наследованного от layout.

Наследование от layout нет, в слой просто передается и вставляется контент нужной страницы. Можно наследовать объект View но как бы для Ваших целей в этом нет смысла.
Т.е. каждая вкладка - шаг редактирования модели.

Не изобретайте велосипед, используйте wizard-форм, например этот или поищите другой
Еще мне не нравится то что ссылка получается типа "/edit/step1", а не "/edit?step=1"

ну это настройки UrlManager, Вы можете его настроить как хотите
Т.е. наверное было бы лучше иметь один экшен для редактирования, хотя тут я не уверен...

лучше сделать пошаговое редактирование данных на фронте и потом отправлять весь массив данных на бэк
Ответ написан
Ваш ответ на вопрос

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

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