======Базова структура Oxwall ====== Код Oxwall состоит из следующих основных частей: *Ядро *Системные плагины *Пользовательские плагины ===== Ядро ===== Ядро располагается в папке ow_core. Представляет собой ядро фреймворка. Ядро реализует следующие функции: управление приложением, механизм кэша, работа с БД, MVC модель, роутинг url, система событий, конструктор форм, отображение html страниц, управление темами, управление плагинами, сессии, очередь рассылки емейл, лог. Также ядро содержит интерфейсы для пользовательских классов: *OW_CacheService - Кэш *OW_Storage - хранилище файлов *OW_BillingProductAdapter – товары для продажи *OW_BillingAdapter – платежный шлюз =====Системные плагины ===== В Oxwall 2 системных плагина: *Базовый плагин *Панель администратора Системные плагины располагаются в папке ow_system_plugins. Системные плагины совместно с ядром реализуют базовый функционал CMS. ==== Базовый плагин ==== Плагин «Базовый плагин» находится в папке “ow_system_plugins/base”. Базовый плагин реализует функционал, который можно условно разбить на следующие группы: *Системный: cron, лог, работа с БД, кэш. *Представление: управление страницами, плагинами, меню, темами, мультиязычность. *Управление пользователями: регистрация пользователей, авторизация, роли, права, профиль пользователя, приглашения, подтверждение почты. *Прикладной: продажа товаров, комментарии, рейтинги, теги, лайки, отправка почты. Плагин хранит данные в таблицах с префиксом 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); ==== Утилитные классы==== *UTIL_Image – обработка картинок. *UTIL_Profiler – замер времени выполнения. =====События===== Возможность синхронно рассылать уведомления о событиях между плагинами. При отправке сообщения передаются данные, которые получатели могут прочитать или модифицировать. Отправка: $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. Получение уведомлений и реакции на события *ON_USER_REGISTER – пользователь зарегистрировался *ON_USER_LOGIN – логин пользователя *ON_BEFORE_USER_REGISTER – регистрируется новый пользователь *ON_USER_EDIT – пользователь отредактировал свой профиль *ON_USER_EDIT_BY_ADMIN – администратор отредактировал данные пользователя *base_add_comment – добавлен комментарий на сайте *ON_JOIN_FORM_RENDER – начало регистрации нового пользователя. Обработчик сообщения проверяет код приглашения и выбрасывает исключение в случае неверного кода. *friends.add_friend – отправлен запрос на добавление в друзья *friends.request-accepted - принят запрос на добавление в друзья *feed.after_comment_add – в ленте новостей добавлен комментарий к объекту *feed.after_like_added – в ленте новостей добавлен лайк к объекту 2. Интеграция в элементы любого рода. Отправитель сообщения запрашивает данные у всех. Любой желающий подписывается на сообщение и добавляет/меняет данные *base.preference_menu_items – страницы модуля «предпочтения» *base.preference_section_label – разделы модуля «предпочтения» *base.preference_add_form_element - опции модуля «предпочтения» *join.get_captcha_field – поле капчи в форме регистрации *console.collect_items – кнопки консоли *console.load_list – окно уведомлений в консоли *console.ping – количество новых элементов кнопки консоли *base.add_main_console_item – пункты меню кнопки профиля в консоли *notifications.send_list – уведомления пользователю *feed.on_entity_add – новый элемент в ленте новостей *notifications.on_item_send – уведомление на почту *notifications.collect_actions – список почтовых уведомлений *usercredits.on_action_collect – список действий для получения кредитов 3. Отправка команд плагинам *friends.send_friend_request – отправить запрос на добавление в друзья *feed.action – добавить событие в ленту новостей *notifications.add – добавить уведомления *usercredits.action_update – пересчитать кредиты *usercredits.track_action – списать кредиты за действие *usercredits.grant – начислить кредиты пользователю 4. Запрос информации у плагинов *usercredits.check_balance – достаточно ли баланса кредитов для действия *usercredits.get_balance – баланс кредитов пользователя *usercredits.error_message – текст сообщения о недостаточном балансе Лог событий отображается на отладочной панели. Чтобы получить уведомление первым, надо указать приоритет: bind(…,…, 0). По умолчанию, приоритет – 1000. Чтобы не дать возможность получить уведомление другим получателям, надо в обработчике вернуть false или вызвать $event->stopPropagation(). ===== Разработка визуальной части ===== В Oxwall 3 типа визуальных объектов: *Контроллер *Компонент *Декоратор Для построения визуальной части используется шаблонизатор Smarty. Документация по [[http://www.smarty.net/docsv2/ru/smarty.for.designers.tpl |Smarty ]] ==== Контроллер==== Контроллер отвечает за формирование одной или нескольких страниц целиком. В Oxwall 2 основных типа контроллеров: *OW_ActionController - контроллер страницы сайта *ADMIN_CTRL_Abstract - контроллер страницы панели администратора ==== Компонент ==== Компонент отвечает за формирование небольшого блока на страницах и обработку событий. Он самостоятельно формирует данные по переданным параметрам. В Oxwall 2 основных типа компонентов: *OW_Component – простой компонент *BASE_CLASS_Widget - виджет, который администратор или пользователь могут добавлять на страницы: главная, dashboard, профиль, страница группы. Компонент может включать в себя другие компоненты и декораторы. ==== Декоратор==== Декоратор – это html файл, отображающий переданные данные. Декоратор является функцией Smarty и может находится в любом шаблоне, в т.ч. в другом декораторе. Декораторы упрощают код представления, убирают дублирование кода и обеспечивают единообразное отображение повторяющихся данных на разных страницах. Например, декоратор avatar_item используется для отображения аватара пользователя, user_list_item - для отображения аватара и имени пользователя. ==== Drag-And-Drop ==== Для того, чтобы дать возможность пользователю менять расположение виджетов или других элементов на странице, используются классы BASE_CTRL_ComponentPanel, BASE_CMP_DragAndDropEntityPanel, BASE_CMP_DragAndDropIndex, ADMIN_CTRL_Components, ADMIN_CMP_DragAndDropAdminPanel. ==== Основные компоненты сайта==== *BASE_CMP_Console* - консоль (верхняя панель управления) *BASE_CMP_MainMenu – верхнее меню *BASE_CMP_BottomMenu – нижнее меню * ==== Некоторые элементы, используемые для создания визуальных представлений ==== *BASE_CMP_ContentMenu – меню *BASE_CMP_SortControl – контрол сортировки данных (подменю) *BASE_CMP_Paging – постраничный вывод *BASE_CMP_Breadcrumb – хлебные крошки *Form – форма ввода данных *OW::getFeedback()->info – Всплывающее сообщение *OW.ajaxFloatBox – всплывающее окно с функционалом AJAX. Пример - ow_plugins/skeleton/controllers/floatbox.php. Детальное описание со скриншотами здесь: * http://docs.oxwall.org/design:interface * http://docs.oxwall.org/_media/design:origin-style-guide.psd Прикладные компоненты: *BASE_CMP_Comments – отображение блока комментариев *BASE_CMP_TagSearch - Поиск по тегам *BASE_CMP_EntityTagCloud – облако тегов *BASE_CMP_Rate – рейтинг объекта *BASE_CMP_AvatarUserListSelect – окно выбора пользователей *BASE_CMP_AvatarUserList, BASE_CMP_MiniAvatarUserList, BASE_CMP_Users, BASE_CMP_UserList – списки аватаров пользователей OW::getNavigation()->addMenuItem – добавить пункт в главное меню. |**Note**: This documentation was provided by our contributor [[http://www.oxwall.org/user/superbog| Maxim ]]. Original instructions can be found [[http://www.oxwall.org/forum/topic/15481|here]] | |**Note**: Данная документация была предоставлена автором [[http://www.oxwall.org/user/superbog| Maxim ]]. Оригинал документации доступен[[http://www.oxwall.org/forum/topic/15481|здесь]] |