Layout's для front-end тем Есть решение
Добрый день. В документации есть такая тема Композитные макеты.
Но не совсем понятно о каких макетах идет речь?
О макетах приложения в backend?
Или всё таки можно использовать данную методологию к front-end?
Стоит задача использовать разные layout's для разных страниц/приложений. Можно ли решить данную задачу?
6 ответов
Для фронтенда используйте механизм родительских тем дизайна.
В качестве примера посмотрите любую стандартную тему дизайна: Default, Custom, Clear и т. д.
Так. Рано отметил как решение. Смотрите, есть родительский шаблон для приложения сайт. Для главной страницы "/" один дизайн, а вот для страницы "/contacts" совсем другой. Как в этом случае быть, когда в одном приложении требуется использовать разный дизайн СТРАНИЦ
Если вы сами разрабатываете приложение, можно завести в теме дизайна хоть десять разных лэйаутов. Экшн устанавливает свой лэйаут и шаблон внутри лэйаута:
// Пример из shopFrontendAction
$this->setLayout(new shopFrontendLayout());
...
$this->setThemeTemplate('home.html');
Лэйаут устанавливает внешний шаблон:
// Пример из shopFrontendLayout
$this->setThemeTemplate('index.html');
Разработчик приложения может завести несколько разных классов-лэйаутов и использовать в них разные шаблоны из темы: index1.html, index2.html, index10.html. Или можно иметь один класс-лэйаут и разные шаблоны, используя ветвление if'ами.
* * *
Если речь не о собственном приложении, а об имеющихся site и shop, то логика там такая. Есть один шаблон-обвязка index.html. Внутрь него через переменную $content подключается то, что возвращают разные экшны приложения. ($content может быть как непосредственно в index.html, так и внутри под-шаблона, подключаемого через {include} - например, main.html)
Такая схема - один файл обвязка, много всего разного внутри $content - задана жёстко, и обойти её без модификации PHP-исходников Сайта и Магазина нельзя. Но это обычно и не нужно. Всё решается CSS стилями и парой {if}'ов в index.html.
Вдогонку про Сайт и Магазин.
index.html
{if ...}
{include file="`$wa_active_theme_path`/index1.html" inline}
{elseif ...}
{include file="`$wa_active_theme_path`/index2.html" inline}
{else}
{include file="`$wa_active_theme_path`/index10.html" inline}
{/if}
Вот теперь ясно. Спасибо за ответ.