Как создать форму

Как создать форму

Задача:

Создать форму ввода с некоторым набором полей. Назовём форму obj.

Для этого нам нужно создать файлы темплейта и обработчика формы в папке /forms, для удобства мы создадим их в поддиректории /forms/obj. Обратите внимание, что поддиректория должна иметь то же имя, что и форма. Файл обработчика так же должен иметь то же имя, что и форма, с расширением .php - в нашем случае obj.php.

Имя самой формы состоит из имени формы и через нижний прочерк режима отображения, с расширением .php. Таким образом, форма редактирования, в нашем случае, будет иметь имя obj_edit.php. Так же создадим форму вывода списка объектов и назовём её... Правильно, obj_list.php.

Итак мы имеем три файла:

/forms/obj/obj.php - обработчик формы
/forms/obj/obj_edit.php - форма редактирования
/forms/obj/obj_list.php - форма списка

Форма редактирования

Представляет из себя обычный текст HTML внутри которого вы можете использовать все возможности фреймворка AiKi. В примере показана разметка с использованием стилей Bootstrap.
Особое внимание следует обратить на ряд атрибутов тэга form:
id - идентификатор формы, в нашем случае objEditForm
name - имя формы, тут понятно obj
item - имя записи, в нашем примере передаётся идентификатор записи из контекста 

Пример:

<form id="objEditForm" name="obj" item="{{id}}" class="form-horizontal" role="form">
<div class="form-group">
    <label class="col-sm-3 control-label"">Наименование</label>
    <div class="col-sm-9"><input type="text" name="name" class="form-control"></div>
</div>
<div class="form-group">
    <label class="col-sm-3 control-label"">Описание</label>
    <div class="col-sm-9"><input type="text" name="descr" class="form-control"></div>
</div>
<!-- и так далее -->
</form>

Форма списка

Так же представляет из сабя обычный текст HTML с расширениями AiKi.
Здесь в тэге tbody через атрибут data-role="foreach" задаётся цикл вывода записей формы, атрибут form="obj" указывает, что необходимо выводить записи формы obj.
Другой вариант цикла предполагает, что вы подгатавливаете массив данных для вывода в обработчике формы и передаёте его через from="result".
В примере показан стандартный способ вызова формы редактирования записи в модальном окне через контекстное меню, но вы можете использовать иной способ. Последняя строка примера это вставка стандартного модального окна.

Пример:

<h2 class="sub-header">Список объектов</h2>
   <div class="table-responsive">
   <table class="table table-striped formlist">
      <thead><tr>
         <th>&nbsp;</th>
         <th>Наименование</th>
         <th>Описание</th>
      </tr></thead>
      <tbody data-role="foreach" form="obj" data-add="true">
 <!-- если для подготовки вывода списка записей используется обработчик, то цикл будет выглядеть так: -->        
 <!-- <tbody data-role="foreach" from="result" data-add="true"> -->
 <!-- обратите внимание на атрибут from вместо form -->
         <tr item="{{id}}">
         <td>
             <-- Начало контекстного меню записи -->
             <div class="dropdown">
             <a data-toggle="dropdown" href="#"><span class="glyphicon glyphicon-th-list"></span></a>
             <ul class="dropdown-menu" role="menu">
                 <li><a href="#" data-ajax="mode=edit&form={{form}}&id={{id}}" data-toggle="modal" data-target="#{{form}}Edit" data-html="#{{form}}Edit .modal-body"><span class="glyphicon glyphicon-edit"></span> Изменить</a></li>
                 <li><a href="#" data-ajax="mode=delete&form=admin&formname={{form}}&itemname={{id}}" data-toggle="modal" data-target="DeleteConfirm"><span class="glyphicon glyphicon-remove"></span> Удалить</a></li>
             </ul>
             </div>
             <-- Конец контекстного меню записи -->
         </td>
         <td>{{name}}</td>
         <td>{{descr}}</td>
         </tr>
      </tbody>
   </table>
   </div>
<div data-role="include" src="/engine/forms/form_comModal.php"></div>

Обработчик формы

В простом варианте обработчик форм можно не задействовать, если же есть необходимось как-то преобразовать данные перед выводом, то в обработчике нужно создать функции с определённым именем. В нашем случае мы описали форму obj с двумя режимами edit и list. Для первого режима в обработчике будет необходимо создать функцию obj_edit(), для второго obj_list().

Пример:

function obj_edit() {
    // получаем форму obj_edit.php
          $out=aikiGetForm("obj","edit");
    // добавляем необходимые скрипты
          $out->prepend("<script src='/engine/js/php.js'></script>
          <script src='/engine/bootstrap/formhelpers/js/bootstrap-formhelpers.js'></script>
          <script src='https://api-maps.yandex.ru/2.1/?lang=ru_RU' type='text/javascript'></script>
          <script src='/js/obj_edit_map.js'></script>");
    // читаем текущие данные
          $Item=fileReadItem($_GET["form"],$_GET["id"]);
    // выполняем обработку формы и простановку данных
          $out->contentSetData($Item);
    // возвращаем результат обработки
          return $out->htmlOuter();
}

Интеграция с Bootstrap v.3

Чистый & понятный код

Парсер DOM в PHP