Этот сайт

Вполне логично предположить, что оф сайт, где я выкладываю свои разработки и записи, - тоже разработан мной. Создан он еще в далеком 2013 году, когда еще не совсем было стыдно пользоваться олдскульными веб-технологиями, но уже тогда они начинали устаревать.

Оф сайт bingosoft.info

Реализован сайт на основе небольшой самописной модульной 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:

  1. Регулярное выражение ресурса, при вызове которого модуль будет аллоцироваться и исполняться.
  2. Имя шаблона для Smarty. Это шаблон контента внутри основного шаблона сайта
  3. Функция исполнения модуля с конкретным урлом. В ней могут осуществляться запросы к БД, настраиваться модель данных для смарти. В конце концов после завершения исполнения этой функции кмска отрендерит содержимое модели данных в шаблоне и отдаст готовую HTML-страницу. Функция должна подветрдить, что действительно этот урл корректно обрабатывается данным модулем, иначе кмска вернет пользователя на страницу 404.

Пример модуля главной страницы:

Реализованные модули

  1. Модуль статической страницы с произвольным HTML-контентом. Например, именно эта страница управляется этим модулем.
  2. Модуль новостей с тегами, подробным описанием новости и пагинацией.
  3. Модуль загрузок, в котором скачиваемые файлы могут находиться в одной из категории.
  4. Модуль обратной связи с капчей.
  5. Админ-панель, чтобы удобно управлять некоторыми вышеперечисленными модулями.

Что такое виджет

Виджет - это интерактивный блок, который может многократно встраиваться в любом месте на страницу шаблона в виде подшаблона. Отличие от статического шаблона в том, что виджет живет своей жизнью и самостоятельно рендерит контент в своем html-шаблоне в зависимости от запрошенного урла. Например, на разных страницах шаблона с полным описанием новости используется виджет комментариев, в котором отображается различный контент для конкретной страницы. То же самое справедливо и для модуля статических страниц. Каждый виджет инициализируется при старте, чтобы успеть отправить нужный хидер, если это заложено в его функциональность. Сам виджет исполняется в момент инклюда из смарти-шаблона, а именно задает модель данных для собственного смарти-шаблона.

Примерами виджетов на сегодня выступают виджет главного меню, в котором динамически подчеркивается текущий просматриваемый раздел и виджет комментариев для любой из страниц, в котором пользователь может пройти авторизацию из ВК или Google и оставить свой комментарий, либо дать ответ на комментарий любого пользователя.