Digs - Персональная территория

Авторский проект Артема Глазкова
? 
        Версия для печати (цвет)  

Использование материалов
Заметка #3
04 мая 2005

Весь сайт в index.php


    Где то кто то сказал что это не есть хорошо, но все же. Все страницы сайта вызываются через index.php с передачей ему параметров.
    Сайт поделен на несколько разделов, каждый из которых доступен из общего меню. Это сделать не сложно, но для большей гибкости и расширяемости сайта я прибегнул к ООП.
    
    Меню
    Сначала расскажу про меню, чтобы потом не отвлекаться при описании работы разделов. Меню представляет собой массив записей. Каждая запись может быть чем угодно. В большинстве случаев это просто ссылка, поэтому была написана функция, которая для ссылки и текста ссылки давала готовый элемент. Примером сложного пункта может служить блог с его подразделами, сидящими в одном пункте меню.
    Так как в одной колонке может быть несколько разделов меню, то я ввел два массива: $menus - для левой колонки и $rightmenus - для правой. Каждый элемент этих двух массивов описывает меню. Описатель меню это массив из трех элементов:
0. Имя переменной в которой лежит меню
1. Заголовок меню
2. Ширина
    Изначально в модуле основной части движка создается одно меню ($mainmenu). Чтобы лучше осознать, как же добавляются меню, приведу код:

$mainmenu = array();
$menus[] = array("mainmenu","Основное",140);

Добавление же пункта в меню производится просто:

$mainmenu[] = SimpleLink("?sec=docs","Читальня");

    Также нужно помнить, что исходя из структуры сайта, описанной в предыдущей статье, правое меню выводится раньше контента.

    Общая идея
    Две основных переменных-параметров называются $sec и $ss. Так сложилось исторически и, в целях сохранения целостности ссылок с других сайтов, я ничего менять не стал. Переменная $sec - это код раздела. $ss - в основном используется для подраздела, а также выполняемой применительно к разделу операции.
    Теперь для того чтобы была гибкость, вводим такой класс:

class TSiteSection{
  function 
before_title(){ 
  }
  function 
work(){
  }
}

    Данный класс будет представлять собой реализацию раздела. Функция before_title() вызывается до любого вывода. Это было сделано для возможности выдачи любых хедеров, а также для заполнения нужных до заголовка структур. Функция work() - это основная рабочая функция, которая предназначена в основном для вывода контента.
    Каждая секция располагается в отдельном модуле. В начале каждого модуля есть описание класса (наследник TSiteSection), а также кусок кода, который производит регистрацию раздела в меню. Здесь же, при определении, что сейчас будет использоваться именно этот раздел (по переменной $sec) создается экземпляр класса со своей функциональностью и запоминается ссылка на полученный объект в переменной $section. Плюс ко всему этому дополняется переменная $title, которая будет вставлена в качестве заголовка в HTML.
    Например, так выглядит модуль "Обо мне":


class TSectionAbout extends TSiteSection{
   function 
work(){
     
//Здесь подключение контента
   
}
}

$mainmenu[] = SimpleLink("?sec=about","Обо мне");
if (
$sec=="about"){
  
$title .= " - Обо мне";
  
$section = new TSectionAbout;
}


    index.php
    Ну и в заключение, как же реализован главный модуль. Он состоит из следующих частей.
  1. Подключение всех модулей движка (всех тех, которые не описывают разделы сайта)
  2. Всевозможный анализ переменных, проверка login, logout и прочих
  3. Подключение всех модулей разделов учитывая последовательность для меню
  4. Если подключена переменная $section, то вызов у созданного объекта метода before_title()
  5. Все что начинается тегом <DOCTYPE> и заканчивается тегом <BODY>
  6. Вывод шапки и приветствия со строкой поиска
  7. Реализация слоев описанных в предыдущей статье с выводом левого меню, затем правого и затем вызов у объекта метода work() через переменную $section
  8. Вывод копирайта


© 2005-16, Powered By Digs (Написать письмо, vk)