Шаблон для главной страницы: различия между версиями

Материал из Wiki from ADT Web Solutions
Перейти к навигации Перейти к поиску
Строка 79: Строка 79:
 
<?php
 
<?php
 
$newsList = $variables['settings']->newslist;
 
$newsList = $variables['settings']->newslist;
 +
if (!empty($newsList)) $newsPageId = $newsList[0]->id;
 +
else $newsPageId = false;
 +
$newsList = $this->macros('news', 'lastlist', [$newsPageId]);
 +
?>
 +
        <section>
 +
            <div class="container">
 +
                <div class="row">
 +
                    <div class="col-12">
 +
                        <h2>Что нового?</h2>
 +
                    </div>
 +
                    <div class="col-12">
 +
                        <ul class="list-group">
 +
<?php
 +
if (!empty($newsList['items'])):
 +
    foreach ($newsList['items'] as $item):
 +
?>
 +
                            <li class="list-group-item">
 +
                                <em><?= date("d.m.Y", $item['publish_time']) ?></em>
 +
                                <a href="<?= $item['link'] ?>"><h3 umi:element-id="<?= $item['id'] ?>" umi:field-name="name" umi:empty="<?= $this->translate('empty_page_name') ?>"><?= $item['name'] ?></h3></a>
 +
                            </li>
 +
<?php
 +
    endforeach;
 +
endif;
 +
?>
 +
                        </ul>
 +
                    </div>
 +
                </div>
 +
            </div>
 +
        </section>
 +
</pre>
 +
 +
Фрагмент для контактов content/home/contacts.phtml:
 +
 +
<pre>
 +
<?php
 +
$phone = $variables['settings']->phone;
 
if (!empty($newsList)) $newsPageId = $newsList[0]->id;
 
if (!empty($newsList)) $newsPageId = $newsList[0]->id;
 
else $newsPageId = false;
 
else $newsPageId = false;
Строка 87: Строка 123:
 
                 <div class="row">
 
                 <div class="row">
 
                     <div class="col-12">
 
                     <div class="col-12">
                         <h2>Что нового?</h2>
+
                         <h2>Контакты</h2>
 
                     </div>
 
                     </div>
 
                     <div class="col-12">
 
                     <div class="col-12">

Версия 15:10, 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>

Добавление блоков

Обычно на главную страницу стараются запихнуть весь контент сайта. Наверно потому, что не надеются, что пользователь настолько заинтересуется, что пройдет куда-то ещё.

Продолжим эту скверную традицию. У нас есть контент главной страницы, где можно разместить информацию о компании или продукте, и новости. Явно не хватает контактов, которые лучше добавить в настройки:

Screenshot 5 UMI CMS - Редактирование типа данных.png

Чтобы к этому не возвращаться, добавим все поля, которые хотели, в частности, ссылки на дерево для новостей и 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>

Фрагмент для новостей content/home/news.phtml:

<?php
$newsList = $variables['settings']->newslist;
if (!empty($newsList)) $newsPageId = $newsList[0]->id;
else $newsPageId = false;
$newsList = $this->macros('news', 'lastlist', [$newsPageId]);
?>
        <section>
            <div class="container">
                <div class="row">
                    <div class="col-12">
                        <h2>Что нового?</h2>
                    </div>
                    <div class="col-12">
                        <ul class="list-group">
<?php
if (!empty($newsList['items'])):
    foreach ($newsList['items'] as $item):
?>
                            <li class="list-group-item">
                                <em><?= date("d.m.Y", $item['publish_time']) ?></em>
                                <a href="<?= $item['link'] ?>"><h3 umi:element-id="<?= $item['id'] ?>" umi:field-name="name" umi:empty="<?= $this->translate('empty_page_name') ?>"><?= $item['name'] ?></h3></a>
                            </li>
<?php
    endforeach;
endif;
?>
                        </ul>
                    </div>
                </div>
            </div>
        </section>

Фрагмент для контактов content/home/contacts.phtml:

<?php
$phone = $variables['settings']->phone;
if (!empty($newsList)) $newsPageId = $newsList[0]->id;
else $newsPageId = false;
$newsList = $this->macros('news', 'lastlist', [$newsPageId]]);
?>
        <section>
            <div class="container">
                <div class="row">
                    <div class="col-12">
                        <h2>Контакты</h2>
                    </div>
                    <div class="col-12">
                        <ul class="list-group">
<?php
if (!empty($newsList['items'])):
    foreach ($newsList['items'] as $item):
?>
                            <li class="list-group-item">
                                <em><?= date("d.m.Y", $item['publish_time']) ?></em>
                                <a href="<?= $item['link'] ?>"><h3 umi:element-id="<?= $item['id'] ?>" umi:field-name="name" umi:empty="<?= $this->translate('empty_page_name') ?>"><?= $item['name'] ?></h3></a>
                            </li>
<?php
    endforeach;
endif;
?>
                        </ul>
                    </div>
                </div>
            </div>
        </section>