Вполне логично предположить, что оф сайт, где я выкладываю свои разработки и записи, - тоже разработан мной. Создан он еще в далеком 2013 году, когда еще не совсем было стыдно пользоваться олдскульными веб-технологиями, но уже тогда они начинали устаревать.
Реализован сайт на основе небольшой самописной модульной CMS на PHP5, где в качестве паттерна MVC - используется шаблонизатор Smarty, модель данных в который подается из базы данных MySQL, в качестве View выступают HTML5-шаблоны, которые рендерятся на сервере в готовый контент на основе модели данных, а Controller-ом выступает непосредственно сама CMS. Задача ее заключается в том, чтобы связывать все это добро воедино и рендерить HTML-страничку в зависимости от поступаемых запросов. В качестве фронтенда используется Bootstrap3 + Javascript-библиотека jQuery, шаблоны сверстаны на основе HTML5 и CSS3.
Написать свою кмску не составило труда и времени, т.к. в ней используется принцип, что каждый модуль отвечает четко за конкретный запрашиваемый ресурс (ну или регулярку с характерным префиксом). Это, поверьте, вышло гораздо быстрее, чем ковыряться в классах и зависимостях какого-нибудь существующего фреймворка типа Simfony или Yii, вот еще интересная статья с идеями на этот счет. Но я в то же время не хочу сказать, что они не нужны, просто они не совсем подходят под мою задачу - сделать простенький сайт с обратной связью и новостями.
Вы меня конечно же назовете упоротым наркоманом, но я его делал прямо на сервере, подключившись по SSH и редактируя код в Vim`e, периодически коммитая полезные изменения в git. Более того, признаюсь честно, сам шаблон для будущего сайта я подрезал с WrapBootstrap.com с помощью рекурсивного скачивания через wget.
К слову, на основе этой же кмс базируется и другой мой оф сайт - vkaudiosaver.ru, так что разработка вполне пригодилась.
Модулем является класс, который отвечает на простые вопросы интерфейса IModule:
Виджет - это интерактивный блок, который может многократно встраиваться в любом месте на страницу шаблона в виде подшаблона. Отличие от статического шаблона в том, что виджет живет своей жизнью и самостоятельно рендерит контент в своем html-шаблоне в зависимости от запрошенного урла. Например, на разных страницах шаблона с полным описанием новости используется виджет комментариев, в котором отображается различный контент для конкретной страницы. То же самое справедливо и для модуля статических страниц. Каждый виджет инициализируется при старте, чтобы успеть отправить нужный хидер, если это заложено в его функциональность. Сам виджет исполняется в момент инклюда из смарти-шаблона, а именно задает модель данных для собственного смарти-шаблона.
Примерами виджетов на сегодня выступают виджет главного меню, в котором динамически подчеркивается текущий просматриваемый раздел и виджет комментариев для любой из страниц, в котором пользователь может пройти авторизацию из ВК или Google и оставить свой комментарий, либо дать ответ на комментарий любого пользователя.