Общие принципы шаблонов
В MV шаблонами (видами, views) являются php файлы расположенные в папке views. Данные файлы отвечают за внешний вид (frontend) сайта и подключаются по системе маршрутизации. Каждому запрошенному URL будет соответствовать один из шаблонов, даже если страница не будет найдена в базе данных.
Все шаблоны должны располагаться в папке "views", также в данной папке можно создавать вложенные папки для группировки шаблонов. За маршрутизацию и подключение шаблонов отвечает класс Router, который содержит в себе запрошенный URL. Данный класс хранит исходный "очищенный" URL, а также массив частей URL. Более подробно объект описан в разделе Объект класса Router.
Примеры работы с объектом Router.
$mv -> router -> getUrl() //Получение полного URL $mv -> router -> getUrlParts() //Получение массива частей URL
Метод определение параметров поиска страницы в базе данных по URL, примеры работы с URL вида "/event/32/" и "/event/birthday/".
public function defineEventPage(Router $router) { $url_parts = $router -> getUrlParts(); if(count($url_parts) >= 2 && $url_parts[0] == "event" && is_numeric($url_parts[1])) return $this -> findRecord(array("id" => $url_parts[1], "active" => 1)); else if(count($url_parts) >= 2 && $url_parts[0] == "event" && $url_parts[1] && !is_numeric($url_parts[1])) return $this -> findRecord(array("url" => $url_parts[1], "active" => 1)); else return false; } //Пример вызова метода $event_content = $mv -> events -> defineEventPage($mv -> router); $mv -> display404($event_content);
Примеры настроек маршрутизации
Содержимое файла "config/routes.php".
$mvFrontendRoutes = array( "index" => "view-index.php", "404" => "view-404.php", "default" => "view-default.php", "contacts/" => "view-contacts.php", "contacts/map/" => "view-location.php", "client/" => "client/view-home.php", "client/messages/" => "client/view-messages.php", "article/special/*/" => "view-special.php", "article/*/" => "view-article.php", "products->" => "view-products.php", "events->" => "company/live/view-events.php" );
Порядок работы маршрутизатора
- Вначале маршрутизатор проверяет URL на предмет запроса главной (индексной) страницы сайта.
- Если запрошена не главная страница происходит поиск строгого соответствия URL одному из шаблонов (такими шаблонами являются например "contacts/", "about/", "register/complete/").
- Далее если строгого соответствия не найдено ищется шаблон вида "module/extra/*/" и "module/extra->", первый из которых представляет собой 3 части, 2 из которых определены, а третья может быть переменной, либо все шаблоны, которые начинаются на "module/extra".
- Далее идет проверка на соответствие URL шаблонам вида "module/*/" (2 части URL, первая из которых обозначена как "module", например "products/14/", "articles/982/", "users/ivanov/").
- Далее идет поиск шаблона вида "module->" (все URL, первая часть которых равна "module", например "products/23/", "catalog/cars/page/2/").
- Если не одно соответствие шаблону URL не было найдено то происходит переход на шаблон "default".
- Если в шаблоне "default" страница не определилась, то вызывается шаблон "404" (страница не найдена). Также "404" шаблон может быть вызван в любом другом шаблоне, когда не удалось идентифицировать страницу по переданному URL.
Примеры работы маршрутизатора
Ситуации на основе ранее приведенного файла "config/routes.php".
- URL: "about/"
Совпадение с шаблоном: "default", Подключаемый файл: "view-default.php", (совпадений не найдено) - URL: "contacts/map/"
Совпадение с шаблоном: "contacts/map/", Подключаемый файл: "view-location.php" - URL: "contacts/google-map/"
Совпадение с шаблоном: "default", Подключаемый файл: "view-default.php" (совпадений не найдено) - URL: "client/messages/"
Совпадение с шаблоном: "client/messages/", Подключаемый файл: "client/view-messages.php" - URL: "article/543/"
Совпадение с шаблоном: "article/*/", Подключаемый файл: "view-article.php" - URL: "article/nature/47/"
Совпадение с шаблоном: "default", Подключаемый файл: "view-default.php" (совпадений не найдено, для перехода на "view-article.php" необходимо расширить шаблон до вида "article->") - URL: "events/company/new-year/page/4/"
Совпадение с шаблоном: "events->", Подключаемый файл: "company/live/view-events.php" - URL: "article/special/92/"
Совпадение с шаблоном: "article/special/*/", Подключаемый файл: "view-special.php"
Примеры вызова 404 ошибки
if(...) $mv -> display404(); //Переход на страницу 404 $content = $mv -> pages -> findRecord(array("url" => "index")); $mv -> display404($content); //Если в переменной $content пусто, то переход на 404 страницу $content = $mv -> pages -> findRecord($mv -> pages -> defineUrlType($mv -> router)); $mv -> display404($content); $content = $mv -> pages -> findRecord(array("url" => "events","active" => 1)); $mv -> display404($content); $event_content = $mv -> events -> findRecord($mv -> events -> defineUrlType($mv -> router)); $mv -> display404($event_content); $content = $mv -> products -> defineProductPage($mv -> router); $mv -> display404($content);
Предыдущий раздел
Дополнительные возможности