В самом примитивном варианте модуль из себя представляет просто файл с php кодом который по сути практически никак не взаимодействует с системой.
Однако, это не самый хороший вариант. Допустим, у вас имеется input модуль который привязан к какой - либо категории. Пусть это будет модуль простых текстовых документов. Все свои документы модуль кладет в SQL таблицу.
Предположим, что ползователь удаляет эту категорию. Что должно произойти ? По логике одновременно из таблицы должны удалиться те документы которие принадлежат этой категории. Однако, wебгоороо сам не может этого сделать, так как он не имеет никакого представления о том как организовано хранение данных в этом модуле. Т.е. ваш модуль должен содержать некий код который wебгоороо попытается вызвать при удалении категории.
Именно это эти системные вызовы мы и разберем в этом разделе.
Отметим, что все это необязательно, т.е ваш модуль может ничего этого не уметь.
Что хорошо бы уметь input модулю:
а) При удалении категории модулю нужно удалить content этой категории
b) Все действия с объектами модуля класть в системный Лог
c) Искать по своему содержанию .
d) Копировать свой content в другую аналогичную категорию
e) Иметь схему управления доступами к своему содержанию
f) Класть в дерево кол-во своих элементов
g) Делать список своих элементов и crosslink на них для механизма "Set crosslink"
Output модулю:
h) Поддерживать debug mode <CROSSLINK>
i) Уметь генерировать HTML версию своего содержания для сайтов с возможностью создать HТМL версию.
Для всех модулей:
j) Модуль должен уметь удалить себя из системы.
Теперь рассмотрим более подробно:
а ) При удалении категории wебгоороо определяет инпут модуль этой категории и ищет в директории модуля файл "wbg_delete_content.php" и делает ему include.
При этом туда передается massiv $TARGET даннымы той категории, которую мы сейчас удаляем.
Пример файла:
<?php
if (!defined("WBG_CONFIG_LOADED") OR !$DELETE_ALLOWED){
die();
}
$SQL_str = "DELETE FROM _mod_partners WHERE category_id=".$TARGET['id'];
mysql_query($SQL_str);
?>
Как вы видите перед виполнением кода нам нужно обязательно проверить действительно ли файлу сделан include из системы. Иначе его могли бы запустить прямым линком www.site.com/wbg/modules/input/mymodule/wbg_delete_content.php и что-нибудь хорошее потерять.
b) Описание работы с ЛОГом тут <CROSSLINK>
c) Поиск по содержанию не является частью ядра системы, поэтому вы можете организовать его по своему усмотрению. Тем не менее, тут описание как мы организовываем поиск по сайту <CROSSLINK>
д) Когда wебгоороо копирует категории, то ищется файл wbg_copy_content.php и туда передается 2 массива $SOURCE i $TARGET.
Пример файла:
<?php
if (!defined("WBG_CONFIG_LOADED") OR !$COPY_ALLOWED){
die();
}
$SQL_str = "SELECT * FROM _mod_partners WHERE category_id=".$SOURCE['id']."";
$sql_res = mysql_query($SQL_str);
while ($arr = mysql_fetch_assoc($sql_res)) {
$SQL_str = array();
foreach ($arr as $key=>$value) {
if ($key == 'id') continue;
if ($key == 'category_id') continue;
$SQL_str[] = $key."='".addslashes($value)."'";
}
$SQL_str[] = "category_id=".$TARGET['id']."";
$SQL_str = "INSERT INTO _mod_partners SET ".implode(',',$SQL_str)."";
mysql_query($SQL_str);
}
?>
Модули
Документы раздела