dev:faq:how-start-development-by-maxim

Базова структура 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. Документация по 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.

Детальное описание со скриншотами здесь:

Прикладные компоненты:

  • 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 Maxim . Original instructions can be found here
Note: Данная документация была предоставлена автором Maxim . Оригинал документации доступенздесь
dev/faq/how-start-development-by-maxim.txt · Last modified: 2014/01/15 09:11 by Den