Авг 14
…правда пока это будет скорее тренировочный этап, чтобы освоиться со всеми возможностями Zend Framework.
Долго думал, с какой стороны подступиться к разработке CMS на Zend Framework – всё-таки дело это сложное, отвественное и многогранное. И придумал, что раз система управления будет разделяться на две независимых подсистемы – внешней части и админки, то на первом этапе нужно ограничиться модулями внешней части.
Сама админка у меня уже присутствует и работает неплохо, настраивать её тоже очень быстро. А вот внешняя часть пока хромает, не добрался ещё я до её устаканивания. Поэтому совершенно логично начать разбор полётов с ZF и CMS именно с внешней части.
Как уже упоминалось ранее – основу системы управления будут составлять виджеты. Каждый из которых будет выполнен в виде отдельного модуля. Поэтому построение системы начнём именно с виджето-модульного уровня.
Июн 08
Общий принцип работы системы был задокументирован ранее. Теперь поговорим немного о шаблонизаторе.
В моём представлении каждая страница сайта состоит из виджетов, связанных между собой некоторым оформлением (дизайном). Вот примеры виджетов:
- главное меню
- меню с подпунктами
- баннер
- форма авторизации
- корзина
- область основного контента страницы
- и т.д.
Почему я выделил слова область основного контента страницы полужирным шрифтом?
Дело в том, что этот момент ещё не очень хорошо продуман. Скорее всего заголовок H1 и путь к этой странице будут выделены в отдельные виджеты. А вот с листалкой уже не так очевидно, да ещё может возникнуть потребность выводить на одной странице несколько элементов контента (например, парочку фотогалерей и один текст).
Какие же роли играют Шаблонизатор и Виджет?
- В Шаблонизаторе определяется в каком месте будет выводиться тот или иной Виджет.
- Виджет определяет как именно он будет выводиться и будет ли вообще он при заданных условиях отображать себя.
Такая схема позволяет разрабатывать виджеты совершенно отдельно от реального приложения и добиться их простого повторного использования. Однако она же и накладывает некоторые ограничения. Например: view-скрипт виджета должен идти с ним в одном комплекте, и для каждого момента в нём должны быть прописаны свои css-классы.
Июн 03
После рассмотрения общей схемы функционирования CMS, приступаем к её реализации. Однако для этого необходимо сделать один предварительный шаг.
Этап 0. Конфигурация системы.
В нынешней версии CMS конфигурация системы задавалась в php-массивах. С точки зрения быстродействия – это оптимальный вариант реализации конфигурации системы, но редактировать такую конфигурацию не очень удобно. Кроме того в новой версии системы файлы конфигурации будут разнесены по каталогам соответствующих модулей, что ещё больше затруднит их редактирование, если они останутся в виде php-файлов.
Выход я вижу в использовании Zend_Config_Ini. Этот модуль позволит хранить конфигурацию системы в ini-файлах. Однако, для повышения быстродействии скриптов, не будем вызывать этот модуль при каждом старте системы. Сделаем скрипт, который будет компилировать все ini-файлы в один php-файл конфигурации, аналогичный файлу конфигурации в нынешней версии CMS.
Для реализации такой схемы конфигурации потребуется два модуля
- Компилятор ini-файлов в php-файл.
- Редактор ini-файлов (что-то вроде реестра в Windows) – такой редактор потребуется для некоторых модулей сайта, настройки которых нужно будет менять в процессе функционирования сайта.
Первый модуль довольно тривиален и будет реализован в первую очередь. Второй модуль более сложен, но для создания рабочего прототипа системы он не потребуется, поэтому его реализацию можно отоложить на потом.
Сосредоточимся на компиляторе ini-файлов в php-файл. Вот задачи этого модуля:
- Обойти все подкаталоги application, в котором хранятся все модули системы, и составить список ini-файлов в соответствии с их размещением в каталогах. Названия каталогов будут использоваться для доступа к этим переменным.
- Подготовить текстовую переменную, которая затем будет записана в файл /application/config.php. В этом файле будет класс Cfg, предоставляющий доступ только чтения ко всем переменным конфигурации. Класс будет реализован по паттерну Singleton.
- Считать каждый ini-файл в Zend_Config_Ini и распарсить его в php-файл.
Таким образом наши данные будут храниться в подготовленном php-классе, который будет быстро считываться во время выполнения основных скриптов.
Май 27
- На входе скрипт имеет URL и $_REQUEST
- Аутентификатор
- Роутер
- Авторизатор
- МОДУЛЬ СТРАНИЦЫ
- Шаблонизатор
- Виджеты
Аутентификатор
Определяет пользователя, открывающего страницу.
Роутер
Определяет положение страницы относительно корня сайта и определяет какой модуль необходимо вызвать, чтобы её отобразить.
Авторизатор
Проверяет достаточно ли прав у пользователя для отображения этой страницы.
МОДУЛЬ СТРАНИЦЫ
Модуль, определяемый Роутером, для получения основного контента страницы.
Шаблонизатор
Заполняет предложенный шаблон контентом, который сгенерировал Модуль страницы. Определяет состав виджетов на странице и вызывает модули Виджетов, получая от них информацию, необходимую для вывода на странице. После получения информации от Виджетов, отображает сгенерированную страницу.
Виджеты
Активные иконки, меню сайта, баннер, топ новостей, опрос и т.п. – всё это виджеты, которые существуют по своим законам и программируются отдельно.