Модули: Настройки (импорт, редактирование, прочее)
Для того, чтобы система понимала с какими настройками модуля себя вести тем или иным способом, в
Fapos CMS используется файл
info.php, который располагается в папке с модулем.
Конкретно нас интересует не весь этот файл, а массив
$settingsInfo. Структура этого массива следующая:
Ключ - имя поля, при редактировании, и идентификатор(ключ) параметра в конфиге
Значение - массив параметров. Именно, благодаря этим параметрам, система и понимает какое поле надо построить для этой настройки, как его обработать, при сохранении и т.д.
Рассмотрим возможные параметры:
type - тип поля(file, text, select, checkbox)
title - видимый заголовок поля(в начале можно сделать приставку "sub_", она автоматически обрежется. Это сделано из того расчета, что в массиве не может быть идентичных ключей. Но допустим у вас есть настройки первого уровня и есть субмассив с настройками, имеющими такие имена, как уже есть. Вот тут и пригодится приставка "sub_")
description - описание поля(под заголовком)
help - справка к полю(справа)
value - значение поля
checked - определяет какое значение должно быть у поля типа checkbox для того, чтобы оно было выделено(checked)
fields - используется для указания ключа массива настроек. допустим, у вас есть ряд настроек, который должен быть в отдельном субмассиве, тогда у всех этих настроек этот параметр должен совпадать.
attr - массив дополнительных атрибутов тега input(любые)
options - массив. если type = select, определяет список опций для выбора
onsave - массив. Определяет действия над значением перед сохранением.
onview - массив. Определяет действия над значением перед выводом.
input_sufix_func - определяет функцию, которая возвратит данные для показа сразу за полем ввода(т.н. input_sufix).
Возможные значения в onsave
multiply - Умножение. В качестве значения передается число.
func - При исползовании полей типа file, необходимо использовать свою функцию для операций над файлом. Для этого и существует этот ключ.
Возможные значения в onview
division - Деление. В качестве значения передается число.
Примеры attr
<?php
'attr' => array(
'disabled' => 'disabled',
'checked' => 'checked',
),
?>
Вспомогательные функции
Функции, для указания в параметрах
input_sufix_func и
onsave[func] желательн создавать прямо в файле
info.php, но обязательным это условие не является. Главное, чтобы они были доступны, когда будет происходить их вызов. Всем функциям передается один параметр - массив всех настроек из конфигурационного файла.
Пример функции для func
<?php function fotoSaveWaterMark($settings)
{
if ($_FILES['watermark_img']['type'] == 'image/jpg'
|| $_FILES['watermark_img']['type'] == 'image/gif'
|| $_FILES['watermark_img']['type'] == 'image/jpeg'
|| $_FILES['watermark_img']['type'] == 'image/png') {
$ext = strchr($_FILES['watermark_img']['name'], '.');
if (move_uploaded_file($_FILES['watermark_img']['tmp_name'], ROOT . '/sys/img/watermark'.$ext)) {
$settings['foto']['watermark_img'] = 'watermark'.$ext;
}
}
}
?>
Пример функции для input_sufix_func
<?php function fotoShowWaterMarkImage($settings)
{
$params = array(
'style' => 'max-width:200px; max-height:200px;',
);
if (!empty($settings['foto']['watermark_img'])
&& file_exists(ROOT . '/sys/img/' . $settings['foto']['watermark_img'])) {
return get_img('/sys/img/' . $settings['foto']['watermark_img'], $params);
}
return '';
}
?>
Пример описания свойств настроек
<?php
$settingsInfo = array(
'title' => array(
'type' => 'text',
'title' => 'Заголовок',
'description' => 'Заголовок, который подставится в блок <title></title>',
),
'max_file_size' => array(
'type' => 'text',
'title' => 'Максимальный размер картинки',
'description' => '',
'help' => 'Байт',
),
'file_field' => array(
'type' => 'checkbox',
'title' => 'Файл',
'attr' => array(
'disabled' => 'disabled',
'checked' => 'checked',
),
),
'use_watermarks' => array(
'type' => 'checkbox',
'title' => 'Водяные знаки',
'value' => '1',
'checked' => '1',
),
'watermark_img' => array(
'type' => 'file',
'title' => 'Водяной знак',
'input_sufix_func' => 'fotoShowWaterMarkImage',
'onsave' => array(
'func' => 'fotoSaveWaterMark',
),
),
);
?>
Итоги:
На первый взгляд, все как-то запутанно, но если вы задумали написать модуль, то поверьте, большая часть всего этого вам не понадобится. На пример создание своих функций, это очень редко может быть полезным. За то не надо клонировать страници в админке)