Пользователи Все пользователи (администраторы, пользователи сайта) хранятся в одной таблице. Каждый пользователь может принадлежать любому количеству групп (0..n). В ядре системы реализована раздача прав на разделы сайта, на модули. Группы пользователей должны иметь возможность быть вложенными, хотя бы на один уровень. Право на модуль обозначает, может ли пользовать этот модуль. Права назначаются группе или роли? Права на отдельные объекты? Read, Write, View и все такое БЛОК - такой как например вывод материала в списке. Real? Материалы Вопросы: Индексная страница еще ведь может принимать URL для обработки (архив новостей) – дополнительный параметр? Хранить ли все атрибуты через механизм дополнительных атрибутов или в таблице material будут стандартные атрибуты, типа текст, анонс и т.д. – нет Сколько может быть шаблонов у страницы? – несколько Настройки шаблонов Настройки шаблонов для конкретного модуля хранятся в одной таблице с полями id раздела, id шаблона и код роли шаблона. Т.к. настройка шаблона может быть только для модуля размещенного в разделе, то указывается именно id раздела (id модуля можно узнать по id раздела, в котором размещен этот модуль). Как трактуется код роли - зависит от логики работы модуля. Цель системы шаблонов – позволить с минимальными усилиями изменить внешний вид. На первый взгляд наиболее простой способ для пользователя, устанавливающего систему – скопировать в отдельную папку набор файлов-шаблонов, а затем в административном интерфейсе переключить текущую тему. Сложность реализации возникает из-за того, чтобы шаблоны могут использоваться в модулях, блоках и нестандартных сущностях модулей, таких как “страница” модуля “Контент”. Главный вопрос – нужно ли хранить шаблоны в базе данных? Теоретически можно сделать загрузку всех шаблонов в базу при копировании темы. Прецедент “Загрузка темы” 1. В директорию themes записывается новая директория с файлами шаблонов. В директории теме шаблоны хранятся в виде код темы/module или блок/код модуля или блока/шаблон. 2. В административном интерфейсе пользователь выбирает “Добавить тему” и выбирает директорию, в которой лежат файлы шаблонов. 3. Название и директория темы записываются в таблицу theme 4. Все названия файлов шаблонов, лежащие в директории темы записываются в таблицу template, поля – название шаблона (по умолчанию равен коду шаблона), код шаблона (название файла без расширения), используется в блоке или модуле, код блока или модуля где используется шаблон (определяется по директориям). 5. При необходимости новую тему можно выбрать текущей. В настройках экземпляра модуля выводится список всех файлов шаблонов с названиями. Названия шаблонов хранятся в модуле виде ассоциативного массива “код шаблона (файл) => название шаблона”. По умолчанию настройка шаблона для экземпляра модуля – это “Использовать текущую тему”, если текущей темы нет – используется шаблон из модуля. Переопределение шаблона хранится в виде Id шаблона (можно выбрать только шаблон из темы, который используется в той же сущности (материал, код) и имеющий тот же код, что и переопределяемый шаблон. Вместо Id шаблона может быть “Использовать шаблон из модуля”. Подумать: может действительно добавить фичу header/footer ? Как стандартную фичу переопределения ? Или во всех шаблонах модулей использовать блок header и футер ? А если его нет? “Дефолтные” блоки???? Типа есть всегда? Отметка блока в качестве хедера или футера? Но это уже получается без версий. В настройках модуля или экземпляра модуля, размещенного в разделе, выводится список “использований” шаблонов. В каждом “Использовании” можно выбрать “Использовать стандартный шаблон”, “Использовать текущую тему” Вариант: создать таблицу “Использования шаблона”. Поля – “блок или модуль”, “код блока или модуля”, “код шаблона”, “описание”. При установке модуля или блока данные об “Использованиях” заносятся в базу. В директории блока поддиректория template, в которой хранятся шаблон(ы) блока, аналогично для модулей. Раздел –> настройка шаблона – какие таблицы? Т.е. каждый шаблон должен быть привязан к какому-нибудь использованию? Но как просечь использование, когда загружается новая тема? По названию файла шаблона? Директория themes, modules и blocks лежат в www директории, в этих директориях .htaccess файл, который не позволяет включать файлы шаблонов напрямую. Прецедент “Выбор текущего шаблона в обработчике” 1. По коду шаблона и id текущего раздела проверяются, есть ли переопределения для шаблона в этом разделе. А если нужны настройки прямо для модуля? Нужно ли это и когда? Вариант – текст шаблона относится к какой-нибудь теме (есть тема по умолчанию) и при изменении текущей темы изменяется директория откуда брать шаблоны. Тогда и дефолтные шаблоны нада хранить в базе! При установке модуля шаблоны из файлов загружаются в базу. Или шаблоны которые в модуле и есть дефолтная тема? А остальные не? Теоретически “Страницы” относятся только к модулю “Материалы” и это настройка только этого модуля по отношению к шаблонам и обработчикам. Но настройки шаблонов на модули должна идти стандартным способом “Настройки шаблона для модуля”. Или использовать стандартный способ можно по желанию? Например, в форумах настройки шаблонов – это набор: Шаблон вывода дерева сообщений Шаблон вывода сообщения Шаблон формы ввода сообщения Использование шаблонов в модуле В модуле шаблон используется через специальный класс Template. Использование в модуле без дополнительных сущностей (например “Форум”) Текст шаблона, загружаемый в объект, зависит от того, есть ли переопределенный шаблон в этом разделе. Скрипт-обработчик это что? Функция PHP, название метода класса? Где хранятся обработчики и шаблоны? Библиотека стандартных блоков и экземпляры стандартных блоков? Отображение новостей в формате RSS – но это получается отображение в блоке, используя методы модуля? Если будет раздел такого типа, то какие параметры будут него? URL RSS-файла, версия RSS, частота обновления. Дополнительно может быть переопределен шаблон отображения, шаблон-хидер, шаблон-футер. В принципе отображение RSS будет использоваться в блоках. Настройки блока для пользователя? Т.е. модуль может настраиваться не только на раздел но и на блок? Для каких модулей это актуально? RSS, Документы (показывать новости только из каких то разделов) 1. Навигация Разделы сайта можно размещать в разные навигации. Это может использоваться при создании меню – заносится навигация “Меню” и при редактировании раздела определяется что он включается в эту навигацию. Дополнительные параметры раздела - это модуль? Доп. Параметры – может они определяются по тому, входит модуль в какую-то навигацию? Спорно, например, описание. А как по умному предгенерировать такие меню? Вариант 1: Хранить в файле дату последней генерации блока (версии блока), в обработчике проверять дату последнего изменения интересующей сущности (рубрик, материалов и т.п). Если дата последней генерации блока меньше – перегенерировать все версии блока (для способа с предгенерированием). Зависимость варианта блока от наличия некоторой записи? Скрипты отсылки форм, редиректа при клике на баннер – это что? PlaceHolder для нескольких блоков??? ToDo: 1. Посмотреть что такое жизненные циклы Avalon! Моделирование жизненного цикла с помощью сетей Петри. Получается список: Материалы Форумы Пользователи В административном интерфейсе разделы представляются с помощью раскрывающегося дерева. Что-то не особо наглядно получается. Надо еще придумать, как сделать более наглядно. Например, настроить так, что для занесения новости будет ссылка “новости”, а для занесения в библиотеку – ссылка “Электронная библиотека” В модуле “Каталог изображений/файлов” те файлы к которым тип доступа “public” генерировать прямо в файлы.