Вопросы и ответы
Вебмастеру
Type-файлы
Type-файл полностью отвечает за вывод данных на странице сайта. В его задачу входит:
- получение данных для вывода
- формирование html-кода страницы
С практической точки зрения, удобно разделить эту функциональность на отдельные блоки/файлы. Кроме этого, необходимо учитывать особенности html-вывода, когда вывод должен формироваться только после получения данных.
Например при выводе записи (тип «page») нужно заполнить html-meta-поле TITLE и DESCRIPTION. Сделать это возможно только после того, как будет выполнен запрос к базе данных.
Сам по себе html-вывод, при этом формируется из трех частей:
- начальная часть, например секция HEAD
- вывод контента, например текста записи
- конечная часть, например подвал.
Таким образом, типовой алгоритм работы type-файла будет следующим:
- получение данных/контента из БД
- формирование на основе этих данных «служебной» информации, например Title
- подключение начальной части шаблона (main-start)
- формирование html-вывода контента
- завершающая часть вывода (main-end)
В простом варианте type-файл может быть таким:
// получение контента
$text = 'Данные для вывода';
// meta для секции HEAD
mso_head_meta('title', 'Титул страницы');
mso_head_meta('description', 'Описание страницы');
if ($fn = mso_find_ts_file('main/main-start.php')) require($fn);
echo $text;
if ($fn = mso_find_ts_file('main/main-end.php')) require($fn);
Функция mso_find_ts_file()
производит поиск указанного файла вначале в каталоге шаблона, и если его нет, то осуществляет поиск в shared-каталоге. Скорее всего вам не придётся использовать свои файлы main-start.php
и main-end.php
, поскольку в стандартном варианте (в shared) они реализуют возможность использования т.н. main-шаблона — файл, который содержит всю необходимую html-сетку шаблона, без необходимости её разбивать на дополнительные файлы.
Во многих type-файлах для формирования вывода используется обращение к базе данных. Для этого применяется функция mso_get_pages()
. В зависимости от входных параметров, она получает данные разного типа: главная, одиночная запись, рубрики, архивы и т.д.
Рассмотрим для примера тип данных «demo»: шаблон/type/demo/demo.php
. (Вы можете использовать default-шаблон.)
if (!defined('BASEPATH')) exit('No direct script access allowed');
$pages = mso_get_pages([
'custom_type' => 'home',
'limit' => 3,
], $pagination);
mso_head_meta('title', 'Последние записи');
if ($fn = mso_find_ts_file('main/main-start.php')) require($fn);
if ($pages) {
foreach ($pages as $page) {
echo '<h1>' . $page['page_title'] . '</h1>';
echo '<div>' . $page['page_content'] . '</div>';
}
mso_hook('pagination', $pagination);
}
else {
echo '<h1>Записей не найдено</h1>';
}
if ($fn = mso_find_ts_file('main/main-end.php')) require($fn);
# end of file
Если набрать адрес http://ваш-сайт/demo, то получим вывод последних записей сайта.
Функция mso_get_pages()
достаточно сложная, но управляется через массив параметров. Вы можете с ним ознакомиться по исходному коду файла. В данном примере мы должны указать custom_type
, поскольку тип demo неизвестен системе. Поэтому получение записей будет происходить по алгоритму главной страницы.
Вывод записей осуществляется обычным перебором цикла.
Пагинация страниц выводится через плагин, который сработает черех хук (ловушка) pagination
.