<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="https://wiki.oxwall.com/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="https://wiki.oxwall.com/feed.php">
        <title>Oxwall Software Documentation dev:faq</title>
        <description></description>
        <link>https://wiki.oxwall.com/</link>
        <image rdf:resource="https://wiki.oxwall.com/lib/tpl/dokuwiki/images/favicon.ico" />
       <dc:date>2026-04-05T01:11:20+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://wiki.oxwall.com/dev:faq:how-start-development-by-maxim"/>
                <rdf:li rdf:resource="https://wiki.oxwall.com/dev:faq:how-to-paste-my-custom-php-code-to-index.php-file"/>
                <rdf:li rdf:resource="https://wiki.oxwall.com/dev:faq:index"/>
                <rdf:li rdf:resource="https://wiki.oxwall.com/dev:faq:why-do-i-need-the-plugin-key"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://wiki.oxwall.com/lib/tpl/dokuwiki/images/favicon.ico">
        <title>Oxwall Software Documentation</title>
        <link>https://wiki.oxwall.com/</link>
        <url>https://wiki.oxwall.com/lib/tpl/dokuwiki/images/favicon.ico</url>
    </image>
    <item rdf:about="https://wiki.oxwall.com/dev:faq:how-start-development-by-maxim">
        <dc:format>text/html</dc:format>
        <dc:date>2014-01-15T09:11:36+00:00</dc:date>
        <title>Базова структура Oxwall</title>
        <link>https://wiki.oxwall.com/dev:faq:how-start-development-by-maxim</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;базова-структура-oxwall&quot;&gt;Базова структура Oxwall&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Код Oxwall состоит из следующих основных частей:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Ядро&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Системные плагины&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Пользовательские плагины&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT1 SECTION &quot;Базова структура Oxwall&quot; [1-237] --&gt;
&lt;h2 class=&quot;sectionedit2&quot; id=&quot;ядро&quot;&gt;Ядро&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Ядро располагается в папке ow_core. Представляет собой ядро фреймворка.
&lt;/p&gt;

&lt;p&gt;
Ядро реализует следующие функции: управление приложением, механизм кэша, работа с БД, MVC модель, роутинг url, система событий, конструктор форм, отображение html страниц, управление темами, управление плагинами, сессии, очередь рассылки емейл, лог.
&lt;/p&gt;

&lt;p&gt;
Также ядро содержит интерфейсы для пользовательских классов:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;OW_CacheService - Кэш&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;OW_Storage - хранилище файлов &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;OW_BillingProductAdapter – товары для продажи&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;OW_BillingAdapter – платежный шлюз&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT2 SECTION &quot;Ядро&quot; [238-1144] --&gt;
&lt;h2 class=&quot;sectionedit3&quot; id=&quot;системные-плагины&quot;&gt;Системные плагины&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
В Oxwall 2 системных плагина:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Базовый плагин&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Панель администратора&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Системные плагины располагаются в папке ow_system_plugins. Системные плагины совместно с ядром реализуют базовый функционал &lt;abbr title=&quot;Content Management System&quot;&gt;CMS&lt;/abbr&gt;.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT3 SECTION &quot;Системные плагины&quot; [1145-1536] --&gt;
&lt;h3 class=&quot;sectionedit4&quot; id=&quot;базовый-плагин&quot;&gt;Базовый плагин&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Плагин «Базовый плагин» находится в папке “ow_system_plugins/base”.
&lt;/p&gt;

&lt;p&gt;
Базовый плагин реализует функционал, который можно условно разбить на следующие группы:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Системный: cron, лог, работа с БД, кэш.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Представление: управление страницами, плагинами, меню, темами, мультиязычность. &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Управление пользователями: регистрация пользователей, авторизация, роли, права, профиль пользователя, приглашения, подтверждение почты.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Прикладной: продажа товаров, комментарии, рейтинги, теги, лайки, отправка почты.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Плагин хранит данные в таблицах с префиксом ow_base_.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT4 SECTION &quot;Базовый плагин&quot; [1537-2563] --&gt;
&lt;h3 class=&quot;sectionedit5&quot; id=&quot;панель-администратора&quot;&gt;Панель администратора&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Плагин «Панель администратора» находится в папке ow_system_plugins/admin.
&lt;/p&gt;

&lt;p&gt;
Панель администратора предназначена для администратора и реализует визуальное представление для управления объектами базового плагина. 
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT5 SECTION &quot;Панель администратора&quot; [2564-2991] --&gt;
&lt;h2 class=&quot;sectionedit6&quot; id=&quot;отладка&quot;&gt;Отладка&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
В ow_includes/config.php можно включить флаги:
&lt;/p&gt;

&lt;p&gt;
1.	OW_DEBUG_MODE – включение показа сообщений об ошибках и исключениях php.
&lt;/p&gt;

&lt;p&gt;
Настройка реакции на ошибки и исключения производится модификацией “ow_core/error_manager.php”. 
&lt;/p&gt;

&lt;p&gt;
По умолчанию, в режиме отладки в случае исключения выполнение прекращается.
&lt;/p&gt;

&lt;p&gt;
2.	OW_DEV_MODE – отключение кэша страниц и запросов в БД. Сильно замедляет время генерации страниц.
&lt;/p&gt;

&lt;p&gt;
3.	OW_PROFILER_ENABLE - включение отладочной панели.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT6 SECTION &quot;Отладка&quot; [2992-3763] --&gt;
&lt;h2 class=&quot;sectionedit7&quot; id=&quot;системные-компоненты&quot;&gt;Системные компоненты&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT7 SECTION &quot;Системные компоненты&quot; [3764-3816] --&gt;
&lt;h3 class=&quot;sectionedit8&quot; id=&quot;кэш-в-бд&quot;&gt;Кэш в БД&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Автоматически очищаемый кэш данных с поддержкой тегов в таблицах base_cache и base_cache_tag.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;OW::getCacheManager()-&amp;gt;save(value, key, tags, cacheLifeTime);
OW::getCacheManager()-&amp;gt;load(key);
OW::getCacheManager()-&amp;gt;clean(tags); - сброс кэша с установленными тегами&lt;/pre&gt;

&lt;p&gt;
Кэширование запросов к БД:
&lt;/p&gt;

&lt;p&gt;
При выполнении любого запроса на получение данных из БД есть возможность указать время кэширования результата запроса и теги. Кэш удалится автоматически по истечении заданного времени или при явном вызове функции clean(tags).
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;findById(id, cacheLifeTime, tags); - запрос с кэшированием результата
OW::getCacheManager()-&amp;gt;clean(tags); - сброс кэша&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT8 SECTION &quot;Кэш в БД&quot; [3817-4821] --&gt;
&lt;h3 class=&quot;sectionedit9&quot; id=&quot;лог-в-бд&quot;&gt;Лог в БД&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Запись лога в таблицу ow_base_log
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;$logger = OW::getLogger(&amp;#039;type&amp;#039;);
$logger-&amp;gt;addEntry(‘message’, ‘key’);
$logger-&amp;gt;writeLog();&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT9 SECTION &quot;Лог в БД&quot; [4822-5004] --&gt;
&lt;h3 class=&quot;sectionedit10&quot; id=&quot;кэш-в-бд-без-тегов&quot;&gt;Кэш в БД без тегов&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Автоматически очищаемый кэш данных в таблице ow_base_db_cache.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;OW::getCacheService()-&amp;gt;set(key, value, lifeTimeSeconds);
OW::getCacheService()-&amp;gt;get(key);&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT10 SECTION &quot;Кэш в БД без тегов&quot; [5005-5246] --&gt;
&lt;h3 class=&quot;sectionedit11&quot; id=&quot;утилитные-классы&quot;&gt;Утилитные классы&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;UTIL_Image – обработка картинок.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;UTIL_Profiler – замер времени выполнения.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT11 SECTION &quot;Утилитные классы&quot; [5247-5413] --&gt;
&lt;h2 class=&quot;sectionedit12&quot; id=&quot;события&quot;&gt;События&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
Возможность синхронно рассылать уведомления о событиях между плагинами. При отправке сообщения передаются данные, которые получатели могут прочитать или модифицировать.
&lt;/p&gt;

&lt;p&gt;
Отправка:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;$event = new OW_Event(&amp;#039;base_add_comment&amp;#039;,…); // trigger event comment add
OW::getEventManager()-&amp;gt;trigger($event); &lt;/pre&gt;

&lt;p&gt;
Подписка на получение и обработка:
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;function blogs_on_notify( OW_Event $event ){ обработка };
OW::getEventManager()-&amp;gt;bind(&amp;#039;base_add_comment&amp;#039;, &amp;#039;blogs_on_notify&amp;#039;);&lt;/pre&gt;

&lt;p&gt;
Используется для следующих задач:
&lt;/p&gt;

&lt;p&gt;
1.	Получение уведомлений и реакции на события
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;ON_USER_REGISTER – пользователь зарегистрировался&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;ON_USER_LOGIN – логин пользователя&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;ON_BEFORE_USER_REGISTER – регистрируется новый пользователь&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;ON_USER_EDIT – пользователь отредактировал свой профиль&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;ON_USER_EDIT_BY_ADMIN – администратор отредактировал данные пользователя&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;base_add_comment – добавлен комментарий на сайте&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;ON_JOIN_FORM_RENDER – начало регистрации нового пользователя. Обработчик сообщения проверяет код приглашения и выбрасывает исключение в случае неверного кода.&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;friends.add_friend – отправлен запрос на добавление в друзья&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;friends.request-accepted - принят запрос на добавление в друзья&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;feed.after_comment_add – в ленте новостей добавлен комментарий к объекту&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;feed.after_like_added – в ленте новостей добавлен лайк к объекту&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
2.	Интеграция в элементы любого рода. Отправитель сообщения запрашивает данные у всех. Любой желающий подписывается на сообщение и добавляет/меняет данные
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;base.preference_menu_items – страницы модуля «предпочтения»&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;base.preference_section_label – разделы модуля «предпочтения»&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;base.preference_add_form_element - опции модуля «предпочтения»&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;join.get_captcha_field – поле капчи в форме регистрации&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;console.collect_items – кнопки консоли&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;console.load_list – окно уведомлений в консоли&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;console.ping – количество новых элементов кнопки консоли&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;base.add_main_console_item – пункты меню кнопки профиля в консоли &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;notifications.send_list – уведомления пользователю&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;feed.on_entity_add – новый элемент в ленте новостей&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;notifications.on_item_send – уведомление на почту&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;notifications.collect_actions – список почтовых уведомлений&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;usercredits.on_action_collect – список действий для получения кредитов&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
3.	Отправка команд плагинам
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;friends.send_friend_request – отправить запрос на добавление в друзья&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;feed.action – добавить событие в ленту новостей&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;notifications.add – добавить уведомления&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;usercredits.action_update – пересчитать кредиты&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;usercredits.track_action – списать кредиты за действие&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;usercredits.grant – начислить кредиты пользователю&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
4.	Запрос информации у плагинов
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;usercredits.check_balance – достаточно ли баланса кредитов для действия&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;usercredits.get_balance – баланс кредитов пользователя&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;usercredits.error_message – текст сообщения о недостаточном балансе&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Лог событий отображается на отладочной панели.
&lt;/p&gt;

&lt;p&gt;
Чтобы получить уведомление первым, надо указать приоритет: bind(…,…, 0). По умолчанию, приоритет – 1000.
&lt;/p&gt;

&lt;p&gt;
Чтобы не дать возможность получить уведомление другим получателям, надо в обработчике вернуть false или вызвать 
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;$event-&amp;gt;stopPropagation().&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT12 SECTION &quot;События&quot; [5414-10329] --&gt;
&lt;h2 class=&quot;sectionedit13&quot; id=&quot;разработка-визуальной-части&quot;&gt;Разработка визуальной части&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;p&gt;
В Oxwall 3 типа визуальных объектов:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Контроллер&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Компонент&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Декоратор&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Для построения визуальной части используется шаблонизатор Smarty. Документация по &lt;a href=&quot;http://www.smarty.net/docsv2/ru/smarty.for.designers.tpl&quot; class=&quot;urlextern&quot; title=&quot;http://www.smarty.net/docsv2/ru/smarty.for.designers.tpl&quot;  rel=&quot;nofollow&quot;&gt;Smarty &lt;/a&gt;
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT13 SECTION &quot;Разработка визуальной части&quot; [10330-10743] --&gt;
&lt;h3 class=&quot;sectionedit14&quot; id=&quot;контроллер&quot;&gt;Контроллер&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Контроллер отвечает за формирование одной или нескольких страниц целиком.
&lt;/p&gt;

&lt;p&gt;
В Oxwall 2 основных типа контроллеров:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;OW_ActionController - контроллер страницы сайта&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;ADMIN_CTRL_Abstract - контроллер страницы панели администратора&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT14 SECTION &quot;Контроллер&quot; [10744-11157] --&gt;
&lt;h3 class=&quot;sectionedit15&quot; id=&quot;компонент&quot;&gt;Компонент&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Компонент отвечает за формирование небольшого блока на страницах и обработку событий. Он самостоятельно формирует данные по переданным параметрам.
&lt;/p&gt;

&lt;p&gt;
В Oxwall 2 основных типа компонентов:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;OW_Component – простой компонент&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CLASS_Widget - виджет, который администратор или пользователь могут добавлять на страницы: главная, dashboard, профиль, страница группы.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Компонент может включать в себя другие компоненты и декораторы.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT15 SECTION &quot;Компонент&quot; [11158-11936] --&gt;
&lt;h3 class=&quot;sectionedit16&quot; id=&quot;декоратор&quot;&gt;Декоратор&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Декоратор – это html файл, отображающий переданные данные. Декоратор является функцией Smarty и может находится в любом шаблоне, в т.ч. в другом декораторе. Декораторы упрощают код представления, убирают дублирование кода и обеспечивают единообразное отображение повторяющихся данных на разных страницах. 
&lt;/p&gt;

&lt;p&gt;
Например, декоратор avatar_item используется для отображения аватара пользователя, user_list_item - для отображения аватара и имени пользователя.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT16 SECTION &quot;Декоратор&quot; [11937-12769] --&gt;
&lt;h3 class=&quot;sectionedit17&quot; id=&quot;drag-and-drop&quot;&gt;Drag-And-Drop&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;

&lt;p&gt;
Для того, чтобы дать возможность пользователю менять расположение виджетов или других элементов на странице, используются классы BASE_CTRL_ComponentPanel, BASE_CMP_DragAndDropEntityPanel, BASE_CMP_DragAndDropIndex, ADMIN_CTRL_Components, ADMIN_CMP_DragAndDropAdminPanel.
&lt;/p&gt;

&lt;/div&gt;
&lt;!-- EDIT17 SECTION &quot;Drag-And-Drop&quot; [12770-13177] --&gt;
&lt;h3 class=&quot;sectionedit18&quot; id=&quot;основные-компоненты-сайта&quot;&gt;Основные компоненты сайта&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_Console* - консоль (верхняя панель управления)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_MainMenu – верхнее меню&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_BottomMenu – нижнее меню&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
&lt;!-- EDIT18 SECTION &quot;Основные компоненты сайта&quot; [13178-13427] --&gt;
&lt;h3 class=&quot;sectionedit19&quot; id=&quot;некоторые-элементы-используемые-для-создания-визуальных-представлений&quot;&gt;Некоторые элементы, используемые для создания визуальных представлений&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_ContentMenu – меню&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_SortControl – контрол сортировки данных (подменю)&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_Paging – постраничный вывод&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_Breadcrumb – хлебные крошки&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;Form – форма ввода данных &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;OW::getFeedback()→info – Всплывающее сообщение &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;OW.ajaxFloatBox – всплывающее окно с функционалом AJAX. Пример - ow_plugins/skeleton/controllers/floatbox.php. &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Детальное описание со скриншотами здесь:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://docs.oxwall.org/design:interface&quot; class=&quot;urlextern&quot; title=&quot;http://docs.oxwall.org/design:interface&quot;  rel=&quot;nofollow&quot;&gt;http://docs.oxwall.org/design:interface&lt;/a&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;http://docs.oxwall.org/_media/design:origin-style-guide.psd&quot; class=&quot;urlextern&quot; title=&quot;http://docs.oxwall.org/_media/design:origin-style-guide.psd&quot;  rel=&quot;nofollow&quot;&gt;http://docs.oxwall.org/_media/design:origin-style-guide.psd&lt;/a&gt; &lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Прикладные компоненты:
&lt;/p&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_Comments – отображение блока комментариев&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_TagSearch - Поиск по тегам&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_EntityTagCloud – облако тегов&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_Rate – рейтинг объекта&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_AvatarUserListSelect – окно выбора пользователей&lt;/div&gt;
&lt;/li&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt;BASE_CMP_AvatarUserList, BASE_CMP_MiniAvatarUserList, BASE_CMP_Users, BASE_CMP_UserList – списки аватаров пользователей&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;code&quot;&gt;OW::getNavigation()-&amp;gt;addMenuItem – добавить пункт в главное меню.&lt;/pre&gt;
&lt;div class=&quot;table sectionedit20&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;Note&lt;/strong&gt;: This documentation was provided by our contributor &lt;a href=&quot;http://www.oxwall.org/user/superbog&quot; class=&quot;urlextern&quot; title=&quot;http://www.oxwall.org/user/superbog&quot;  rel=&quot;nofollow&quot;&gt; Maxim &lt;/a&gt;. Original instructions can be found &lt;a href=&quot;http://www.oxwall.org/forum/topic/15481&quot; class=&quot;urlextern&quot; title=&quot;http://www.oxwall.org/forum/topic/15481&quot;  rel=&quot;nofollow&quot;&gt;here&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT20 TABLE [14899-15095] --&gt;&lt;div class=&quot;table sectionedit21&quot;&gt;&lt;table class=&quot;inline&quot;&gt;
	&lt;tr class=&quot;row0&quot;&gt;
		&lt;td class=&quot;col0&quot;&gt;&lt;strong&gt;Note&lt;/strong&gt;: Данная документация была предоставлена автором &lt;a href=&quot;http://www.oxwall.org/user/superbog&quot; class=&quot;urlextern&quot; title=&quot;http://www.oxwall.org/user/superbog&quot;  rel=&quot;nofollow&quot;&gt; Maxim &lt;/a&gt;. Оригинал документации доступен&lt;a href=&quot;http://www.oxwall.org/forum/topic/15481&quot; class=&quot;urlextern&quot; title=&quot;http://www.oxwall.org/forum/topic/15481&quot;  rel=&quot;nofollow&quot;&gt;здесь&lt;/a&gt; &lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;!-- EDIT21 TABLE [15097-15360] --&gt;
&lt;/div&gt;
&lt;!-- EDIT19 SECTION &quot;Некоторые элементы, используемые для создания визуальных представлений&quot; [13428-] --&gt;</description>
    </item>
    <item rdf:about="https://wiki.oxwall.com/dev:faq:how-to-paste-my-custom-php-code-to-index.php-file">
        <dc:format>text/html</dc:format>
        <dc:date>2012-10-24T11:07:04+00:00</dc:date>
        <title>How to paste my custom PHP code to index.php file</title>
        <link>https://wiki.oxwall.com/dev:faq:how-to-paste-my-custom-php-code-to-index.php-file</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;how-to-paste-my-custom-php-code-to-indexphp-file&quot;&gt;How to paste my custom PHP code to index.php file&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Let&amp;#039;s assume you have found PHP code on the Internet, that is supposed to display some widget or &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; code when executed on the index.php page. And now you want to add this code to your Oxwall-powered website. Straightforward copy&amp;amp;paste implementation will not work here. Just like other modern &lt;abbr title=&quot;Content Management System&quot;&gt;CMS&lt;/abbr&gt;, Oxwall was developed based on the MVC programming model. That means that the application logic is separated from the representation logic (templates). Typically, the PHP code similar to the one you want to add to your page is taken from third-party resources, and already contains both logic and representation. And they must be separated, as mentioned above. 
So basically, you need to understand the algorithm of the PHP code you want to add, separate logics and representation, and then add each of the two components to the right place in the Oxwall code. 
&lt;/p&gt;

&lt;p&gt;
- But does that mean I won&amp;#039;t be able to add my simple PHP code that has been working fine for years on my other website? 
&lt;/p&gt;

&lt;p&gt;
Actually, we could make it possible. But that would require sacrificing safe updates for sites, plugins and themes, and the plugin system as it is. 
Besides, you always have an option to use iframe in the Custom &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;/&lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; widget.
&lt;/p&gt;

&lt;/div&gt;
</description>
    </item>
    <item rdf:about="https://wiki.oxwall.com/dev:faq:index">
        <dc:format>text/html</dc:format>
        <dc:date>2012-10-24T11:07:16+00:00</dc:date>
        <title>Developer FAQ</title>
        <link>https://wiki.oxwall.com/dev:faq:index</link>
        <description>
&lt;h3 class=&quot;sectionedit1&quot; id=&quot;developer-faq&quot;&gt;Developer FAQ&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;ul&gt;
&lt;li class=&quot;level1&quot;&gt;&lt;div class=&quot;li&quot;&gt; &lt;a href=&quot;https://wiki.oxwall.com/dev:faq:how-to-paste-my-custom-php-code-to-index.php-file&quot; class=&quot;wikilink1&quot; title=&quot;dev:faq:how-to-paste-my-custom-php-code-to-index.php-file&quot;&gt;How to paste my custom PHP code to index.php file&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;/div&gt;
</description>
    </item>
    <item rdf:about="https://wiki.oxwall.com/dev:faq:why-do-i-need-the-plugin-key">
        <dc:format>text/html</dc:format>
        <dc:date>2013-03-14T13:23:28+00:00</dc:date>
        <title>Plugin Key</title>
        <link>https://wiki.oxwall.com/dev:faq:why-do-i-need-the-plugin-key</link>
        <description>
&lt;h1 class=&quot;sectionedit1&quot; id=&quot;plugin-key&quot;&gt;Plugin Key&lt;/h1&gt;
&lt;div class=&quot;level1&quot;&gt;

&lt;p&gt;
Plugin key is a special string that uniquely identifies your Oxwall plugin among all others. You can use your company name or any other word that you like for a prefix. Let&amp;#039;s imagine that your company name is “Tron Inc.”. A good plugin key for a chat plugin from you would be &lt;strong&gt;tronchat&lt;/strong&gt;.  
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;Important: It should consist only of Latin alphabetic characters and numbers, and start with a character. **No special characters allowed**.&lt;/pre&gt;

&lt;p&gt;
All plugins should be stored in &lt;strong&gt;ow_plugins&lt;/strong&gt; folder. By default the folder name should also match the plugin key.
&lt;/p&gt;
&lt;pre class=&quot;code&quot;&gt;Important: It is your direct interest to make your plugin key as unique as possible so you don&amp;#039;t have to change your code while submitting your plugin to the Oxwall Store.&lt;/pre&gt;

&lt;/div&gt;
</description>
    </item>
</rdf:RDF>
