Ще одна коробкова CMS - знайомство з FFCMS

FFCMS logoДобрий день, читачі і автори habrahabr! Сьогодні я хочу розповісти вам про ще однієї невеликої коробкової системі управління вмістом сайту FFCMS, розробкою якої (раніше — для власних проектів, а тепер і для всього співтовариства) я тренуюся трохи більше року. В даній статті я хочу коротко розповісти про те, що вміє дана система, коротко торкнутися освітлення можливостей основних інтерфейсів системи і трохи розповісти про технічні деталі.

Дисклеймер: я не претендую на звання розробника «інноваційної системи» і я нічого не продаю, а лише хочу представити відкриту систему управління сайтом, яка, можливо, спростить життя розробнику і веб-майстру. Система не ґрунтується на якомусь популярному фреймворку — реалізовані лише мінімальні методи для взаємодії між розширеннями, роутингом і шаблонними уявленнями.

1. Що це за система?
Багато, відразу ймовірно зроблять висновок «ну ось, черговий ж велосипед...» і можливо, вони будуть праві, але дозвольте все ж розповісти вам про систему керування вмістом сайту «FFCMS».

FFCMS (від англ. «Fast flexibility content management system») — швидка, розширювана система управління вмістом сайту, написана на php з використанням баз даних сервера mysql. При розробці даної системи я ставив собі кілька умов:

  1. Швидкість роботи і низьке споживання ресурсів — це питання найчастіше є найскладнішим: доводиться вибирати між зручністю розробки, надлишковістю коду і швидкістю роботи кінцевого програми. Багато разів я ставив собі питання — чи може слід взяти symfony і відмовитися від необхідності реалізації логіки роботи та допоміжних методів? У підсумку я зупинився на моделі найпростіших реалізацій з використанням патерну singleton (що звичайно не завжди доречно, але завжди просто).
  2. Можливість швидкого прототипування інтерфейсів — тут рішенням стало використання шаблонизатора twig і знайомого більшості bootstrap CSS фреймворка.
  3. Можливість швидкого розширення функціональних можливостей — було прийнято розділити логіку взаємодії на 3 основних типи розширень: компоненти, модулі і хуки, про яких я коротко розповім нижче.
  4. Можливість ведення багатомовних версій сайту (розширена мультизычность з коробки) — дане питання особливо актуальне у наш час, коли виникає необхідність доносити інформацію з сайту на декількох мовах: будь то сайт компанії, що надає послуги або товари, або інформаційне агентство, що транслює інформацію на декількох мовах.
Для роботи з базою даних була вибрана стандартна можливість php — PHP::PDO з відключеними EMULATE_PREPARES для забезпечення безпеки sql-запитів. В якості стандартних візуальних редакторів системи використовуються CKeditor (html) і wysibb (bbcode). Версификацию оновлень системи на певних стадіях розробки я вирішив класифікувати у відповідності зі специфікацією SemVer (major.minor.path).

2. Інтерфейси системи
При реалізації різних моделей взаємодії користувача та сайту було прийнято рішення розділити всі інтерфейси системи на 4 основних типи в залежності від джерела взаємодії та призначення виконуваних операцій. Так з'явилися: інтерфейс користувача, інтерфейс установника системи, інтерфейс адміністратора і API додатків.

Інтерфейс користувача
Даний інтерфейс надає для реалізації взаємодії між користувачем і власне алгоритмами сайту. Всі запити до сайту будуть оброблені саме в рамках користувальницького інтерфейсу(за винятком AJAX взаємодії — в даному випадку буде використовуватися інтерфейс api).

Після стандартної установки даний інтерфейс виглядає наступним чином:



Інтерфейс адміністратора
У свою чергу даний інтерфейс надає можливості взаємодії між вмістом сайту та адміністратором — функції управління.
Після авторизації на сайті і переходу в адміністративну панель даний інтерфейс виглядає наступним чином:



Інтерфейс установника і API
Інтерфейс установника надає можливості спрощеної установки системи на ваше обладнання. Так само в даному інтерфейсі реалізовані можливості оновлення системи зі старих до нових версій системи.
У свою чергу інтерфейс API не має шаблонної реалізації — його завдання-це реалізація якогось подібності на REST API. Основною метою даного інтерфейсу є обробка запитів і по мірі потрібності повернення результату обробки — хорошим прикладом є AJAX взаємодія.

3. Розширення системи
Як я вже раніше зазначав, розширення системи представлені 3мя основними типами, проте загальна кількість типів реалізацій — 5, серед яких:

  • Компоненти — генерація вмісту сайту в залежності від внутрішнього URI запиту.
  • Модулі — робота з шаблонними позиціями.
  • Хуки — реалізація методів взаємодії між розширеннями системи, стороннім кодом і сервісами.
  • ApiCallback — реалізація простих REST API для взаємодії всередині і поза системи при використанні системного інтерфейсу API.
  • Cron — реалізація доповнень до розширень, що дозволяють виконувати завдання за розкладом (Cron task).
Про структуру розширень і їх реалізаціях можна говорити досить довго, адже кожен тип розширення призначений для тієї або іншої реалізації, залежно від мети такої реалізації.

Дані про розширення в системі зберігаються в спеціальній таблиці в базі даних (_extensions), в якій зазначені: тип розширення, директорія реалізації, конфігурації, версія, сумісність а так само інформація про правила шляхів роботи даного розширення (виключно для модулів — роутинг компонента ведеться залежно від назви директорії реалізації).

Компоненти, модулі і хуки можуть містити 2 набору реалізацій:

  • front: логіка роботи для розширення інтерфейсу користувача
  • back: логіка роботи для розширення інтерфейсу адміністратора(керування вмістом, налаштування, інше)
* Хочеться відзначити — я розумію, що найчастіше для програміста поняття «front» і «back» частіше асоціюються з областю виконання програми (клієнт або сервер), проте в даному випадку ці значення класифікують цільової інтерфейс взаємодії всередині системи.

Про розширення я планую розповісти в окремій статті — від логіки їх роботи та взаємодії і до реалізації готового прикладу.

4. Невелика презентація
Я підготував невелику вступну презентацію про пристрої системи та її можливості. У презентації місцями трохи ширше висвітлений матеріал, який я виклав вище.



5. Посилання та післямова
В першу чергу хотілося б подякувати команду habrahabr за підтримку настільки малозначиме (за масштабами) проекту одного розробника і схвалення участі в програмі допомоги стартап-ам.

Офіційний сайт проекту: ffcms.ru (пробачте за якість англійської версії сайту).

Проект на github: git@github.com:zenn1989/ffcms.git.

Каталог розширень: каталог ffcms (буду радий вашій участі).

Трохи про себе і «від себе»: звуть мене Пятинский Михайло, я є мешканцем скромного міста Керч (Крим). На жаль, не маю вищої освіти, пов'язаної з програмуванням. У нашому місті серйозно програмуванням займаються одиниці, а веб-розробкою і поготів (мені невідома жодна веб-студія в нашому місті), тому більшість досвіду розробки (в тому числі будь-жодної командної) я отримав у віртуальному середовищі (віддалена розробка). Я розумію, що мій код і його якість дуже далекі від ідеалу і я не в якому разі не ставлю його в рівень з yii, symfony або іншими чудовими CMF фреймворками, проте саме ви можете взяти участь в розробці і поліпшити проект і якість його коду. Я завжди відкритий до діалогу.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.