Всем доброго времени суток. Сегодня мы продолжаем собирать ядро для системы RS-MINI. Я долго думал с чего нам продолжить. По плану у нас реализовать класс который будет представлять из себя страницы сайта, но это очень трудно сделать не представляя что вообще будет представлять из себя страница.
Многие привыкли, что страница сайта — это область с текстом и картинками. В конечном итоге это так и есть, но эти самые тексты и картинки бывают очень разными. На одной просто какая-то статья, на другой список материалов, на третьей форма обратной связи. Карты, схемы и многое другое. Класс не может вобрать в себя все разнообразие в котором предстают перед нами эти самые страницы.
С другой стороны у страниц есть кое-что общее. Точнее правильнее сказать у страниц есть кое-что очень разное, а все что остается схоже. Без сомнений разное — это контент (я имею ввиду само оформление контента). А вот схожее это
Контентом будет заниматься контроллеры (класс представляющий нам контроллеры мы будем писать в следующей статье), эта тема отдельной статьи, а вот базовые пункты самой страницы — это наша сегодняшняя тема.
К тем пунктам что я описал выше, нужно пояснить еще несколько моментов, которые касаются уже самой RS-MINI.
В своей практике, я поделил страницы на два типа:
В чем разница? Разница в хранении этих страниц . Как Вы уже могли себе представить, каждая страничка это строчка в базе. Да, так оно и есть, и если у нас на сайте будет 200 статей, то и строк в базе будет столько же. Такие страницы я называю статичными.
А динамическая станица, это когда статей 200 штук, а в базе данных все представлено в виде одной строчки (фактически в виде одной страницы).
Для чего это? Ну собственно говоря статьи у нас будут реализоваться как раз в виде статичных страниц, а вот редактор этих страниц в таком виде будет не удобен. Давайте подумаем, как добиться того чтобы статья с id = 123 редактировалась бы вот такому адресу
http://mini.test.ru/admin/articles/123/edit/
Согласитесь, придется создать внутри страницы articles страницу 123, а внутри этой страницы — страницу edit. Я уверен Вы придете к выводу, что лучше сделать вот такой урл
http://mini.test.ru/admin/articles/edit/?id=123
чем пытаться создать под каждую статью свою страничку для редактирования. Я бы с Вами согласился, но вот я такой упертый и хочу первый вариант урла.
Тут решается проблема как раз с помощью динамической страницы. Просто контроллер будет брать информацию не из $_GET['id'] как во-втором варианте, а сразу из части урла. Тем самым у нас появится возможность вместо /123/ указать совершенно любые (/привет/, /aaaa/, и т. д.) данные.
Из всего выше сказанного могу подытожить что нам необходимо свойство которое будет хранить информацию о том статичная страница или же динамичная.
Ну и забегая вперед хочу сказать, что к странице должен быть привязан шаблон, который будет отображаться на этой странице. К теме шаблонов нам еще предстоит вернуться. Я при изобретении техники подключения представления, немного накостыли, но что-то более по душе я пока не нашел. Это я к тому, что мой способ сбора шаблонов не самый удобный, и возможно очень не правильный, но тем не менее он почему-то прижился, и устаивает меня чуть менее чем полностью.
В общем пока не забивая голову, поверим мне на слово о том что в классе обязательно должно быть свойство хранящие информацию о подключаемом шаблоне
Вся идея самой RS-MINI это определить что подключать на той или иной странице, так что тут мы просто не можем обойтись без свойства в котором будем хранить список подключаемых контроллеров.
На сейчас этот класс будет больше похож на набросок, по сути так оно и есть. Весь функционал по объявлению и сбору той информации о которой мы говорили выше пока реализовывать бессмысленно. Но с чего-то ведь нужно начать. И объявить свойства которые нам понадобятся, я считаю очень хорошим началом.
Вот код наброска класса (файл называется page.class.php и лежит в папке /rs-mini/core/)
<?php
/*
* @package RS-MINI
* @copyright (c) 2015 Alexey Glumov aka Rio-Shaman (support@rio-shaman.ru)
* @license GNU General Public License version 2; see LICENSE.txt
*
*/
namespace core;
if(!defined('RS-MINI')) die();
/*
* page v 1.0
*
* Класс хранит инфу о странице
*
*/
class page
{
/*
* свойство id страницы
*
* @var - integer
* @access - public
*/
public $pageID;
/*
* свойство alias страницы
*
* @var - string
* @access - public
*/
public $pageAlias;
/*
* свойство имя страницы
*
* @var - string
* @access - public
*/
public $pageName;
/*
* свойство узловой шаблон страницы
*
* @var - string
* @access - public
*/
public $pageView;
/*
* свойство родителя страницы
*
* @var - integer
* @access - public
*/
public $pageParent;
/*
* свойство тип страницы
*
* @var - string
* @access - public
*/
public $pageType;
/*
* свойство хранит настоящий алиас в случае если страница динамичная
*
* @var - string
* @access - public
*/
public $pageDynamicAlias;
/*
* массив с контроллерами страницы
*
* @var - array
* @access - public
*/
public $controllerList;
/*
* контсруктор. получаем свойства страницы
*
* @access - public
*
* @param array page - строка из выборки страниц
*/
public function __construct($page)
{
}
}
Пролистывая набросок, Вы можете заметить свойство pageDynamicAlias. Поясню что я имел ввиду когда написал что это настоящий псевдоним динамической страницы. Все очень просто, страница в базе данных, хоть и динамическая, но должна иметь свой реальный псевдоним. В адресной строке может быть все что угодно, а в этом свойстве будет храниться именно псевдоним прописанный в базе данных. Он нам понадобится в контроллерах, для того что бы получать значение вбитое в адресную строку.
По данному материалу (а именно по самой идеи) могут возникнуть вопросы. Если они у Вас есть, и Вы чего-то недопонимаете (правда может получиться так, что именно по этой теме Вы ничего не поняли) то пишите вопросы в комментариях, я на них отвечу.
То, что получилось на данный момент, прикреплено, и готово для скачивания, в конце страницы.
Всего Вам наилучшего, на сегодня Все!