Наверх

Администрирование модуля

Файл администрирования модуля – это файл modules/модуль/admin/имя_модуля.admin.php, в котором определен класс Имя_модуля_admin. Этот класс построен на основе единого каркаса, поэтому должен наследовать класс Frame_admin.

Если модуль имеет несколько частей, то административная часть модуля может содержать и другие файлы modules/модуль/admin/имя_модуля.admin.часть.php, где описан класс имя_модуля_admin_часть.

Свойства класса могут определять следующие переменные-настройки:

1. Название таблицы:

public $table = 'имя_таблицы_в_БД';

2. Описание полей:

public $variables = array (
    
'название_группы_полей_1_латинскими_буквами' => array (
        
'название_поля_1_латинскими_буквами' => array(
            
'type' => 'тип_поля',
            
'name' => 'Название_поля_русскими_буквами',
            
'help' => 'Подсказка',

            
// поле переводится на другие языки
            
'multilang' => true,

            
// значение по умолчанию
            
'default' => 'значение',

            
// поле нельзя отредактировать
            
'disabled' => true,

            
// не сохранять значение
            
'no_save' => true,

            
// высота поля визуального редактора
            
'height' => 400,

            
// значения для списка type=select
            
'select' => array(
                
"значение1" => "отображение1",
                
"значение2" => "отображение2",
                

            
),

            
// значения для списка получается из базы данных
            
'select_db' => array(
                
"table" => "название таблицы в базе данных",
                
"id" => "поле, которое используется в качестве значений списка, по умолчанию id",

                
// для мультиязычных полей можно использовать квадратный скобки
                // пример: [text]
                
"name" => "поле, которое используется для отображения пользователю в списке, по умолчанию name",

                
// пример: "trash='0' AND [act]='1'"
                
"where" => "условие для SQL-запроса"

                
// пример: sort ASC
                
"order" => "сортировка",

                
// пример: "Все"
                // если не задано, то пустое значение невозможно будет в списке выбрать
                
"empty" => "пустое значение в списке",

                
// значения будут выстроены с учетом вложенности
                
"hierarchy" => true|false,
                

            
),

            
// поле выводиться, если отмечено поле, указанное в depend
            // можно указать несколько полей через "," или "|"
            // разделитель "," означает, что для показа поля должны быть
            // отмечены все из указанных полей
            // разделитель "|" означает, что для показа поля должно быть
            // отмечено хотя бы одно из указанных полей
            
'depend' => 'влияющие_на_вывод_поле',
        ),
        
'название_поля_2_латинскими_буквами' => array(
            

        
),
        
// сокращенная форма
        
'название_поля_3_латинскими_буквами' => 'тип_поля',
        

    
),
    
'название_группы_полей_2_латинскими_буквами' => array (
        

    
),
    

    
// группа дополнительных полей
    
'other_rows' => array (
        

    
),
);

Определены следующие типы:

  • text – строка;
  • password – пароль;
  • numtext – число;
  • floattext – число с плавающей точкой;
  • checkbox – переменная с двумя значениями (1,0);
  • select – список (для использования типа необходимо определить атрибут select или select_db);
  • date – дата (значение выводится в формате dd.mm.yyyy, сохраняется в формате UNIX);
  • datetime – дата и время (значение выводится в формате dd.mm.yyyy hh:mm, сохраняется в формате UNIX);
  • textarea – текстовое поле типа textarea;
  • editor – текстовое поле с визуальным редактором;
  • title – заголовок;
  • none – при редактировании не выводится, но значение сохраняется (можно использовать с пользовательской функцией);
  • module – обозначаются поля, к которым подключены другие модули;
  • function – обозначаются поля, к которым подключены пользовательские функции (подключаются также к любому другому типу кроме module);
  • hr – выводит горизонтальную полосу на странице редактирования, при сохранении не учитывается.

Для удобного доступа к массиву $variables определены следующие функции:

  • variable ([string $key = ''], [string $type_info = 'type'], [mixed $value = NULL]) – возвращает, назначает информацию о поле.

    • string $key – название переменной. Если не задано, то используется переменная текущей итерации цикла (при сохранении и редактировании);
    • string $type_info – тип информации (type, name, multilang, disabled, default и др.);
    • mixed $value – значение. Если задано, то значение переопределяется.

    Пример:

    if($this->diafan->variable('name') == 'editor')
    {
        echo
    'Поле name редактируется с помощью визуального редактора.';
    }
    if(
    $this->diafan->variable('type', 'multilang'))
    {
        echo
    'Значение поля type переводится на другие языки.';
    }
    // запрещаем редактирование значения поля role_id
    $this->diafan->variable('role_id', 'disabled', true);
  • is_variable (string $key) – возвращает, определена ли переменная в списке полей.

    • string $key – название переменной.

    Пример:

    if($this->diafan->is_variable('act'))
    {
        echo
    'Поле act определено в списке полей.';
    }
  • variable_unset (string $key) – удаляет переменную из списка полей.

    • string $key – название переменной.

    Пример:

    // удаляем поле site_id из списка полей
    $this->diafan->variable_unset('site_id');
  • variable_name ([string $key = '']) – возвращает название поля.

    • string $key – название переменной. Если не задано, то используется переменная текущей итерации цикла (при сохранении и редактировании).

    Пример:

    echo 'Название текущего поля: '.$this->diafan->variable_name();
    echo
    'Название поля role_id: '.$this->diafan->variable_name('role_id');
  • variable_multilang ([string $key = '']) – определяет, является ли поле мультиязычным.

    • string $key – название переменной. Если не задано, то используется переменная текущей итерации цикла (при сохранении и редактировании).

    Пример:

    if($this->diafan->variable_multilang('name'))
    {
        echo
    'Значение поля name переводится на другие языки.';
    }
  • variable_disabled ([string $key = ''], [boolean $value = NULL]) – возвращает, назначает атрибут disabled для переменной.

    • string $key – название переменной. Если не задано, то используется переменная текущей итерации цикла (при сохранении и редактировании);
    • boolean $value – значение. Если задано, то значение переопределяется.

    Пример:

    if($this->diafan->variable_disabled('counter'))
    {
        echo
    'Поле counter нельзя отредактировать.';
    }
    // запрещаем редактировать поле created
    $this->diafan->variable_disabled('created', true);

3. Настройки отображения:

public $config – настройка отображения списка значений:

  • category – использование категорий в модуле (отдельная таблица {таблица_category}); часть с категориями;
  • category_flat – категории элементов модуля не содержат вложенностей;
  • category_no_empty – категория всегда выбрана;
  • category_no_multilang – имя категории не переводится;
  • category_rel – работают вместе с таблицей {модуль_category_rel};
  • config – файл настроек модуля;
  • element – использование категорий в модуле (отдельная таблица {таблица_category}); часть с элементами;
  • element_multiple – элемент может быть прикреплен к нескольким категориям;
  • element_site – использование разделов (если модуль может быть подключен к нескольким станицам);
  • link_to_element – основная ссылка ведет к списку элементов, принадлежащих категории;
  • multiupload – мультизагрузка изображений (подключение JS-библиотек);
  • only_self – показывать только материалы редактора, если это задано в правах пользователя;
  • tab_card – использование вкладок.

Формат:

public $config = array(
    
'переменная',
    

);

Настройки доступны через функцию $this->diafan->config("название");.

Этой функцией можно выключить или отключить настройку отображения. Формат:

$this->diafan->config("название", true|false);

4. Настройки для формирования списка элементов:

public $where – дополнительное условие для SQL-запроса к базе данных.

Пример:

В административной части список комментариев должен формироваться только из неактивных комментариев.

public $where = " AND act='0'";

public $join – часть SQL-запроса - соединение с таблицей.

Пример:

В заказах ищем по имени пользователя, оформившего заказ.

$search = 'Иван';
$this->diafan->join .= " LEFT JOIN {users} AS u ON u.id=e.user_id";
$this->diafan->where .= " AND u.fio LIKE '%%".$search."%%'";

public $fields – часть SQL-запроса - дополнительные столбцы.

Пример:

Для новостей дополнительно получим значение ключевых слов.

$this->diafan->fields .= ", e.[keywords]";

5. Поля для формирования списка элементов

public $variables_list – массив полей для отображения в списке.

Формат:

public $variables_list = array (
    
'название_поля_1_латинскими_буквами' => array(
        
'type' => 'тип_поля',
        
'name' => 'название_столбца_в_шапке_списка',
        
'class' => 'CSS-класс',
        
'class_th' => 'CSS-класс_для_столбца_в_шапке_списка',

        
// редактирование значение прямо из списка
        
'fast_edit' => true|false,

        
// значение будет скрыто на узких экранах
        
'no_important' => true|false,

        
// значение берется из базы данных, подставляется в SQL-запрос
        
'sql' => true|false,

        
// значения для списка type=select
        
'select' => array(
            
"значение1" => "отображение1",
            
"значение2" => "отображение2",
            

        
),

        
// значения для списка type=select получается из базы данных
        
'select_db' => array(
            
"table" => "название таблицы в базе данных",
            
"id" => "поле, которое используется в качестве значений списка, по умолчанию id",

            
// для мультиязычных полей можно использовать квадратный скобки
            // пример: [text]
            
"name" => "поле, которое используется для отображения пользователю, по умолчанию name",

            
// пример: "trash='0' AND [act]='1'"
            
"where" => "условие для SQL-запроса",

            
// пример: "Все"
            
"empty" => "пустое значение в списке",
            

        
),

        
// любые другие атрибуты, которые могут быть использованы в пользовательских функциях
    
),
    
'название_поля_2_латинскими_буквами' => array(
        

    
),
    

);

Определены следующие типы:

  • function – вывод осуществляется пользовательской функцией;
  • select – значения списка определяется атрибутами select или select_db. Если атрибуты не заданы, то значения списка получаются из одноименных атрибутов соответствующей переменной из массива $variables;
  • text – строка;
  • textarea (или editor) – текст;
  • numtext – число;
  • floattext – число с плавающей точкой;
  • none – в списке не выводиться. Обычно выводиться с атрибутом 'sql' => true и используется в пользовательской функции другой переменной.

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

В файле adm/includes/show.php описаны некоторые глобальные пользовательские функции, любую из которых можно переопределить в файле модуля. Глобальные функции list_variable_*() описаны для следующих переменных:

  • checkbox – выводит чекбокс для групповых операций. Выводится в самом начале списка

Пример:

public $variables_list = array (
    
'checkbox' => '',
    
// …
);
  • sort – выводит кнопку «Перетащить» в списке элементов

Пример:

public $variables_list = array (
    
'sort' => array(
        
'name' => 'Сортировка',
        
'type' => 'numtext',
        
'sql' => true,
        
'fast_edit' => true,
        
'desc' => true,
    ),
);
  • plus – выводит ссылку на раскрытие дерева

Пример:

public $variables_list = array (
    
'plus' => '',
);
  • created – выводит дату в списке

Пример:

public $variables_list = array (
    
'created' => array(
        
// название столбца в шапке списка
        
'name' => 'Дата и время',
        
// тип может быть date или datetime
        
'type' => 'datetime',
        
// для отображения даты нужно ее запросить в базе данных
        
'sql' => true,
        
// значение будет скрыто на узком экране
        
'no_important' => true,
    ),
);
  • image – выводит изображение в списке

Пример:

public $variables_list = array (
    
'image' => array(
        
// название столбца в шапке списка
        
'name' => 'Фото',
        
// CSS-класс для столбца в шапке списка
        
'class_th' => 'item__th_image ipad',
        
// значение будет скрыто на узком экране
        
'no_important' => true,
    ),
);
  • name – выводит название элемента и ссылку на редактирование в списке элементов.

Пример:

public $variables_list = array (
    
'name' => array(
        
// название столбца в шапке списка
        
'name' => 'Название и категория'
        
// по умолчанию name
        
'variable' => 'Название_поля_в_базе_данных',
        
// по умолчанию не используется
        
'text' => 'Текст',
    ),
);

Если задано поле, то для ссылки используется значение этого поля. Мультиязычность поля определяется по массиву $variables.

Пример:

В модуле «Комментарии» для ссылки нужно использовать текст комментария. В файле modules/comments/admin/comments.admin.php:

public $variables_list = array (
    
'name' => array(
        
'name' => 'Комментарий',
        
'variable' => 'text',
    ),
);

Если указан атрибут text, то текст ссылки будет определяться этим значением.

Пример:

В модуле «Рейтинг» в основной таблице нет информации, которую можно использовать для ссылки, поэтому выводим «Редактировать». В файле modules/rating/admin/rating.admin.php:

public $variables_list = array (
    
'name' => array(
        
'text' => 'Редактировать',
    ),
);

Можно в текст подставить значение поля. Для этого в тексте указываем описатель типа.

Пример:

В модуле «Магазин – Заказы» для ссылки нужно выводить «Заказ № 1, 2, ...». В файле modules/shop/admin/shop.admin.order.php:

public $variables_list = array (
    
'name' => array(
        
'name' => 'Заказ',
        
'variable' => 'id',
        
'text' => '№ %d'
    
),
);
  • menu – выводит иконку меню в списке. Функция list_variable_menu() вызывается из list_variable_name(), но может использоваться непосредственно в списке.

  • parent – выводит название раздела/категории в списке. Функция list_variable_parent() вызывается из list_variable_name() и выводит категории и разделы под названием элемента, но может использоваться непосредственно в списке.

  • adapt – выводит верстку для адаптации под мобильный устройства в списке элементов

Пример:

public $variables_list = array (
    
'adapt' => array(
        
'class_th' => 'item__th_adapt',
    ),
);
  • date_period – выводит период показа. Функция list_variable_date_period() вызывается из list_variable_name() и выводит ограничение по времени показа под названием элемента, но может использоваться непосредственно в списке.

  • actions – выводит кнопки действий над элементом. Выводится в самом конце списка. Эта функция имеет собственные атрибуты-настройки для вывода нужных действий:

    • act – выводит кнопку «Сделать неактивным / Опубликовать на сайте»
    • view – выводит кнопку «Посмотреть на сайте»;
    • add – выводит кнопку «Добавить подстраницу»;
    • del – выводит кнопку «Удалить»;
    • trash – выводит кнопку «Удалить в корзину».

Пример:

// выведем в списке кнопки удаления в корзину и публикации на сайте
public $variables_list = array (
    
// …
    
'actions' => array(
        
'act' => true,
        
'trash' => true,
    ),
);

Для удобного доступа к массиву $variables_list определена следующая функция:

  • variable_list ([string $key = ''], [string $type_info = 'type'], [mixed $value = NULL]) – возвращает, назначает информацию о поле в списке.

    • string $key – название переменной;
    • string $type_info – тип информации (type, name, multilang, disabled, default и др.);
    • mixed $value – значение. Если задано, то значение переопределяется.

    Пример:

    if ($this->diafan->variable_list('plus'))
    {
        echo
    'Используется иерархия элементов.';
    }
    if(
    $this->diafan->variable_list('actions', 'trash'))
    {
        echo
    'Выводим кнопку "Удалить в корзину".';
    }
    // скрываем кнопку "Предпросмотр"
    $this->diafan->variable_list('actions', 'view', false);

6. Поля для фильтра

public $variables_filter – массив полей, по которым идет поиск.

Формат:

public $variables_filter = array (
    
'название_поля_1_латинскими_буквами' => array(
        
'type' => 'тип_поля',
        
'name' => 'название_поля/легенда',

        
'icon' => 'иконка_для_типа_checkbox',

        
// значения для типов select, radiobox, multiselect
        
'select' => array(
            
"значение1" => "отображение1",
            
"значение2" => "отображение2",
            

        
),

        
// значения для списка получается из базы данных
        
'select_db' => array(
            
"table" => "название таблицы в базе данных",
            
"id" => "поле, которое используется в качестве значений списка, по умолчанию id",

            
// для мультиязычных полей можно использовать квадратный скобки
            // пример: [text]
            
"name" => "поле, которое используется для отображения пользователю в списке, по умолчанию name",

            
// пример: "trash='0' AND [act]='1'"
            
"where" => "условие для SQL-запроса"

            
// пример: sort ASC
            
"order" => "сортировка",

            
// значения будут выстроены с учетом вложенности
            
"hierarchy" => true|false,
            

        
),

        
// выводить ссылки на временные периоды (Сегодня Месяц Год)
        // для типов datetime_interval и date_interval
        
'links' => true|false,

        
// любые другие атрибуты, которые могут быть использованы в пользовательских функциях
    
),
    
'название_поля_2_латинскими_буквами' => array(
        

    
),
    

);

Определены следующие типы:

  • function – вывод осуществляется пользовательской функцией;
  • select – выпадающий список. Значения списка определяется атрибутами select или select_db. Если атрибуты не заданы, то значения списка получаются из одноименных атрибутов соответствующей переменной из массива $variables или $variables_list;
  • multiselect – список с выбором нескольких значений, выводиться в виде чекбоксов;
  • text – поле для ввода;
  • checkbox – галка-чекбокс;
  • radiobox – выбор одного значения из списка-радиобокс;
  • hr – горизонтальная линия;
  • date – дата;
  • numtext_interval – числовой интервал;
  • datetime_interval – интервал даты и времени;
  • date_interval – интервал даты.

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

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

Пример:

// функция поиска по полю "Нет изображения"
public function save_filter_variable_no_img($row)
{
    if (empty(
$_GET["filter_no_img"]))
    {
        return;
    }

    
// добавляем условие в SQL-запрос
    
$this->diafan->where .= " AND (SELECT COUNT(*) FROM {images} AS i WHERE i.element_id=e.id AND i.element_type='".$this->diafan->element_type()."' AND i.module_name='".$this->diafan->_admin->module."' AND i.param_id=0)=0";

    
// учитываем заданное значение в ссылках пагинации
    
$this->diafan->get_nav .= ($this->diafan->get_nav ? '&' : '?' ).'filter_no_img=1';
    return
1;
}

Для удобного доступа к массиву $variables_filter определена следующая функция:

  • variable_filter ([string $key = ''], [string $type_info = 'type'], [mixed $value = NULL]) – возвращает, назначает информацию о поле в фильтре.
    • string $key – название переменной;
    • string $type_info – тип информации (type, name, multilang, disabled, default и др.);
    • mixed $value – значение. Если задано, то значение переопределяется.

Пример:

if ($this->diafan->variable_filter('article'))
    {
        echo
'В фильтре будет выведено поле для поиска по артикулу.';
    }
    
// добавляем значения списка "Блоки форума" для фильтра
    
$blocks = DB::query_fetch_key_value("SELECT id, name FROM {forum_blocks} WHERE trash='0' ORDER BY sort ASC", "id", "name");
    
$this->diafan->variable_filter('block_id', 'select', $blocks);

7. Прикрепление модуля к нескольким разделам сайта

Для возможности прикрепления модуля к нескольким страницам, необходимо вставить следующий код:

public $variables = array (
    
'любая_группа_полей' => array (
        
'site_id' => array(
            
'type' => 'function',
            
'name' => 'Раздел сайта',
        ),
    ),
);
public
$config = array('element_site', );

8. Значения свойств задаются динамически

Если значения вышеописанных свойств модуля зависят от каких-либо условий, то эти условия описываются в функции prepare_config().

Пример:

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

public function prepare_config()
{
    if(!
$this->diafan->configmodules("cat", "photo", $this->diafan->site))
    {
        
$this->diafan->config("element", false);
        
$this->diafan->config("element_multiple", false);
    }
}

9. Текущие значения

Текущий элемент для действий редактирование (edit), сохранение (save), валидация (validate) в переменной $this->diafan->id. Если элемент новый (при добавлении), то $this->diafan->is_new = true;. При этом при редактировании и валидации $this->diafan->id = 0;.

В пользовательских функциях edit_variable_переменная(), save_variable_переменная(), validate_variable_переменная() текущее значение полей доступно через функцию values().

Пример:

echo 'Название редактируемой новости: '.$this->diafan->values('name');

При валидации и сохранении текущими значениями являются значения до нажатия кнопки «Сохранить».

При редактировании функция values() принимает два дополнительных значения:

mixed values(string $field, [mixed $default = ''], [boolean $save = false]) – получает значение поля.

  • string $field: название поля
  • mixed $default: значение по умолчанию, вернется, если текущее значение не определено
  • boolean $save: запомнить значение по умолчанию, вернет значение по умолчанию при дальнейшем вызове функции

Также существует переменная $this->diafan->value. В ней записано значение для переменной из текущей функции.

Пример:

В функции edit_variable_created() переменная $this->diafan->value будет равняться $this->diafan->values('created').


10. Тип элемента

Для элементов модуля можно определить тип элемента. В стандартной редакции DIAFAN.CMS существует три типа элементов:

  • element – стандартый тип, назначающийся элементу по умолчанию
  • cat – категория
  • brand – производитель

Пример:

Тип элемента используется для записи ЧПУ в таблицу {rewrite} для того, чтобы определить какую страницу модуля открывать – карточку товара, страницу категории или страницу производителя. Или для подключения рейтинга и к категории модуля и к элементам модуля.

Для работы с типом элемента в административной части определены следующие функции.

string element_type() – определяет тип элементов текущей редакции.

Пример:

echo 'Сейчас мы редактируем ':
switch(
$this->diafan->element_type())
{
    case
'cat':
        echo
'категории';
        break;

    case
'brand':
        echo
'производителей';
        break;

    case
'element':
        echo
'элементы модуля';
        break;
}

string table_element_type(string $module_name, string $element_type) – определяет таблицу по типу элемента.

  • string $module_name: модуль
  • string $element_type: тип элемента

Пример:

echo $this->diafan->table_element_type('shop', 'cat');
// вернет: shop_category

11. Проверка текущего действия

string is_action($action) – определяет является ли текущее действие указанным в аргументе.

  • string $action: действие

Пример:

if($this->diafan->is_action('edit'))
{
    echo
'Открыта страница редактирования/добавления элемента.';
}

Ваши комментарии и дополнения

Зарегистрируйтесь или авторизируйтесь для того, чтобы оставить комментарий.