Основные действия

Логика основных действий для редактирования данных заложена в ядре системы. Это несколько файлов в папке adm/includes/, которые описаны ниже. Они отвечают за базовые действия по управлению данными в административной части сайта. Это означает, что если создать модуль с простым содержимым, diafan.CMS автоматически подгрузит эти файлы и данными можно будет управлять, используя основные действия.

В diafan.CMS предусмотрены следующие действия:

  • вывод данных в виде списка – файл adm/includes/show.php;

  • редактирование, добавление данных – файл adm/includes/edit.php;

  • сохранение – файл adm/includes/save.php;

  • удаление, удаление в корзину – файл adm/includes/del.php;

  • публикация или скрытие данных – файл adm/includes/act.php;

  • сортировка – файл adm/includes/order.php;

  • обработка Ajax запросов – файл adm/includes/ajax.php.

Этих действий обычно достаточно, чтобы управлять большинством наборов данных. Например, нужно создать модуль по управлению персоналом. Это будет таблица сотрудников с фамилиями. Создавая модуль, достаточно сделать таблицу сотрудников в БД, и базовый функционал сразу автоматически позволит: выводить список сотрудников, добавлять новых, редактировать имеющихся, удалять, сортировать, скрывать выборочных.

В файле модуля можно использовать как стандартный функционал действий, так и расширить и даже полностью переопределить на свои действия.

Рассмотрим как это можно сделать.

Формирование списка

При открытии модуля вызывается функция show_module(), определенная в каждом классе администрирования модуля. В этой функции можно заложить свое представление страницы администрирования модуля, можно вызвать стандартную функцию, формирующую список элементов таблицы модуля:

$this->list_row();

Перед вызовом функции можно определить переменные класса $this->name и $this->where:

  • name – название переменной, используемой в качестве ссылки на элемент;

  • where – условие для SQL запроса.

Настройки вывода списка закладываются в переменную $this->config_module, определенную в файле модуля.

В список можно добавить свои колонки. Для этого определяется массив $this->config_other_row с названиями дополнительных полей для отображения.

Для каждого из полей можно определить пользовательскую функцию, которая будет выводить ячейку таблицы. Формат пользовательской функции:  other_row_переменная($row), где $row  – массив данных об элементе текущей строки таблицы.

Редактирование, добавление

Если в URL страницы передана переменная edit или addnew, то подключается функция edit_module() из файла adm/includes/edit.php. Функция генерирует форму редактирования на основе массива $this->variable_table, определенного в классе модуля.

Функцию можно переопределить в классе модуля.

Также дополнить редактирование полей своим представлением вывода. Для этого в классе модуля определяется функция edit_переменная_module() или  edit_переменная_module_config() для файла настроек.

Пользовательская функция вызывается всегда, если она определена, независимо от типа переменной, указанного в массиве $this->variable_table . Исключение составляет тип module.

Некоторые пользовательские функции редактирования полей определены в файле adm/includes/edit.php. Например, редактирование ЧПУ, сортировки, раздела сайта и пр. Их также можно переопределить в классе модуля.

Некоторые модули, агрегируют информацию об элементах других модулей. И при редактировании последних, нужно чтобы связанная информация также редактировалась.

Например, при редактировании новости нужно редактировать прикрепленные изображения и теги.

Для этого в модулях-подключения нужно создать файл modules/модуль/admin/модуль.admin.edit.php. В файле должен быть определен класс Модуль_admin_edit со статичной функцией edit или edit_config для файла настроек.

string edit (object $th) – редактирует элементы модуля, связанные с другими элементами.

  • access: protected

  • object $th: класс редактирование

string edit_config (object $th) – редактирует настройку модуля для другого модуля.

  • access: protected

  • object $th: класс редактирование

Затем в основном модуле (в примере это модуль новости) в таблице $this->variable_table  нужно указать переменную, названную также как модуль-подключение и задать ей тип module.

Пример:
$this->variable_table['images'] = 'module';

Сохранение

Если в URL страницы передана переменная save или savenew, то подключается функция save_module() из файла adm/includes/save.php. Функция сохраняет данные из формы на основе массива  $this->variable_table, определенного в классе модуля.

Функцию можно переопределить в классе модуля.

Также дополнить сохранение полей своей обработкой. Для этого в классе модуля определяется функция save_переменная_module() или save_переменная_module_config() для файла настроек.

Функция определяет:

        $this->query[] = "название_поля='%f'";
        
$this->value[] = "значение_поля"

Для определения маски обратитесь к разделу «Базы данных».

Пользовательская функция вызывается всегда, если она определена, независимо от типа переменной, указанного в массиве $this->variable_table. Исключение составляет тип module.

Некоторые пользовательские функции редактирования полей определены в файле adm/includes/save.php. Например, время редактирования, сортировка, ЧПУ и пр. Их также можно переопределить в классе модуля.

Некоторые пользовательские функции редактирования полей определены в файле adm/includes/edit.php. Например, редактирование ЧПУ, сортировки, раздела сайта и пр. Их также можно переопределить в классе модуля.

Некоторые модули, агрегируют информацию об элементах других модулей. И при сохранении последних, нужно чтобы связанная информация также сохранялась.

Например, при сохранении новости нужно сохранять информацию о ссылках в меню на новость.

Для этого в модулях-подключения нужно создать файл modules/модуль/admin/модуль.admin.save.php. В файле должен быть определен класс Модуль_admin_save со статичной функцией save или save_config для файла настроек.

string save (object $th) – сохраняет элементы модуля, связанные с другими элементами.

  • access: protected

  • object $th: класс редактирование

string save_config (object $th) – сохраняет настройку модуля для другого модуля.

  • access: protected

  • object $th: класс редактирование

Затем в основном модуле (в примере это модуль новости) в таблице $this->variable_table  нужно указать переменную, названную также как модуль-подключение и задать ей тип module.

Пример:
$this->variable_table['menu'] = 'module';

Удаление, удаление в корзину

При удалении элемента или нескольких элементов модуля подключается функция del_module() из файла adm/includes/del.php.

Эту функцию можно переопределить в классе модуля.

Кроме того, если в классе модуля определена функция delete($del_id$trash_id), то помимо заложенных в ядре действий она выполняется для каждого удаляемого элемента.

Надо учитывать, что если элементы удаляются в корзину, то сопутствующие им элементы тоже должны быть удалены в корзину. Поэтому вместо прямого SQL запроса на удаление лучше использовать функцию del_or_trash_where, определенную в файле adm/includes/del.php.

Пример:

При удалении товара нужно удалять его цены. Для этого в классе Shop_admin файла modules/shop/shop.admin.php определяем функцию:

protected function delete($del_id$trash_id)
{
    
$this->del_or_trash_where("shop_price""good_id=".$del_id$trash_id);
    return 
TRUE;
}

Некоторые модули, агрегируют информацию об элементах других модулей. И при удалении последних, нужно чтобы связанная информация также удалялась.

Например, при удалении товара нужно удалять ссылку в меню на него и комментарии о товаре.

Для этого в модулях-подключения нужно создать файл modules/модуль/admin/модуль.admin.del.php. В файле должен быть определен класс Модуль_admin_del со статичной функцией delete.

string delete (object $th, string $module_name, integer $element_id, [integer $trash_id = 0], [boolean $is_category = FALSE]) – удаляет элементы модуля, связанные с другими элементами.

  • access: protected

  • object $th: класс удаление

  • string $module_name: название модуля, элемент которого удаляется

  • integer $element_id: номер удаляемого элемента

  • integer $trash_id: номер записи в корзине, с которой связано удаление

  • integer $is_category: удаляемый элемент - категория

Блокирование, разблокирование

При удалении элемента или нескольких элементов модуля подключается функция act_module() из файла adm/includes/act.php.

Эту функцию можно переопределить в классе модуля.

Некоторые модули, агрегируют информацию об элементах других модулей. И при блокировании последних, нужно чтобы связанная информация также блокировалась.

Например, при блокировании страницы сайта нужно блокировать пункт меню, связанный с ней.

Для этого в модулях-подключения нужно создать файл modules/модуль/admin/модуль.admin.act.php. В файле должен быть определен класс Модуль_admin_act со статичной функцией act.

string delete (object $th, string $table, array $element_ids, integer $act) – блокирует / разблокирует элементы модуля, связанные с другими элементами.

  • access: protected

  • object $th: класс блокирование / разблокирование

  • string string $table таблица

  • array $element_ids: номера блокируемого / разблокируемого элементов

  • integer $act: блокировать/разблокировать

Сортировка

При сортировки элементов подключается функция sort_module() из файла adm/includes/sort.php.

Эту функцию можно переопределить в классе модуля.

Обработка Ajax запросов

Некоторые запросы требуют специальной обработки. Например, подгрузка списка дерева сайта при редактировании родителя страницы. Эта обработка происходит в файле adm/includes/ajax.php.

Если нужно производить обработку Ajax запросов в модуле, то создается файл modules/модуль/admin/модуль.admin.ajax.php. В файле описывается класс Модуль_admin_ajax. Обработка данных производится в конструкторе модуля. Для того, чтобы система подключила файл, нужно отправить переменную $_POST["module"] = 'модуль';



Не понятно? Уточните