Yii: рендеринг действий с использованием другого макета, чем макет контроллера - PullRequest
22 голосов
/ 07 июня 2011

В Yii, есть ли способ визуализировать одно действие, используя layout, отличное от того, что определено для контроллера?У меня есть действие, которое я хотел бы отформатировать не так, как остальные, и из документации не ясно, возможно ли это.

Ответы [ 2 ]

50 голосов
/ 07 июня 2011

Я полагаю, что в этом действии вы могли бы просто вызвать переменную $layout.

public function actionYourAction()
{
    $this->layout = 'nameOfYourAltLayout';
}

Инструкции в приведенной ниже ссылке указывают, что вам придется устанавливать эту переменную для каждого действия, поскольку вы не можетепросто установите общедоступную переменную по умолчанию и ожидайте, что другие действия по умолчанию вернутся к этому.

http://www.yiiframework.com/wiki/28/how-to-implement-multiple-page-layouts-in-an-application/

:: Edit ::

Похоже, что здесь лучше всего определять переменную $layout в скрипте видадля конкретного действия, которое вызывает его.Например, если ваше действие вызывает viewscriptone.php, тогда файл представления viewscriptone будет содержать:

$this->layout = 'nameOfYourAltLayout';

Здесь больше смысла переопределять, чем в действии контроллера.Однако, как сказал LDG, если макет условный, вы, вероятно, должны хранить его в контроллере.Эту информацию все еще можно найти по ссылке выше в разделе «Использование макетов» на странице.

5 голосов
/ 08 июня 2011

Эта статья в вики неплохо описывает работу с макетами, которую стоит прочитать. Я думаю, что вы можете установить макет по умолчанию в начале вашего класса контроллера, а затем переопределить его в конкретной функции действия без необходимости определять макет в каждом действии, по крайней мере, это сработало для меня. Вы также можете использовать функцию beforeAction для любых сложных ситуаций. И, как вы, возможно, уже знаете, вы можете использовать renderPartial, чтобы полностью обойти макет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...