[На главную] [К оглавлению раздела]
form
form - вывод формы
При использовании этого тега создаются следующие пользовательские переменные:
- form.id - идентификатор текущей формы
- form.code - код текущей формы
- form.code2 - код текущей формы второго уровня
Возможные атрибуты:
- redirect - ссылка на страницу, на которую происходит перенаправление после отправки данных формы
- code - код формы (по умолчанию формируется 6-символьный код).
Можно использовать для ввода кода с изображения. Изображение можно получить по адресу: /cms/form/image?id=идентификатор_формы
- code2="yes" - формирует 32-символьный код для задержки приема данных до перехода пользователя по ссылке: /cms/form?id=идентификатор_формы&code=код_формы_второго_уровня
- action - выполняемое действие. Возможные значения: save, saveAndPublish, userSave
- parent_id - идентификатор родителя для выполняемой операции, если атрибут action имеет значение save или saveAndPublish. По умолчанию равен идентификатору текущей записи
Дочерние элементы:
- checkform - исполняемый php-код, выполняющийся на сервере при получении данных от текущей формы.
Этот код должен обеспечить правильную компановку массива $_POST для выполнения каких-либо операций с базой данных.
Если этот код не возвращает результатов, то возвращается ноль.
Ноль считается успешным результатом; только при успешном результате выполняются операции с базой данных.
Результат передается на страницу ответа через адресную строку параметром GET['result']
- form_code_img - изображение, содержащее код формы
- input, textarea - обрабатываются только если существует атрибут action у формы.
Обеспечивают автоматическое формирование checkform для первой операции с базой данных (формируется $_POST['_a'][0]).
Возможные атрибуты:
- type - осуществляет проверку данных. Возможные значения (кроме стандартных для html-тега input): form_code (проверка кода формы с изображения), email, number, upload_file, upload_image, user_name (имя пользователя, проверка уникальности), password, password2 (подтверждение пароля), hidden (не включаются в html-код для сохранения конфиденциальности данных)
- required - делает поле обязательным для заполнения
- max_file_size - устанавливает ограничение на размер загружаемого файла (изображения) в байтах
- var_name - имя переменной в базе данных (для данных из таблицы внешнего класса используется префикс external., для данных из таблицы CmsUser используется префикс user.)
Предустановленные результаты, возвращаемые формой:
- 0 - форма принята и успешно обработана
- -1 - форма устарела (время жизни формы указывается в конфигурации)
- -2 - не все обязательные поля заполнены
- -3 - не верный код с изображения
- -4 - не верный формат данных
- -5 - превышен допустимый размер файла
- -6 - пользователь с таким именем уже существует
- -7 - пароль и его повтор не совпадают
- Пустой результат - синтаксическая ошибка в коде checkform
<?xml version="1.0" encoding="utf-8"?>
<t:templates xmlns:t="/templates/ns" xmlns="http://www.w3.org/1999/xhtml">
<t:template id="template1">
<t:form redirect="{VARS['link']}" action="saveAndPublish">
<t:checkform><![CDATA[
[дополнительные проверки данных и компановка массива $_POST]
]]></t:checkform>
<table cellspacing="10" cellpadding="0" width="100%">
<tr><td colspan="2">
<t:if expr="'{GET['result']}'=='0'"><p style="font-weight: bold; color: #009900;">
Введенные в форму данные приняты и будут предварительно проверены модератором
</p></t:if>
<t:if expr="'{GET['result']}'=='-3'"><p style="font-weight: bold; color: #990000;">
Кодовое число не верно
</p></t:if>
<t:if expr="'{GET['result']}'=='-2'"><p style="font-weight: bold; color: #990000;">
Все поля отмеченные звездочкой должны быть заполнены
</p></t:if>
</td></tr>
<tr><td width="10%" align="right">Имя*: </td><td><t:input type="text" name="name" required="yes" var_name="title" /></td></tr>
<tr><td width="10%" align="right">E-mail: </td><td><t:input type="email" name="email" var_name="description" /></td></tr>
<tr><td width="10%" align="right"><t:form_code_img /></td>
<td><t:input type="form_code" name="image" /></td></tr>
<tr><td width="10%" align="right" valign="top">Текст*: </td>
<td><t:textarea name="text" rows="7" required="yes" var_name="content"></t:textarea></td></tr>
<tr><td width="10%">&nbsp;</td><td><input type="submit" value="Отправить" /></td></tr>
</table>
</t:form>
</t:template>
</t:templates>
Операций с базой данных
Для выполнения операций с БД необходимо определенным образом сформировать массив $_POST.
Необходимо создать переменную _a, которая будет являться массивом последовательно выполняемых действий
Параметры действий:
- action - выполняемое действие. Возможные значения:
- save - сохранение (или вставка новой записи)
- saveAndPublish - сохранение (или вставка новой записи) и публикация
- delete - удаление
- moveTo - перемещение
- moveDown - перемещение вниз
- moveUp - перемещение вверх
- moveDown - перемещение вниз
- moveToFirst - перемещение в самый верх
- moveToLast - перемещение в самый низ
- publish - публикация
- publishChilds - публикация дочерних
- deleteChilds - удаление дочерних
- hide - скрытие
- backup - восстановление предыдущей версии
- addAssoc - добавление связки
- removeAssoc - удаление связки
- publishAll - публикация всех записей
- userSave - сохранение данных о пользователе
- userDelete - удаление пользователя
- saveToChilds - сохранение данных для дочерних элементов
- publishChilds - публикация дочерних
- deleteChilds - удаление дочерних
- groupSave - сохранение группы пользователей
- groupDelete - удаление группы пользователей
- rightsSave - сохранение прав пользователей
- rightsDelete - удаление прав пользователей
- dbcClearCache - очистка временного кэша запросов к базе данных
- authenticate - авторизация пользователя
- id - идентификатор записи.
Этот параметр обязателен при всех действиях, кроме вставки новой записи.
- parent_id - идентификатор родительской записи.
Этот параметр обязателен при вставке новой записи.
Допустимо использование зарезервированного слова DEFAULT для установки значения по умолчанию (это значение указывается в конфигурации и используется для создания новых страниц)
- version - версия восстанавливаемой записи. Этот параметр обязателен для операции backup
- moveto_id - идентификатор записи, на место которой необходимо переместить данную запись. Этот параметр обязателен для операции moveTo
- foreign_id - идентификатор связанной записи. Этот параметр обязателен для операций addAssoc и removeAssoc
- titleToLink - установите значение true, если при сохранении необходимо сформировать ссылку из заголовка используя ссылку родительской записи и транслитерацию
- vars - массив данных. Для данных из таблицы внешнего класса используйте префикс external..
Для операций вставки в массиве данных должны быть значения link, title и create_time.
Вместо указания значения link можно указать параметр titleToLink.
Для значения create_time допустимо использование зарезервированного слова NOW для установки текущего времени
- user - имя пользователя при авторизации
- password - пароль пользователя при авторизации
- При сохранении данных пользователя, данные таблицы CmsUser: group_id, name, password, expire, email
размещаются напрямую в массив действия, а не в массив vars
- params - дополнительные параметры (указываются через пробел):
- set_parent_id=идентификатор - устанавливает родителя
- set_external_class=имя_класса - устанавливает внешний класс
- set_childrens_template_src=имя_шаблона - устанавливает шаблон
- add_dassoc=идентификатор - добавляет привязку к записи с указанным идентификатором
- add_rassoc=идентификатор - привязывает запись с указанным идентификатором к текущей записи
Пример формирования checkform вручную, для формы из предыдущего примера:
if (preg_match('/^\s*$/', $_POST['name'])) return -2;
if (preg_match('/^\s*$/', $_POST['text'])) return -2;
if ($_POST['image']!='{USER_VARS['form.code']}') return -3;
if (!preg_match('/^[\w\d\-\_\.]+\@[\w\d\-\_\.]+\.[\w\d\-\_]+$/', $_POST['email'])) return -4;
$_POST['_a'] = array(
0=>array(
'action'=>'saveAndPublish',
'parent_id'=>'{VARS['id']}',
'titleToLink'=>'true',
'vars'=>array(
'create_time'=>'NOW',
'title'=>$_POST['name'],
'description'=>$_POST['email'],
'content'=>$_POST['text']
)
)
);
[На главную] [К оглавлению раздела] [Вверх]