Код Oxwall состоит из следующих основных частей:
Ядро располагается в папке ow_core. Представляет собой ядро фреймворка.
Ядро реализует следующие функции: управление приложением, механизм кэша, работа с БД, MVC модель, роутинг url, система событий, конструктор форм, отображение html страниц, управление темами, управление плагинами, сессии, очередь рассылки емейл, лог.
Также ядро содержит интерфейсы для пользовательских классов:
В Oxwall 2 системных плагина:
Системные плагины располагаются в папке ow_system_plugins. Системные плагины совместно с ядром реализуют базовый функционал CMS.
Плагин «Базовый плагин» находится в папке “ow_system_plugins/base”.
Базовый плагин реализует функционал, который можно условно разбить на следующие группы:
Плагин хранит данные в таблицах с префиксом ow_base_.
Плагин «Панель администратора» находится в папке ow_system_plugins/admin.
Панель администратора предназначена для администратора и реализует визуальное представление для управления объектами базового плагина.
В ow_includes/config.php можно включить флаги:
1. OW_DEBUG_MODE – включение показа сообщений об ошибках и исключениях php.
Настройка реакции на ошибки и исключения производится модификацией “ow_core/error_manager.php”.
По умолчанию, в режиме отладки в случае исключения выполнение прекращается.
2. OW_DEV_MODE – отключение кэша страниц и запросов в БД. Сильно замедляет время генерации страниц.
3. OW_PROFILER_ENABLE - включение отладочной панели.
Автоматически очищаемый кэш данных с поддержкой тегов в таблицах base_cache и base_cache_tag.
OW::getCacheManager()->save(value, key, tags, cacheLifeTime); OW::getCacheManager()->load(key); OW::getCacheManager()->clean(tags); - сброс кэша с установленными тегами
Кэширование запросов к БД:
При выполнении любого запроса на получение данных из БД есть возможность указать время кэширования результата запроса и теги. Кэш удалится автоматически по истечении заданного времени или при явном вызове функции clean(tags).
findById(id, cacheLifeTime, tags); - запрос с кэшированием результата OW::getCacheManager()->clean(tags); - сброс кэша
Запись лога в таблицу ow_base_log
$logger = OW::getLogger('type'); $logger->addEntry(‘message’, ‘key’); $logger->writeLog();
Автоматически очищаемый кэш данных в таблице ow_base_db_cache.
OW::getCacheService()->set(key, value, lifeTimeSeconds); OW::getCacheService()->get(key);
Возможность синхронно рассылать уведомления о событиях между плагинами. При отправке сообщения передаются данные, которые получатели могут прочитать или модифицировать.
Отправка:
$event = new OW_Event('base_add_comment',…); // trigger event comment add OW::getEventManager()->trigger($event);
Подписка на получение и обработка:
function blogs_on_notify( OW_Event $event ){ обработка }; OW::getEventManager()->bind('base_add_comment', 'blogs_on_notify');
Используется для следующих задач:
1. Получение уведомлений и реакции на события
2. Интеграция в элементы любого рода. Отправитель сообщения запрашивает данные у всех. Любой желающий подписывается на сообщение и добавляет/меняет данные
3. Отправка команд плагинам
4. Запрос информации у плагинов
Лог событий отображается на отладочной панели.
Чтобы получить уведомление первым, надо указать приоритет: bind(…,…, 0). По умолчанию, приоритет – 1000.
Чтобы не дать возможность получить уведомление другим получателям, надо в обработчике вернуть false или вызвать
$event->stopPropagation().
В Oxwall 3 типа визуальных объектов:
Для построения визуальной части используется шаблонизатор Smarty. Документация по Smarty
Контроллер отвечает за формирование одной или нескольких страниц целиком.
В Oxwall 2 основных типа контроллеров:
Компонент отвечает за формирование небольшого блока на страницах и обработку событий. Он самостоятельно формирует данные по переданным параметрам.
В Oxwall 2 основных типа компонентов:
Компонент может включать в себя другие компоненты и декораторы.
Декоратор – это html файл, отображающий переданные данные. Декоратор является функцией Smarty и может находится в любом шаблоне, в т.ч. в другом декораторе. Декораторы упрощают код представления, убирают дублирование кода и обеспечивают единообразное отображение повторяющихся данных на разных страницах.
Например, декоратор avatar_item используется для отображения аватара пользователя, user_list_item - для отображения аватара и имени пользователя.
Для того, чтобы дать возможность пользователю менять расположение виджетов или других элементов на странице, используются классы BASE_CTRL_ComponentPanel, BASE_CMP_DragAndDropEntityPanel, BASE_CMP_DragAndDropIndex, ADMIN_CTRL_Components, ADMIN_CMP_DragAndDropAdminPanel.
Детальное описание со скриншотами здесь:
Прикладные компоненты:
OW::getNavigation()->addMenuItem – добавить пункт в главное меню.