Cotonti / Open Source PHP Content Management FrameworkContent Management Framework

Техническая концепция

Документация / Разработчикам / Техническая концепция

Основные принципы, согласно которым построен Cotonti

Перевод на русский: birdy_owl.

Прежде всего, следует упомянуть о том, что Cotonti создана на основе CMS Seditio, которая, в свою очередь, унаследовала все лучшие характеристики системы Land Down Under. Это подтверждает, что Cotonti — не «ещё одна CMS», а результат более чем девятилетней кропотливой работы. В этом проекте использованы самые актуальные из последних тенденций веб-разработки, но в основе его лежат проверенные временем традиции.

#1. Процедурное ядро

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

  1. Наш код максимально прозрачен, прямолинеен и прост для понимания.

  2. Следовательно, Cotonti превосходит остальные системы управления контентом по уровню производительности.

  3. И поэтому она выделяется на переполненном рынке CMF/CMS, где то и дело слышны выражения «настоящее ООП», «реальный Web 2.0» и другие модные словечки, привлекательные, но бессмысленные в случае, когда дело касается настоящей повседневной работы.

С другой стороны, Cotonti — не настолько консервативная система, как может показаться. Хотя ядро является процедурным, некоторые функции и дополнения могут быть созданы на основе доступных классов и библиотек. Поэтому мы, не колеблясь, используем преимущества обеих фундаментальных концепций программирования.

#2. Объектно-ориентированные компоненты

Мы используем объекты в тех областях, где они демонстрируют лучшие результаты. К примеру, Cononti использует уровень абстракции базы данных PDO, объединяющий функциональность независимых от БД классов и производительность бинарных расширений PHP.

Другим распространенным случаем, когда большое значение имеют полиморфизм, инкапсуляция и наследование (3 главных принципа ООП), является кэш-библиотека. С целью осуществления оптимизации, Cotonti имеет несколько уровней кэша и поддерживает большое количество кэш-хранилищ, но все из них обладают цельным интерфейсом, поэтому вам не нужно беспокоиться, какой драйвер использовать и как он в действительности работает.

Попутно хочу отметить, что наша библиотека шаблонов также обладает объектно-ориентированным интерфейсом. Но самая главная новость заключается в том, что в секретной лаборатории Cotonti Team была разработана специализированная объектно-ориентированная библиотека. Она все еще основана на стандартном процедурном ядре Cotonti, но с использованием некоторых объектно-ориентированных технологий мирового уровня для создания возможности многократного использования стандартной структуры и шаблонов кода. Благодаря этому разработчик сможет создавать новые приложения для бизнеса и управления контентом всего за несколько минут.

#3. Модель, вид,.. скрипт! (MVS)

Модель-вид-контроллер — самый популярный шаблон для разработки веб-приложений. В современных фреймворках он состоит из трех фундаментальных слоев:

  • Модель. Представляет данные в виде объектов, отношений, записей и свойств. Некоторые разработчики полагают, что хранение данных в базе данных или использование уровня абстракции базы данных и есть модель. Но более опытные знают, что это код, представляющий структуру данных приложения и основные абстракции для управления данными.

  • Вид. Основывается на принципе того, что пользователь видит не всё, что приложение делает на самом деле. Иметь слой «Вид» значит отделять верстку от процедур и использовать специальные процедуры для генерации разметки. В большинстве случаев это подразумевает использование шаблонизатора.

  • Контроллер. Часто под этим подразумевается код, который служит для всего остального. В исходной модели MVC он является обработчиком событий, в системе, которая полностью управляется событиями. Различные контроллеры отвечают за различные части приложения, они реагируют на события и организуют поток выполнения.

Однако в случае с Cotonti, в каждом компоненте шаблона присутствует некое отличие:

Модели данных обычно описываются в старом добром простом SQL. Мы не устанавливаем никаких ограничений для структуры модели и логики, и поэтому предоставляем разработчикам модулей полную свободу в разработке приложений наилучшим в их понимании образом. Для операций с данными и создания вопросов используется слой PDO (PHP Data Objects).

Cotonti обладает собственной библиотекой шаблонов именуемой CoTemplate. Она обладает всеми функциями довольно популярной библиотеки XTemplate и обратно совместима с ней. Она состоит из структурных блоков, управляемых контроллером и заменяемых переменными («TPL-теги») в них. У нее также есть возможность использования «callback» или функций-обработчиков для переменных, что позволяет обрабатывать вывод с помощью функций. Библиотеки шаблонов с блочной структурой обладают действительно простой и понятной конструкцией и не требуют навыков программирования, если вам достаточно стандартной функциональности. В противном случае вам может понадобиться модифицировать контроллер каждый раз, когда вы захотите проверить что-либо в шаблоне. Проблему поможет решить CoTemplate, так как она поддерживает логические структуры управления (IF/ELSE) и статические структурные блоки (BEGIN/END) одновременно. Поэтому она гарантирует одновременно свободу и прозрачность действий как дизайнерам, так и кодерам. Убедитесь, что эта библиотека работает гораздо быстрее, чем может показаться — она помещает в кэш образы шаблонов и не производит парсинг в реальном времени.

В то время как большинство современных фреймворков созданы для построения сложных иерархических структур контроллеров, зачастую включая десятки и сотни сообщающихся классов, контроллеры Cotonti максимально просты. Они созданы на основе чистого скриптинга, с целью легкого отслеживания программного потока без необходимости углубляться в классовые иерархические структуры и лежащие в основе API. Вне зависимости от последовательности, контроллеры легко расширяются посредством хуков, которые являются точками входа для добавления других скриптов, называемых плагинами. Ниже концепция модульности будет описана подробнее.

#4. Модульная архитектура

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

Фреймворк используется для создания модулей. Модули являются самыми крупными строительными блоками для сайта. Модуль представляет собой локацию на сайте, предоставляющую конечному пользователю уникальную функциональность. Модули характеризуются автономностью. Они могут взаимодействовать с другими модулями, но могут также работать полностью независимо.

Плагины используются для расширения ядра и модулей. Плагины подключаются к модулям и скриптам ядра для изменения их функционирования. Модули и плагины вместе называются расширениями, так как они расширяют функциональность ядра. Расширения предоставляют неограниченную свободу в настройке сайта и избавляют вас от множества проблем при обновлении.

#5. Интернационализация

Интернационализация (часто сокращается до i18n) — функция, необходимая для приложения, которое требуется настроить для использования с поддержкой нескольких языков. Она также является важным шагом на пути к созданию мультиязычного контента. В XXI веке множество сайтов содержат информацию одновременно на нескольких языках, поэтому все большее количество разработчиков выбирает Unicode в качестве кодировки символов. Cotonti изначально поддерживает Unicode и использует UTF-8 в качестве набора символов по умолчанию.

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

Интернализация контента сайтов, такого как страницы и категории также поддерживается. С Cotonti при включении плагина i18n вы сможете создавать мультиязычные сайты, управлять переводами и переключаться между языками на ходу.

#6. Стабильность и безопасность

Seditio была одной из самых безопасных PHP CMS в мире (согласно багтрекерам), так как стабильность являлась одной из основных ее целей. Мы считаем это хорошей традицией. Разработчики делают все, что в их силах, чтобы защитить ваш сайт от внедрений SQL-кодамежсайтового скриптинга (XSS), подделки межсайтовых запросов (CSRF) и типичных ловушек PHP, как пассивным (аккуратный код, отладка), так и активным (специальные алгоритмы) способом.

Кроме того, у нас имеется функциональная и прозрачная система уровней доступа, основанная на списках контроля доступа (ACL) и режимах доступа. Это матрица, в колонках которой находятся группы пользователей и элементы сайта. В полях и ячейках матрицы указаны конкретные права доступа для группы и элемента.

И наконец, мы предоставляем встроенную систему антихаммеринга и защиты от спама. Но, несмотря на надежность всех этих систем обеспечения безопасности, вы всегда должны помнить, что они не защитят сайт от вас самих.

Одной из основных характеристик стабильности является отсутствие багов. Для достижения этого есть два способа. Первый, уже упомянутый выше, представляет собой внимательное написание кода. Второй известен как контроль качества (QA). Он основывается на отправленных пользователем отчетах о проблемах, тестировании, отладке и обновлениях.

#7. Производительность и масштабирование

Что касается производительности, самый важный вопрос состоит в том, сколько запросов в минуту (RPM) или запросов в секунду (RPS) может обработать ваш сайт. В этом плане для Cotonti мы делаем все, что в наших силах, для достижения высоких результатов. Мы избегаем чрезмерных затрат ресурсов при добавлении новых функций и используем эффективные технологии повышения производительности, такие как пре-рендеринг и кеширование на стороне сервера. Произведена оптимизация SQL запросов и базы данных — бесперебойная работа будет обеспечена даже тогда, когда ваш сайт станет объемнее и популярнее.

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

#8. Функции для поисковой оптимизации

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

Cotonti включает в себя мощный инструмент формирования URL, пользовательские заголовки, мета-теги и множество удобных опций конфигурации. Cotonti предоставляет поисковой машине информацию о том, какие страницы не нужно индексировать и по каким ссылкам не следует переходить. Кроме того, существуют плагины для создания карты сайта. В целом, плагины предоставляют огромные возможности для SEO: их количество растет и вы можете легко написать все, что захотите.

#9. На этом список не заканчивается

Cotonti следует основным современным тенденциям веб-разработки. Ниже упомянуты только самые значимые из них.

#9.1. AJAX и синдикация

AJAX означает Asynchronous JavaScript And XML, но на самом деле он является целым набором подобных технологий. Он предоставляет возможность коммуникации клиент-сервер без необходимости обновления страницы. Таким образом веб-приложения работают быстрее, потребляют меньше трафика и смотрятся привлекательнее.

Cotonti оснащена самой популярной в мире библиотекой JavaScript jQuery, обеспечивающей отличную поддержку AJAX со стороны клиента. Со стороны сервера любой модуль Cotonti может работать как в синхронном, так и в асинхронном режиме, а вы легко сможете написать отдельные части на AJAX для плагинов.

По умолчанию вывод генерируется в (X)HTML, но после создания XML-шаблонов его можно преобразовывать в компактные файлы XML, подходящие для обработчиков AJAX и роботов.

Кроме того, роботы смогут обрабатывать контент сайта, если у вас установлен стандартный модуль RSS, выводящий содержимое различных разделов вашего сайта в формате, совместимом с RSS и Atom, с учетом прав доступа.

Такие расширения, как агрегаторы лент, создаются сообществом.

#9.2. Поиск по сайту и система тегов

Практически все сайты содержат информацию; чем быстрее посетитель находит информацию, которая ему необходима, тем лучше сайт отвечает требованиям. Мы делаем все, чтобы контент сайта на Cotonti был доступен для популярных поисковых служб, но, к сожалению, внешние поисковые системы, такие как Google или Yandex, не могут получить доступ к некоторым закрытым разделам вашего сайта или обновить индекс сайта в реальном времени. Поэтому мы разработали собственную поисковую систему по сайту, обновляющую индекс в реальном времени и выполняющую поиск только по тем данным, которые открыты для текущего пользователя.

Некоторые популярные сайты невозможно представить без тегов, поэтому Cotonti содержит гибкую подсистему тегов. Их можно использовать на страницах, форумах, модулях от сторонних разработчиков и в собственных плагинах. Предоставьте пользователям право отмечать тегами материалы сайта — это создаст облака тегов и позволит посетителям таким образом находить необходимую им информацию.

#9.3. Социализация и веб-сервисы

Cotonti не является готовой социальной сетью, так как это настраиваемая CMS/CMF с самыми основными функциями ядра. Но социальную сеть можно создать, если воспользоваться одновременно базовыми функциями (страницы, форумы, личные сообщения) и некоторыми полезными плагинами, доступными в Интернете: блоги, друзья, пользовательские стены, галереи, и т. д. Если в стене отсутствует какой-то кирпичик, вам не потребуется много усилий, чтобы поместить его на место — в этом и состоит преимущество Cotonti.

Связь с другими популярными социальными сетями может быть установлена с помощью бесплатных плагинов и служб. Например, существуют плагины для Facebook, Twitter и других социальных сетей.

Что касается веб-сервисов, Cotonti может легко интегрироваться с имеющимися (например единая регистрация, обмен файлами, геолокация). При желании вы можете создать модули и плагины для экспорта веб-сервисов с вашего сайта на Cotonti, используя любой интерфейс на выбор: REST, XML-RPC, SOAP, и т. д.



Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям