Без кода:
Главные контроллеры:
index.php
admin.php (пока не рассматриваем)
api.php (пока не рассматриваем)
Файл общей логики system.php. Тут подключается база данных и допустим какие то конфиги.
index.php запрашивает модули из базы данных (если на главной, то те, у который поле show_homе == 1)
В цикле запускает контроллеры этих модулей /modules/имя_модуля/index.php
Только запускает их в функциях, что бы все переменные модулей были локальными, что бы не было багов, если сразу сто модулей на одной странице запустить.
Перейдя по ссылке site.ru/news/ запускается модуль news и те у кого в поле стоит show_mods = 1, то есть те модули которые тоже активируются на других страницах (так же можно по ссылкам даже сделать, чтоб запускать нужный модуль на какой то определённой странице типа /news/cat/1/post/1)
Всё, уже есть система в которой модули можно запускать хоть на главной, хоть на всех, хоть на конкретных страницах.
Теперь права доступа. В таблице прописаны правила, допустим юзеру 1 разрешено правило 1, в другой таблице описаны правила, что правило 1, это разрешить запускать сам модуль, правило 2 это разрешить ставить рейтинг.
На основе этого получяется массив (или объект, как хотите) для каждого пользователя, в котором лежат настройки доступа для модулей.
В итоге при подключении модуля можно проверить допустим так
if($Access['news']['index']) {
} else {
}
Так конечно красивее $Access->get('index'); , но я пытаюсь показать всё доступно.
И вот уже есть гибкая система прав доступа, в контроллере модуля ну или в модели проверяем может ли пользователь выставлять рэйтинг if($Access->('rating'))
И третий пункт, выводим содержимое модулей в шаблон в нужный тег с помощью любого шаблонизатора или даже без шаблонизатора.
В итоге получилась CMS с гибкими настройками доступа, с возможностью выводить модуль на любых страницах и в любой тег шаблона.
Ни капли ООП.
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2