Шаблон для главной страницы: различия между версиями
Olga (обсуждение | вклад) |
Olga (обсуждение | вклад) |
||
Строка 41: | Строка 41: | ||
Чтобы к этому не возвращаться, добавим все поля, которые хотели, в частности, ссылки на дерево для новостей и 404 ошибки, а также название компании. Новости уже есть, осталось в настройках выбрать нужный раздел, а вот 404 страницы нет, [[404 страница|создадим её]]. | Чтобы к этому не возвращаться, добавим все поля, которые хотели, в частности, ссылки на дерево для новостей и 404 ошибки, а также название компании. Новости уже есть, осталось в настройках выбрать нужный раздел, а вот 404 страницы нет, [[404 страница|создадим её]]. | ||
+ | |||
+ | Вообще хорошим тоном является не портить шаблон данных "Настройки", а создать дочерний шаблон, куда и внести все нужные поля. Это без сомнения пригодится, если на одной системе делать несколько сайтов с разным набором настроек. | ||
+ | |||
+ | Чтобы не тащить простыню кода, разделим content/home/index.phtml на фрагменты по блокам: | ||
+ | |||
+ | <pre> | ||
+ | <?php | ||
+ | echo $this->render($variables, "content/home/intro"); | ||
+ | echo $this->render($variables, "content/home/news"); | ||
+ | echo $this->render($variables, "content/home/contacts"); | ||
+ | ?> | ||
+ | </pre> | ||
+ | |||
+ | Фрагмент content/home/intro.phtml останется аналогом контентной страницы: | ||
+ | |||
+ | <pre> | ||
+ | <?php | ||
+ | $page = $variables['page']; | ||
+ | ?> | ||
+ | <section> | ||
+ | <div class="container"> | ||
+ | <div class="row"> | ||
+ | <div class="col-12"> | ||
+ | <h1 umi:element-id="<?= $page->id ?>" umi:field-name="h1" umi:empty="<?= $this->translate('empty_page_name') ?>"><?= $page->h1 ?></h1> | ||
+ | </div> | ||
+ | <div class="col-12"> | ||
+ | <div umi:element-id="<?= $page->id ?>" umi:field-name="content" umi:empty="<?= $this->translate('empty_page_content') ?>"><?= $page->content ?></div> | ||
+ | </div> | ||
+ | </div> | ||
+ | </div> | ||
+ | </section> | ||
+ | </pre> |
Версия 14:11, 3 ноября 2020
Как правило, стартовая страница сайта отличается от остальных. Как отразить эту особенность в нашем шаблоне?
Вообще-то очень просто. В объекте $variables['page'] есть свойство 'is_default', которое мы можем проверить. И если оно true, то подтягиваем шаблон главной. Если нет - страницы нужного модуля. Вставим эту проверку в файл main.phtml:
<main> <?php if ($variables['page']->is_default) echo $this->render($variables, "content/home/index"); else echo $this->render($variables, "{$variables['module']}/{$variables['method']}"); ?> </main>
И надо создать в папке php фрагмент шаблона content/home/index.phtml, который подключаем. Для начала пусть будет просто контентная страница:
<?php $page = $variables['page']; ?> <section> <div class="container"> <div class="row"> <div class="col-12"> <h1 umi:element-id="<?= $page->id ?>" umi:field-name="h1" umi:empty="<?= $this->translate('empty_page_name') ?>"><?= $page->h1 ?></h1> </div> <div class="col-12"> <div umi:element-id="<?= $page->id ?>" umi:field-name="content" umi:empty="<?= $this->translate('empty_page_content') ?>"><?= $page->content ?></div> </div> </div> </div> </section>
Добавление блоков
Обычно на главную страницу стараются запихнуть весь контент сайта. Наверно потому, что не надеются, что пользователь настолько заинтересуется, что пройдет куда-то ещё.
Продолжим эту скверную традицию. У нас есть контент главной страницы, где можно разместить информацию о компании или продукте, и новости. Явно не хватает контактов, которые лучше добавить в настройки:
Чтобы к этому не возвращаться, добавим все поля, которые хотели, в частности, ссылки на дерево для новостей и 404 ошибки, а также название компании. Новости уже есть, осталось в настройках выбрать нужный раздел, а вот 404 страницы нет, создадим её.
Вообще хорошим тоном является не портить шаблон данных "Настройки", а создать дочерний шаблон, куда и внести все нужные поля. Это без сомнения пригодится, если на одной системе делать несколько сайтов с разным набором настроек.
Чтобы не тащить простыню кода, разделим content/home/index.phtml на фрагменты по блокам:
<?php echo $this->render($variables, "content/home/intro"); echo $this->render($variables, "content/home/news"); echo $this->render($variables, "content/home/contacts"); ?>
Фрагмент content/home/intro.phtml останется аналогом контентной страницы:
<?php $page = $variables['page']; ?> <section> <div class="container"> <div class="row"> <div class="col-12"> <h1 umi:element-id="<?= $page->id ?>" umi:field-name="h1" umi:empty="<?= $this->translate('empty_page_name') ?>"><?= $page->h1 ?></h1> </div> <div class="col-12"> <div umi:element-id="<?= $page->id ?>" umi:field-name="content" umi:empty="<?= $this->translate('empty_page_content') ?>"><?= $page->content ?></div> </div> </div> </div> </section>