PDA

Просмотр полной версии : Выпущен Handy.CMS 3.1 build 2002


Handy.CMS
22.08.2009, 04:17
Изменения и нововведение в билде 2002

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 (часть между двоеточием и @).
При наличии нескольких услвовий, необходимо использовать разделитель условий - вертикальный слеш |
Примеры:
1) Выбрать все формы:
forms.form_id@form_id=form_name=Выберите форму:
2) Выбрать все формы, кроме форм с типом reserved
forms.form_id:forms.reserved<>"true"@form_id=form_name=Выберите форму:
2) Выбрать все формы, кроме форм с типом reserved и id которых не равен 1
forms.form_id:forms.reserved<>"true"|forms.form_id<>1@form_id=form_name=Выберите форму:

Handy.CMS
23.09.2009, 22:11
10. Модуль "Формы" - возможность использования другими модулям

Модуль "Формы" претерпел революционные изменения, теперь его могут использовать другие модули в собственных целях. Это сделано для удобства создания различных форм и анкет внешними разработчиками и автоматизации профессов проверки, заполнения и отправки данных из форм.

Для использования формы из модуля, необходимо:
1) Установить системное имя формы и статус зарезервированности в таблице forms: значения полей reserved="true" и form_type="системное_имя_на_латинице"

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

Для вызова формы и получение ее содержимого используется функция:




self::getFormContents($form_type=false, $show_title=false), где

form_type - системное имя формы на латинице (значение поля form_type из таблицы базы данных forms)
show_title - отображение названия формы на странице true / false
Для автоматической проверки значений формы и отправки письма:

self::checkFormContents($form_type=false, $show_title=false, $text)




Значения первых двух переменных аналогичны self::getFormContents

$text - текст, добавляемый к письму, при отправке формы
В случае, если у формы установлено одно или несколько полей с системным именем email, оно заполнено пользователем, на данные адреса также будут отправлены письма с данными из формы. Это удобно, в случае, если необходимо уведомлять об успешной отправке формы не только администратора, но и пользователя, дублируя ему информацию.


11. Модуль "Формы" - добавлена возможность валидации полей формы модулем

В случае, если возможностей встроенных правил валидации полей не хватает, в поле field_validation таблицы form_fields можно указать название модуля, который будет вызван для проверки корректности заполненности поля.

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

public function fieldValidation($field_type, $field_value){
return array (validate => true [,message => ""]);



}

$field_type - передается системное имя поля (значение поля form_type из таблицы базы данных forms)
$field_value - передается заполненное пользователем значение
Функция должна вернуть массив, содержащий обязательный ключ validate с значением true - если поле прошло валидацию, false - если не прошло.

Ключ 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
);
}


12. Возможность работы системы на 64-bit машинах
Добавлена возможность работы системы на серверах 64-bit

Список будет пополняться

Handy.CMS
30.09.2009, 20:14
13. Получение значение и внесение изменений в значения настроек модулей
Добавлены функции self::setExtSettings($array[,$ext=false]) и self::getExtSettings([$ext=false])) для более удобного получения настроек из модуля и внесение настроек в модуль.




self::setExtSettings($ext, $array), где

$ext - системное имя модуля (по-умолчанию - имя вызывающего модуля), необходимо указывать, только если мы хотим получить настройки не текущего модуля (не того, из которого происходит вызов метода).
$array - массив со значениями, в котором ключ элемента массива соответствует значению поля extensions_settings_id таблицы БД extensions_settings, а значение - новому значению свойства
self::getExtSettings($ext), где

$ext - системное имя модуля (по-умолчанию - имя вызывающего модуля), необходимо указывать, только если мы хотим получить настройки не текущего модуля (не того, из которого происходит вызов метода).
Таблица extensions_settings содержит следующие поля:

extensions_settings_id - уникальное ID, устанавливается автоматически
extension_sysname - системное название модуля, которому принадлежит поле
setting_name -системное название поля (буквы латинского алфавита, цифры, символ подчеркивания и дефис)
setting_title - Название поля, для вывода в шаблоне
setting_value - Значение поля
setting_dim - тип поля для вывода в шаблоне (сантиметры, пиксели, кг и т.п.), если присутствует.



Пример использования:

Код модуля:

// Устанавливаем значение сеттингов
$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>

Handy.CMS
05.10.2009, 23:46
14. Права доступупа на robots.txt
В систему прав доступа добавлено событие - "Редактирование robots.txt", для возможности запрета изменения robots.txt младшими администраторами и "случайного" запрета сайта к индексации.

Handy.CMS
07.10.2009, 00:27
15. Макросы
Обработчики макросов перенесы в отдельные файлы, для удобства их создания и редактирования. Теперь, для того чтобы создать макрос, необходимо:
1) написать название его тега и пространства имен, если есть в XML-файле списке макросов (см. документацию), например:

<rule>
<namespace>active</namespace>
<tag>form</tag>
</rule>

2) создать файл с обработчиком в папке /handy_framework/lib/replaceprocessor/macros_тип_макроса. При этом название файла должно формироваться следующим образом: название_тега.php или название_пространства_имен_название_тега.php, например:
htmleditor.php | тег: htmleditor, пространство имен не задано
active_form.php тег: form, пространство имен: active
active.php | тег: не задан, прострнанство имен: active
Типы макросов:
admin - шаблоны административного интерфейса (папка: macros_admin, XML-обработчик: rules.xml)
public - шаблоны публичной части проекта (папка: macros_public, XML-обработчик: macros.xml)
ext - шаблоны публичной части модулей (папка: macros_ext, XML-обработчик: ext_macros.xml)

Handy.CMS
11.10.2009, 11:59
16. Улучшена работа антиспам фильтра для форм.
Улучшена работа базового антиспам фильтра для форм, не требующего наличия captcha в форме.

Handy.CMS
03.11.2009, 18:39
17. Модуль "Формы", информация о пользователе
В модуль "Формы" добавлена передача администратору информации о пользователе, который отправил форму.
На почту вместе с запросом направляется следующая информация по пользователю:
- Реферер (адрес страницы-источника посетителя)
- IP адрес пользователя
- Броузер пользователя

Handy.CMS
05.11.2009, 02:13
18. Управление свойствами страницы из модулей
Получить доступ к свойствам страницы, например, meta-данным теперь можно через функцию:
handyCore::loadExtension ( 'ext.sitemanager' )->getPageSettings([$key]);, где $key - название свойства.
При этом, если не обозначить название конкретного свойства, Вы получите весь массив свойств.
Для того, чтобы установить значение свойства, используется функция:


handyCore::loadExtension ( 'ext.sitemanager' )->setPageSettings($key, $value);, где

$key - название свойства;
$value - значение, которое нужно установить.
Примечательно, что массив свойств не ограничен, соответственно можно добавлять свои свойства.

На данный момент базовые модули системы используются свойства: meta_title, meta_keywords, meta_description, которые отвечают за вывод META-тегов конкретной страницы. В случае, если страница динамически формируется модулем, из модуля можно установить свойства META для данной страницы.

Handy.CMS
07.11.2009, 17:33
19. Возможность установки времени показа формы
Добавлена возможность установки интервала, в который должна отображаться форма.

Handy.CMS
11.11.2009, 02:50
20. Русские даты в Smarty
Система автоматически переводит названия месяцев в датах в русский эквивалент, в соответствии с установленным в системе форматом дат.
Однако иногда для форматирования удобно выводить части даты отдельно и для этого нужно воспользоваться модификатором форматирования даты шаблонизатора smarty - date_format (http://smarty.net/manual/en/language.modifier.date.format.php). Проблема заключается в том, что исходная версия smarty не предусматривает русских дат.
Мы модифицировали код smarty и теперь шаблонизатор поддерживает русские даты месяцев. Для указания русского формата дат, необходимо указать модификатор даты:

%b_RU - дата в нижнем регистре;
%B_RU - дата в верхнем регистре.

Handy.CMS
13.01.2010, 13:33
21. Шаблоны для модулей
Добавлена возможность задавать шаблоны для элементов модулей, а также запрашивать список существующих шаблонов модуля.
Для получения данных о шаблонах модуля используется функция: getTemplates()

Данные о шаблонах хранятся в базе данных в таблице extensions_templates, где:

extensions_template_title - название шаблона для вывода в интерфейсе;
extensions_template_filename - название файла шаблона (допускается пустое значение).
extension_sysname - системное название модуля, которому принадлежит шаблон
Для использования в публичной части модуля предусмотрена функция: getTemplate($id), где $id - ID шаблона. Функция возвращает итоговое название файла шаблона.
Название файла шаблона формируется по принципу: <extension_sysname>_<extensions_template_filename>
(Системное название модуля, знак подчеркивания, название файла шаблона. В случае, если название файла шаблона не задано, итоговое название будет совпадать с системным названием модуля).

Пример:
INSERT INTO `extensions_templates` VALUES (1, 'Общий шаблон форм', '', 'forms');
INSERT INTO `extensions_templates` VALUES (2, 'Мы вам перезвоним', 'recall', 'forms');
В первом случае итоговое название файла шаблона будет: forms.tpl, во втором случае: form_recall.tpl


// получить данные по всем шаблонам модуля
$this->getTemplates();
// получить название файла шаблона
$this->getTemplate($id);

Handy.CMS
13.01.2010, 13:36
22. Шаблоны и стили для модуля "Формы"
Добавлена возможность задавать различные шаблоны вывода для форм.
Кроме того, для каждого поля формы возможно указать собственный CSS-класс, который будет определять его отображение на странице.

Handy.CMS
14.01.2010, 06:33
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']);

Для получения шаблона, используемого по-умолчанию, добавлена функция: getDefaultTemplate(), которая возвращает массив данных шаблона.
Пример использования:

$default_template = $this -> getDefaultTemplate();

Содержимое $default_template:
Array
(
[extensions_template_id] => 1
[extensions_template_title] => Общий шаблон форм
[extensions_template_filename] =>
[extension_sysname] => forms
[owner_id] => 10
[extensions_template_default] => Y
)

Handy.CMS
18.01.2010, 13:05
24. Получание текущей языковой версии
Получить ID текущей языковой версии можно с помощью функции getLangVersion()



// Создаем экземпляр класса системы разграничения прав доступа
$this -> right_access_manager = handyCore::loadExtension ( 'kernel.right_access_manager' );
$this->right_access_manager->getLangVersion();