Список изменений в билде
1. Модуль "Формы" - добавлен валидатор полей форм
В модуль "Формы" встроен валидатор проверок полей формы. Администратор может создать собственные валидаторы. Валидаторы базируются на соответствие введенного пользователем значения формы регекс выражению.
2. Модуль "Формы" - добавлены обязательные для заполнения поля
В модуль "Формы" добавлена возможность указания обязательных для заполнения пользователем полей.
3. Модуль "Формы" - изменен принцип валидации значений
Валидация поля используется в двух ситуациях:
- "Контроль обязательных к заполнению данных". Производится при статусе поля "обязательно для заполнения". Проверки: заполненность данных; валидация, в случае наличия валидатора.
- "Проверка на ошибочность заполнения поля пользователем": Производится при отсутствии статуса "обязательно для заполнения". Проверки: валидация данных, в случае заполнения поля пользователем и наличии валидатора.
4. Добавлена возможность логизирования запросов к БД
Для возможности оптимизации работы модулей разработчиками и выявления медленных запросов к БД введена возможность логизирования запросов. Для активиации лога к базе данных, необходимо в модуле определить функцию debugAvalible()
public function debugAvalible () {
return true;
}
Для активации лога БД в системе, в config.ini установить параметр sql_debug_log=on
5. Улучшена работа с БД на хостингах с ограниченными ресурсами
Для площадок с ограниченными ресурсами введена возможность использования непостоянных соединений с БД (по-умолчанию включены постоянные соединения). Для активации опции необходимо установить параметр db_pconnect=N в config.ini
6. Исправлено отображение пути установки
В 3-ем шаге инсталляции исправлено некорректное отображение путей к папкам, расположенным в публичной директории.
7. Парсинг переменной {theme}
Добавлен парсинг переменной {theme} в шаблонах видов модулей, хранящей в себе путь к теме текущего шалобна.
8. Откорректировано добавление шаблонов в систему
Ранее, при добавлении шаблона, идентичного по содержанию (дубликат), существующему в системе, но отличному по названию, система удаляла дубликат. По просьбе пользователей данная функция была отключена. Теперь при попытке загрузки в систему шаблона аналогичного по содержанию, но с отличным названием, выводится предупреждение с просьбой изменить содержимое шаблона.
9. Расширены возможности ввода параметров вида модуля
Добавлена возможность указания условий WHERE для вида модуля, при его привязке к странице.
Синтаксис:
forms.form_id:forms.reserved<>"true"|forms.form_id<>1@form_id=form_name=Выберите форму:
Условия для WHERE: forms.reserved<>"true"|forms.form_id<>1 (часть между двоеточием и @). 2) Выбрать все формы, кроме форм с типом reserved
При наличии нескольких услвовий, необходимо использовать разделитель условий - вертикальный слеш |
Примеры:
1) Выбрать все формы:
forms.form_id@form_id=form_name=Выберите форму:
forms.form_id:forms.reserved<>"true"@form_id=form_name=Выберите форму:
3) Выбрать все формы, кроме форм с типом reserved и id которых не равен 1
forms.form_id:forms.reserved<>"true"|forms.form_id<>1@form_id=form_name=Выберите форму:
self::getFormContents($form_type=false, $show_title=false)
self::checkFormContents($form_type=false, $show_title=false, $text)
public function fieldValidation($field_type, $field_value){
return array (validate => true [,message => ""]);
}
private $city_title;
public function fieldValidation($field_type, $field_value){
// Если не передано название поля или у поля пустое значение
if($field_type==NULL || $field_value==NULL) $callback['validate'] = false;
// Устанавливаем первичный флаг валидации
$callback['validate'] = true;
if($field_type=="city_title") {
$contents = $this->database->sqlParse("SELECT city_title FROM cities WHERE city_title=?", $field_value);
if($contents[0]==NULL) $callback['validate'] = true;
else $callback['validate'] = false;
}
$callback['message'] = "Город <b>".htmlspecialchars($field_value)."</b> уже есть в базе.";
return $callback;
}
public function onExecute($param_str) {
// Подгружаем управляющий модуль "Формы"
$forms = handyCore::loadExtension ( 'ext.forms' );
if($_POST) {
// Текст, добавляемый перед данными из формы
$text = "Добавленный город:\n";
// $form_data хранит значения всех заполненных пользователем полей,
// при этом к полям, имеющим системное имя можно обращаться как к ключу
// $form_data[form_type]
$form_data = $forms->checkFormContents("cities", true, $text);
// Присваиваем значение системного поля city_title переменной
$this->city_title = $form_data['city_title']
if($form_data['form_data']['form_fields']!=NULL) {
// Действия модуля с формой
// Например внесение данных в БД
$this->database ->sqlParse('INSERT INTO cities SET city_title=?', $this->city_title);
}
} else {
if($form_data = $forms->getFormContents("cities", true))){
} else $error = "cities_form_not_found";
}
return array (
'form' => $form_data['contents'],
'template' => 'users_registration.tpl',
'error' => $error
);
}
self::setExtSettings($ext, $array)
self::getExtSettings($ext)
// Устанавливаем значение сеттингов
$this->setExtSettings("subscribe", $_POST['extensions_settings_id']);
// Получаем значение сеттингов
$settings = $this->getExtSettings("subscribe");
$this -> smarty -> assign ('subscribe_settings', $settings);
<table border="0" cellpadding="0" cellspacing="0" width="100%">
{section loop=$subscribe_settings name=i} <tr>
<td nowrap>{$subscribe_settings[i].setting_title|escape}</td>
<td><img src="$theme/p.gif" width=10 height=1></td>
<td width="100%"><input type="text" name="extensions_settings_id[{$subscribe_settings[i].extensions_settings_id}]" value="{$subscribe_settings[i].setting_value|escape}" class="input100persent" /></td>
</tr>
{/section}
</table>
<rule>
<namespace>active</namespace>
<tag>form</tag>
</rule>
handyCore::loadExtension ( 'ext.sitemanager' )->getPageSettings([$key]);
handyCore::loadExtension ( 'ext.sitemanager' )->setPageSettings($key, $value);
// получить данные по всем шаблонам модуля
$this->getTemplates();
// получить название файла шаблона
$this->getTemplate($id);
22. Шаблоны и стили для модуля "Формы"
Добавлена возможность задавать различные шаблоны вывода для форм.
Кроме того, для каждого поля формы возможно указать собственный CSS-класс, который будет определять его отображение на странице.
23. Установка и получение шаблонов по-умолчанию
Добавлена функция для установки шаблонов по-умолчанию: setDefaultTemplate($id), где $id - ID шаблона (значение поля extensions_template_id таблицы extensions_templates).
При вызове функции из модуля и передаче ей ID шаблона, данный шаблон устанавливается в качестве шаблона по-умолчанию для модуля (флаг extensions_template_default в значение Y), в случае наличия у другого шаблона данного модуля флага extensions_template_default в значении Y, он сбрасывается на N.
Пример использования:
$this -> setDefaultTemplate($param_str['extensions_template_id']);
$default_template = $this -> getDefaultTemplate();
// Создаем экземпляр класса системы разграничения прав доступа
$this -> right_access_manager = handyCore::loadExtension ( 'kernel.right_access_manager' );
$this->right_access_manager->getLangVersion();