Страницы в RS-MINI

 

Всем доброго времени суток. Сегодня мы продолжаем собирать ядро для системы RS-MINI. Я долго думал с чего нам продолжить. По плану у нас реализовать класс который будет представлять из себя страницы сайта, но это очень трудно сделать не представляя что вообще будет представлять из себя страница.

Многие привыкли, что страница сайта — это область с текстом и картинками. В конечном итоге это так и есть, но эти самые тексты и картинки бывают очень разными. На одной просто какая-то статья, на другой список материалов, на третьей форма обратной связи. Карты, схемы и многое другое. Класс не может вобрать в себя все разнообразие в котором предстают перед нами эти самые страницы.

С другой стороны у страниц есть кое-что общее. Точнее правильнее сказать у страниц есть кое-что очень разное, а все что остается схоже. Без сомнений разное — это контент (я имею ввиду само оформление контента). А вот схожее это

  • имя
  • псевдоним (часть урла в адресной строке)
  • ID этой самой страницы в базе данных
  • родитель страницы (все страницы во что-то вложены)

Контентом будет заниматься контроллеры (класс представляющий нам контроллеры мы будем писать в следующей статье), эта тема отдельной статьи, а вот базовые пункты самой страницы — это наша сегодняшняя тема.

Страница с технической точки зрения

К тем пунктам что я описал выше, нужно пояснить еще несколько моментов, которые касаются уже самой 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

На сейчас этот класс будет больше похож на набросок, по сути так оно и есть. Весь функционал по объявлению и сбору той информации о которой мы говорили выше пока реализовывать бессмысленно. Но с чего-то ведь нужно начать. И объявить свойства которые нам понадобятся, я считаю очень хорошим началом.

Вот код наброска класса (файл называется 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. Поясню что я имел ввиду когда написал что это настоящий псевдоним динамической страницы. Все очень просто, страница в базе данных, хоть и динамическая, но должна иметь свой реальный псевдоним. В адресной строке может быть все что угодно, а в этом свойстве будет храниться именно псевдоним прописанный в базе данных. Он нам понадобится в контроллерах, для того что бы получать значение вбитое в адресную строку.

По данному материалу (а именно по самой идеи) могут возникнуть вопросы. Если они у Вас есть, и Вы чего-то недопонимаете (правда может получиться так, что именно по этой теме Вы ничего не поняли) то пишите вопросы в комментариях, я на них отвечу.

То, что получилось на данный момент, прикреплено, и готово для скачивания, в конце страницы.

Всего Вам наилучшего, на сегодня Все!

Занимаясь созданием интернет-магазина, рано или поздно появляется надобность прикрутить к нему оплату на сайте через банковские карты. Есть на примете одна система — NetPay. Судя по описанию на их сайте, система позволяет настроить (на Вашем сайте) прием платежей самыми популярными картами (Visa, Visa Electron, MasterCard, Maestro). Учитывая то, что электронные кошельки позволяют заводить виртуальные карты, то клиенту, совсем не обязательно иметь пластиковую (физическую) карту для оплаты Ваших товаров или услуг.

Прикрепленные файлы

 

Возможно Вам будут интересны следующие заметки

Комментарии (0)

Ваше имя *
Сайт
Ваш E-mail *
Ваше сообщение *
 
К данной статье пока нет комментариев.