К вопросу о устройстве идеальной CMS, на основе модулей. Некоторые размышления кодо-человечных взаимодействий. То есть – как научить заказчика самостоятельно вносить изменения в коды через понятный ему интерфейс. Либо настраивать сотни схожих проектов под нужды заказчика, чтобы избежать повторений в коде. Материал немного сжат и рассчитан на подготовленного пользователя. В конце – парочка теоретических примеров
Надеюсь, размышления наработки помогут мне и Вам в создании данного механизма, если он еще будет актуален
Используем широко распространенный PHP и шаблонизатор Smarty
В смарти все шаблоны расположены в отдельной папки. Назовем ее по-умолчанию templates. Предполагается, что там можно создать отдельную папку плагины plugins. При этом читая код можно включить в компилятор указание нужных величин. Это словно использовать методы существующего класса, только плюс еще веб интерфейс.
Настройки каждого компонента и компиляция PHP и шаблона на выходе. Шаблон подключается методом insert. В названии шаблона компилится название плагина, который она использует. В шаблоне в комментах хранятся настройки которые были скомпилены. И админка читает их и позволяет перепросить
Готовый шаблон
шаблон
{* название и версия плагина *}
{* параметр1 = значение *}
Из админки происходит чтение папки с плагинами
По каждому плагину определяется версия компилятора и создается каталог с компиляторами. Также для у каждого компилятора есть возможность создать свой компонент.
В php файле на основе компиляции плагинов - создаются такие же комментарии, говорящие о версии и названии плагина
#plugin 1
Каждый плагин содержит отдельный класс, который подключается в php файл. В том месте где используется, с помощью оператора require_once
Это могут быть для всей классы для всей программы – включаются в setup.
Классы для шаблона – включаются в файл шаблона.
Классы функций – включаются в функцию при использовании
Какие примеры классов можно подключить и как это будет выглядеть в целом?
Класс авторизация
Включается в setup
В комментах написано #authorization v.1
Класс с авторизацией содержит функции для проверки пароля. Он позволяет для всей программы использовать новые переменные. Их он заносит в отдельную таблицу с комментами что это за переменная. Список всех переменных отображает при изменении шаблона для сайта
Как использовать файл с классом в шаблоне?
Для этого нужно подключить форму для авторизации include file=plugins/auth… и тот созданный компонент
Что нужно сделать чтобы запретить вход на сайт без авторизации?
Разместить параметр
{if $uId==…} или {if $uGrade==…} … {else}{include file=plugins/auth…}{/if}
Нет
Для этого в параметрах php указывается переадресация на страницу с авторизацией. Header=location…
Шаблоны от этого не используются. А в глобальных настройках указывается, создавать ли отдельный шаблон для авторизации или использовать ли запрет для входа без авторизации.
Авторизация работает как с файлами так и с базами данных
Плагин с возможностью редактирования контента внутри шаблона с шапкой. В шаблоне в место контента который зависит от параметра action
, ставится блок {include file=plugins/content…}
Содержание внутри плагин берет из файлов в папке с названием основного шаблона.
Если файла нету – плагин возвращает шаблон с пустой надписью. Этот шаблон настраивается из настроек плагина. Возможность включить и отклюить его в админке, а также можно привязать возможность к правам модуля авторизации
Для редактирования появляется карандашик. Это плагин расчитывает перед выводом – появляется карандашик
В php файл записывает свои команды перед выводом содержания на страницу. Добавляется процедура проверки на то был ли изменен шаблон и редактирует файл шаблона. Соответственно плагин позволяет легко создать неограниченное число статических страниц, или страниц не сильно зависящих от программного кода.
А также плагин позволяет включить в любое место редактируемых шаблонов собственные, но сделать это можно лишь вручную.
В php плагин лишь вносит инфу про запись шаблона в случае правки содержания и расчет карандаша. Плагин для админки для редактирования базы данных с помощью админки. Myadminlite. Человек может зайти и отредактировать любую таблицу из админки
Простой и понятный плагин без лишних вопросов о том как создать таблицы и управлять ими
Плагин для голосовалки
При установки создается база данных с параметрами.
Копируется класс для взаимодействия с этой базой.
В шаблон в то место где должна быть голосовалка пишется insert
В меню админки точно указывается шаблон для голосовалки. Точно также как и через плагин content, только больше программного кода в нем, но также можно гибко настроить все детали голосовалки
С помощью админки можно самостоятельно изменять базовые функции, такие как вид кнопок, выдача ответа методом Аякса
С помощью админки в класс php записывается информация о правилах проведения опроса.
Как часто человек может голосовать, сколько раз на один вопрос он может отвечать и выбор срока окончания голосования
Это все пишется шаблон
Условия голосования задаются отдельно и все настройки хранятся в отдельных файлах.
Плагин для вывода таблиц
Это и новости и данные и курсы и любые данные которые можно получить при помощи запросов и вывести в виде таблицы.
Очень большой и гибкий плагин. Он может расширится до расширенного набора фильтрации, сортировки по каждому из столбцов и выводе постраничника.
Настраивается все в отдельности, но плагин устанавливается вместе с этими компонентами. В шаблон вывода таблиц подключаются тем же методом шаблоны фильтра, построничника
Запросы плагин может писать автоматически, преобразуя на русский большую часть фраз, но для сложных запросов – только использовать язык sql. Сложности также могут быть при работе с уже существующей базой данных.
Продолжение, возможно, следует