Элементы формы

Сценарий (PHP-скрипт)

PHP-скрипт выполняет управление отображением «Объектов». Основные операции по отображению, «подгрузке» и преобразованию шаблоны выполняет класс родитель. Классы объектов, которые создаются непосредственно в «Конфигураторе», наследуются от него, и мы можем переопределить методы, для изменения стандартной работы класса.

31

Основными методы, используемыми в PHP-скрипте:

  • onPlay
  • onChange
  • beforeChange
  • onSave
  • onSaved
  • onDelete
  • onDeleted
  • responseChange
  • checkAjax

Подробное описание методов:

Метод onPlay – метод, который выполняется последним из всех, выводит шаблон в браузер, в этом методе удобно выполнять большинство операций. Чтобы вывести что-либо в шаблоне, рекомендуется использовать именно этот метод.

Метод onChange — метод, возникающий, если сущность должна изменится, в данном случае она изменяется не в базе данных, а лишь как php – сущность. Выполняется до того, как выполнится какие-либо изменения.

Метод beforeChange – метод, возникающий, если сущность изменилась. Более подробно смотрите метод выше. onChange и beforeChange — парные методы, один выполняется до изменения, другой — после изменения сущности.

Метод onSave — метод, возникающий, если сущность собираются сохранить в БД (Базе данных).
Пример: Присвоить полю owener значение до записи Объекта в базу данных

1
$this->structure->owner = $this->parents[0][0]->getKey(); // конструкция используется для записи значений таб. частей

Метод onSaved — метод, возникающий после сохранения сущности в БД.

Метод onDelete – метод, возникающий перед удалением сущности. В данном случае удаляется не полностью, у объекта меняется поле visible (1 ->0, пометка на удаление).

Метод onDeleted – метод, возникающий после удаления сущности.

Метод responseChange – удобный метод, чтобы вернуть данные AJAX запросу в удобном XML формате. Блокирует выполнение onPlay.

Метод checkAjax – Этот метод вызывается сразу после получение $this->structure и перед всеми основными событиями. В этот метод удобно помещать различные ajax методы и при этом обязательно использовать resultSuccess, resultError, т.к. они возвращают response и при этом заканчивают скрипт die().
Если в методе checkAjax не будет ни одного die(), тогда остальное начнет выполняться по умолчанию.. Тип возвращаемого контента можно поменять.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//url:  ...../object/id/?ajax=save
protected function checkAjax() {
   $ajax = $this->Http->Request->get("ajax", "Varchar", "");
   switch($ajax){
      case("save"):{
         try {
               $this->structure->date_update(time())->sync(true);
               $this->resultSuccess(["message" => "success actions"]);
         } catch (\Exception $ex) {
                $this->resultError($ex->getMessage());
         }
      } break;
   }
}

Вспомогательные функции в PHP-скрипте:

  • isEditForm
  • isAddForm
  • isSelectedForm
  • isListForm
  • isModalEditForm
  • isGroupsForm
  • isReportForm
  • isActionSave

Bool isEditForm() — является ли форма, формой редактирования.
Bool isAddForm() — является ли форма, формой Добавления(тоже является формой редактирования).
Bool isSelectedForm() — является ли форма, формой выбора.
Bool isListForm() — является ли форма, формой списка.
Bool isModalEditForm() — является ли форма, модальной формой редактирования.
Bool isGroupsForm() — является ли форма, формой группы.
Bool isGroupsForm() — является ли форма, формой отчета.
Bool isActionSave() — возвращает true, если была нажата кнопка Save или SaveAndClose.

Предположим надо установить поле date, в случае когда открыли форму добавления.

1
2
3
4
5
6
7
protected function checkAjax() {
        if ($this->isAddForm()) {
            if (!$this->isActionSave()) {
                 $this->structure->date(time())->getField("date")->markAsSaved();
            }
        }
    }

У форм редактирования и списка, также есть возможность добавлять кнопки в action_bar

editform_action_buttons

Основными методы, для работы с кнопками в PHP-скрипте в методе onPlay:

  • addActionPanelButtons
  • addMoreButtons
  • removeActionButton
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* ADD SAVE BUTTONS
*/
$this->addActionPanelButtons([
    "SAVEAS" => [
        "name"   => "Сохранить как...",
        "class"  => "purple-plum",
        "icon"   => ['before' => 'fa fa-save'],
        "access" => ACCESS_EXPORT,
        "items"  => [
            [
                "link"   => "javascript:prn(1)",
                "name"   => "PDF",
                "params" => "target='_blank' stamp='1' print-this='/companies/" . $this->structure->owner->id . "/orders/" . $this->structure->id . "/main/?stamp=1' mode='pdf' ",
                "icon"   => ['before' => 'fa fa-file-pdf-o'],
            ],
            [
                "link"   => "pko",
                "name"   => "DOC",
                "params" => "target='_blank' stamp='0'  print-this='/companies/" . $this->structure->owner->id . "/orders/" . $this->structure->id . "/main/?stamp=0' mode='doc' ",
                "icon"   => ['before' => 'fa fa-file-text-o'],
            ],
        ]
    ],
]);

Все кнопки создаются в массиве $this->moreButtons — у которых первый ключ — это название группы. Для функции addMoreButtons уже зарезервирован ключ «MORE»

В данном примере, устанавливаем группу кнопок в ключ «SAVEAS»

Параметры для кнопок в группе

  • name — Наименование[*]
  • link — Если установлен этот флаг, то кнопка кликабельна
  • system_name — Используется как уникальное значение для удаления по этому ключу.
  • class — Устанавливает это поле в атрибут class
  • params — Устанавливает атрибуты
  • icon — Массив. 1. перед названием [‘ before’ => ‘fa fa-save’], 2. после названия [‘after’ => ‘fa fa-save’]
  • access — К кнопке подключить уровень глобальный доступа. Например ACCESS_EXPORT — Если у пользователя в к этому объекту доступа на экспорт нету, то вся группа кнопок показываться не будет
  • items — Массив для submenu у кнопки
1
2
3
4
5
6
7
8
$this->addActionPanelButtons([
    "PRINT" => [
        "link" => "/changes/" . $this->structure->id . "/main/",
        "name" => "Печать",
        "params" => "target = '_blank'",
        "icon" => ["before" => "fa fa-print"]
    ]
]);

Удаление по ключу

Данный пример удаляет кнопку restore в форме списке у more buttons

$this->removeActionButton("MORE", "system_name", "restore");

Свойства форм:

  • const ENTRIES_PER_PAGE = 25; -[Во всех списочных формах] используется для задания вывода количества элементов
  • protected $showAll = false; — [Во всех списочных формах] Флаг на вывод is_group или без них.
  • protected $layout = «layout_list»; — Задает layout в форме. По умолчанию для каждого типа формы определен свой layout. Можно использовать если хотите использовать layout_empty, layout_disabled
  • protected $renderFilter = true; — [Во всех списочных формах] показывать фильтр или нет
  • protected $renderPagination = true; — [Во всех списочных формах] Показать/Скрыть пагинацию
  • protected $disableFilters = []; — [Во всех списочных формах] Исключить поля из списка фильтров [«id, «date»]
  • protected $renderAddButton = true; — Показать/скрыть кнопку «Добавить»
  • protected $searchFull = false; — true — искать везде, даже в под папках, false — искать в текущем уровне
  • protected $delayedNameCustom = []; — Вывод для полей типа pointer, dalayed… Переопределяет получение Pointer имени. [‘boss’=>’full_name’]. $this->structure->boss->full_name
  • protected $lookupFieldsOptions = []; — Вывод для полей типа lookup… Переопределяет получение Pointer имени. [‘boss’=>[‘key’=>’id’, ‘field’=>’boss’, valRef=>’name’, «modalSize» => «fullscreen|mini|tiny|small|large»]]. valRef это получение поля у pointer объекта $this->structure->boss->name. modalSize = размер модального окна

Шаблон

Шаблон представляет собой обычную HTML разметку, в которую включены шаблоны заменяемые на HTML разметку. Содержимое шаблона находиться в файлах tpl. Чтобы применить какой либо шаблон, необходимо подключить его в шапке документа.

Примеры:

1
2
#include <fields> // шаблон полей
#include <table> // шаблон таблиц

3

Также шаблон может быть не подключен, а вставлен в текст через инструкцию inline. Она похожа на include, за исключением того, что она дает команду препроцессору просто вставить кусок шаблон в это место

Примеры Inline вставки:

1
2
#inline <fields> // шаблон полей
#inline <table> // шаблон таблиц
1
2
3
4
//Вставляет companies/orders/edit.js
[[js | name: companies/orders/edit]]
//Вставляет companies/orders/edit.css
[[css | name: companies/orders/edit]]

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

keyname — имя ключа

1
<p>#L:keyname</p>

Для использования ключа из любого языкового пакета, есть следующая конструкция:

task — имя формы, edit — тип формы, Start- имя ключа
*Обязательно — ##L:

1
<p>##L:task.edit.Start</p>

JS-скрипт

Js скрипт подключается в шапке документа. Просим учитывать это при написании скриптов. В основном в системе используется плагин jQuery. Подробнее о его использовании читайте www.jquery.com

Для каждой формы можно создать отдельный JS-код. Путь к JS совпадает с названием формы и пути к шаблону.

33

Созданный скрипт необходимо подгрузить в шаблоне. Для этого, добавьте к блоку JS (append) ссылку на скрипт. Можно использовать шаблон [[js]], получающий единственный параметр name — имя скрипта.

1
2
3
4
5
{JS append}
 
  [[js | name: path/to/scenario/edit]]
 
{/JS}

При разработке вы можете использовать готовые методы для выполнения тривиальных задач (отображения модального окна, загрузки AJAX-формы и т.п.)

Вы также всегда можете использовать все возможности библиотеки jQuery.
Ниже описаны основные библиотеки и методы для их использования. jQuery-методы обозначаются через $.{METHOD}.

Скрипты можно добавить и в Footer раздел

1
2
3
{FOOT_JS append}
  [[js | name: path/to/scenario/edit]]
{/FOOT_JS}

Языковой файл (массив)

В языковом файле хранятся ассоциации языковых переменных.
35
Ниже пример оформления кода для языкового файла:

1
2
3
4
5
6
7
<!--?php 
$_ = [
"AddPos" = "Добавление товара в счет №",
"EditPos" = "Редактирование товара из счета №",
"NoStorehouse" = "(склад не выбран)", 
"NoDispatchedEdit" = "Нельзя редактировать уже отгруженный товар."];
 ?-->

В «Шаблоне» чтобы вывести переменную из «языкового файла» нужно прописать:

1
#L:Copy

В «Javascript» чтобы вывести переменную из «языкового файла» нужно прописать:

1
translate.obj.Copy

На форме появится текст: «Добавление товара в счет №»

Форматный вывод для php

Для того что бы задать форматный вывод, необходимо указать такую строку в языковом пакете:

1
2
3
4
5
<?php 
$_ = [
"simpleText" = "Форматированный текст с параметрам: строка - %s и число %d",
];
?>

На PHP получение подобной строки будет выглядеть следующим образом:

1
2
3
4
5
6
7
<?php 
//например находимся в deals/list
use Kernel\Http\Language;
 
Language::getVariableFormat("deals/list", "simpleText", ["Пример строки", 12345]);
//выводит - Форматированный текст с параметрам: строка - Пример строки и число 12345
?>
Последние правки: 05.10.2018 15:45:12