СУБЪЕКТИВНО О CMS

С конца 2010 года в свободное от основной и домашней работы время я начал исследовать особенности бесплатных CMS (Систем Управления Контентом) с открытым исходным кодом на языке программирования PHP. Через мои руки прошло около 1000 CMS различного функционального назначения, некоторое число которых по уважительным причинам уже не имеет поддержки авторов и Интернет сообщества. В результате этих исследований были получены интересные выводы, с основными из которых я хочу познакомить уважаемых гостей и пользователей форума.

1. Первая уважительная причина прекращения поддержки CMS сообществом Интернет - это выявление в поставляемом пакете "мусорных" папок и файлов:
а) архивные (иногда запароленные) файлы типа *.7z, *.bz, *.rar, *.tar, *.zip и т.п.;
б) исполняемые файлы типа *.bat, *.bin, *.cmd, *.com, *.dll, *.exe и т.п.;
в) ссылочные файлы типа *.lnk, desktop.ini, thumbs.db и т.п.;
г) прочие ненужные папки и файлы типа *.git, *.github, *.idea, *.scripts, *.svn, *.tx, *_macos*, *ds_store*, cvs и т.п.
Вторая уважительная причина - это обнаружение множественных уязвимостей в программных кодах.

2. Каждая из исследованных CMS по сути представляет собой совокупность объектов типа "Каталог" ("Раздел"). Например, "Блоги", "Веблинки", "Галереи", "Группы", "Документы", "Загрузки", "Карты", "Книги", "Контакты", "Настройки", "Новости", "Опросы", "Подписки", "Пользователи", "Признаки", "Справки", "Статьи", "Страницы", "Товары", "Файлы", "Форумы" и т.д.
Каждый объект типа "Каталог" ("Раздел") представляет собой совокупность объектов типа "Рубрика" ("Категория"). Например, "Блог" (персональный, событийный, тематический и т.п.), "Веблинк" (внешний, внутренний, редирективный и т.п.), "Галерея" (аудио, видео, фото и т.п.), "Группа" (администраторы, редакторы, авторы и т.п.), "Документ" (инструкция, лицензия, сертификат и т.п.), "Загрузка" (драйвер, программа, чертеж и т.п.), "Карта" (местоположения, папок и файлов, сайта и т.п.), "Книга" (аннотация, реферат, текст и т.п.), "Контакт" (автор, издательство, редактор и т.п.), "Настройка" (отображение, обслуживание, хранение и т.п.), "Новость" (научная, политическая, технологическая и т.п.), "Опрос" (регуляционный, тематический, технический и т.п.), "Подписка" (внутренняя, внешняя, почтовая и т.п.), "Пользователь" (имя, логин, пароль и т.п.), "Признак" (ключ, тэг, ярлык и т.п.), "Справка" (вопрос-ответ, поддержка, помощь и т.п.), "Статья" (автор, рубрика, текст и т.п.), "Страница" (титул, рубрика, текст и т.п.), "Товар" (название, производитель, стоимость и т.п.), "Файл" (владелец, дата, размер и т.п.), "Форум" (автор, дата, тема и т.п.) и т.д.
Каждый объект типа "Рубрика" ("Категория") представляет собой совокупность объектов типа "Публикация" ("Сообщение"). Например, "Блок" ("Таблица") с графическим и текстовым наполнением.
К слову, меню сайта также соответствует вышеуказанной структуре:
CMS_МЕНЮ => КАТАЛОГ_ВЕБЛИНКОВ => БЛОК_МЕНЮ (ТАБЛИЦА_МЕНЮ)
Следовательно, для нормальной работы CMS достаточно иметь всего 3 функциональных процессора:
а) функциональный процессор многоуровневых каталогов (разделов) - "Каталогизатор";
б) функциональный процессор многоуровневых рубрик (категорий) - "Рубрикатор";
в) функциональный процессор многоуровневых публикаций (сообщений) - "Публикатор", который обычно эффективно реализуется непосредственно в HTML/CSS на базе блоков (таблиц) с графическим и текстовым наполнением в скинах, темах и шаблонах.
Подобный подход позволяет формировать нужные аддоны, модули и расширения непосредственно внутри самой CMS.

3. Необоснованное применение вспомогательных "контейнеров" и "шаблонизаторов" для объектов, упоминаемых в предыдущем пункте, всегда приводит к значительным потерям производительности CMS. Например, разработчики Opencart еще в 2006 году показали, что при чтении динамических страниц в "шаблонизаторах" за счет дополнительных преобразований теряется не менее 40 % быстродействия, а попытки его восстановления за счет кэширования статических страниц тянет за собой многократное возрастание требований к объемам дискового пространства и буферов оперативной памяти. К сожалению, не все разработчики CMS ознакомились с результатами этих исследований, но еще можно заглянуть в коды экспериментальных релизов Opencart:
https://sourceforge.net/projects/php-opencart/files/
Отсутствие "контейнеров" и "шаблонизаторов" позволяет реализовать простейшие логические и математические операции прямо в скинах, темах и шаблонах без вмешательства в коды движка CMS. Например, такой подход позволил мне с минимальными затратами времени и ума создать в Opencart "Категории анонсов, блогов, новостей и статей" и "Анонсы, блоги, новости и статьи" на базе "Категорий товаров" и "Товаров" соответственно:
- "Free announcements, articles, blogs, news and more in Opencart 2.3.x"
http://forum.opencart.com/viewtopic.php?f=10&t=166508

4. Особым спросом пользуются CMS с респонсивными скинами, темами и шаблонами, которые позволяют выполнить автоматическое масштабирование и размещение элементов изображения страницы сайта на экране дисплея. Хочу особо отметить, что чрезмерное внедрение JS для отображения страниц сайта очень часто приводит к неприятным искажениям изображения в различных браузерах и мобильных устройствах. Следует обязательно проверять качество изображения страниц сайта при отключенных JS. Кроме того, для CMS с респонсивными скинами, темами и шаблонами просто необходим WYSIWYG редактор.

5. Некоторые CMS содержат встроенные коды скриптов для вывода аудио, видео, фото, а также графической и текстовой информации из медиафайлов с помощью серверов сторонних провайдеров услуг типа Google, YouTube и т.п. Но не будем забывать, что подобные CMS могут стать базой для проведения массированных спамерных атак на те же сервера сторонних провайдеров услуг. Хочу ли я, чтобы мой сайт стал невольным участником хулиганских действий преступных лиц в сети Интернет? Не хочу! Поэтому я выберу CMS с кодами скриптов для автономного воспроизведения аудио, видео, фото, графической и текстовой информации из медиафайлов с моего сайта. С этой целью можно использовать следующие бесплатные продукты:
а) AudioJS - форк VideoJS (см. ниже) для воспроизведения аудио со всеми темами из VideoJS
https://github.com/kolber/audiojs/archive/master.zip
http://kolber.github.io/audiojs/
http://jedfoster.com/AudioJS/
https://github.com/jedfoster/audiojs
б) VideoJS - HTML5 и Flash видео проигрыватель с открытым исходным кодом
http://videojs.com/
http://docs.videojs.com/
https://github.com/videojs/video.js/releases
https://github.com/videojs/video-js-swf/releases
в) ViewerJS - компонент для чтения документов в формате PDF и ODF
http://viewerjs.org/getit/
http://viewerjs.org/examples/
https://github.com/kogmbh/ViewerJS
https://github.com/kogmbh/ViewerJS/releases
https://github.com/kogmbh/ViewerJS_release
https://github.com/kogmbh/ViewerJS_release/releases
https://github.com/Ryusei217/ViewerJS
на базе
http://mozilla.github.io/pdf.js/
http://webodf.org/download/
Для воспроизведения медиафайлов можно применить Flash проигрыватели, но почти все из них с нужными характеристиками являются платными.
Любителям торговли будет интересно ознакомиться с SimplecartJS:
http://simplecartjs.org/
https://github.com/wojodesign/simple...zipball/master
Как пишут разработчики, там нет баз данных, никакого программирования и головной боли. Простая javascript корзина, которую можно установить за минуты. Она легковесна, быстра, проста для использования и полностью настраиваемая. Необходимы лишь базовые знания HTML.

6. Большинство CMS имеют серьезные проблемы с нумерацией страниц в многостраничных публикациях (сообщениях). Например, практически невозможно сразу попасть на страницу с нужным номером. Поэтому я бы рекомендовал нумерацию страниц выполнять следующим образом (например, для 255 страниц с текущей 127):
[1] [<] [127] [>] [255]
где "<" и ">" означают "Предыдущая" и "Последующая" страница соответственно. Поле текущей страницы (127) надо обязательно сделать редактируемым для осуществления возможности прямого перехода на нужную страницу. Кроме того, мне бы хотелось иметь нумерацию страниц в боковом навигационном меню сайта, если оно соответствует требованиям конкретного норматива (например, документу "Рубрикатор ГРНТИ").

7. В последние годы появились т.н. "гибридные" CMS, в которых осуществляется весьма эффективное распределение хранимой информации между базой данных и файлами. Например, в базе данных хранятся параметры настройки сайта по умолчанию, данные пользователей, доступ групп, информация SEO и т.п., а в файлах - блоки (таблицы) с графическим и текстовым наполнением. Автоматическое распределение файлов по отдельным папкам каталогов (разделов), рубрик (категорий) и публикаций (сообщений) исключает вероятность появления папок с многотысячными группами файлов, что значительно облегчает работу администраторов сайтов.

8. Формирование и хранение информации публикаций (сообщений) в файлах позволяет реализовать многоязычность с помощью кодов интернационализации (ISO 639-1, ISO 639-2, ISO 639-3):
https://en.wikipedia.org/wiki/Language_code
https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
https://en.wikipedia.org/wiki/List_of_ISO_639-2_codes
https://en.wikipedia.org/wiki/ISO_639-3
Например, запись с помощью BB-кодов типа
"My CMS - [en]the best in the world content management system[/en][ru]лучшая в мире система управления контентом[/ru]"
будет воспроизводиться как
"My CMS - the best in the world content management system"
при выборе английского языка и как
"My CMS - лучшая в мире система управления контентом"
при выборе русского языка. При этом следует обязательно учесть язык сайта по умолчанию, если будет отсутствовать перевод на языке посетителя сайта.

9. Хорошим подспорьем в продвижении бесплатной CMS может служить ее применение в учебных процессах средней и высшей школ, для реализации которого нужен хороший "мануал". Лично мне понравились описания:
- Yellow
https://developers.datenstrom.se/help/
- UliCMS
http://en.ulicms.de/

10. Теперь расскажу об источниках заработка разработчиков CMS на Востоке. Вот основные принципы тамошнего хостинга:
а) некоммерческое и неполитическое применение CMS на хостинге бесплатное;
б) коммерческое применение CMS на хостинге платное (хостер и разработчик CMS получают фиксированные проценты от сумм месячных продаж);
в) политическое применение CMS на хостинге платное (хостер и разработчик CMS получают фиксированные проценты от сумм месячных рент).

Вышеизложенное не позволило мне сегодня назвать субъективного лидера среди бесплатных CMS. Предлагаю пользователям форума самим дополнить вышеприведенный список собственными пожеланиями и предложениями.