Класс xtables\base\IconAction
обеспечивает создание иконок с параметрами в компонентах TableView
и CardView
.
Использование осуществляется путем создания настроек для компонентов TableView
и CardView
.
В качестве настроек указываются:
title (string)
не обязательно текст, отображаемый во всплывающей подсказке при наведении на иконку.
'title' => 'some info for html tag title'
base64 (boolean)
не обязательно если нужно, чтобы
параметры передавались в строке url в base64 кодированном виде, то нужно включить данный параметр со значением
true
; если параметр не определен, то параметры передаются в обычном виде через знак &
и
приложение автоматически переключается на кодировку BASE64, если встречает в значениях параметров массив.
'base64' => true // don't set this paramets to auto define
path (string)
Адрес ссылки <a>
иконки.
'path' => '/outgoing/journal/'
icon (string)
не обязательно html
теги с иконкой;
если параметр не определен, то в качестве иконки будет отображаться: .
'icon' => '<i class="fa fa-anchor"></i>'
params (array)
массив с параметрами (могут быть добавлены любые необходимые параметры,
в том числе в виде массивов);
если значение в массиве совпадет с полным именем колонки (sql таблица + колонка через точку),
присутствующим в выборке из базы данных, то приложение подставить его значение;
если значение не совпадет, то приложение подставит этот параметр (любое значение: строка или массив)
в путь ссылки <a>
иконки в виде json_encoded, base64_encoded строки.
Для осуществления эффективного возврата на ту же страницу после, например, связывания записей из разных табилц
может использоваться параметр 'icon_path_back'
, который будет доступен во входных параметрах и сможет быть
использован для иконки добавления в качестве параметра 'path'
;
то есть необходимо передать в параметрах какой-то роут, который станет ссылкой для иконки прикрепления;
при нажатии на иконку прикрепления произойдет переход по данному пути, куда будут переданы необходимые для связывания параметры.
xtables\base\CardView::renew($table, $id, $columnsData)
$table
- наименование sql таблицы;$id
- номер идентификатора записи, в которой будет происходить обновление данных о связывании;$columnsData
- ключи - имена колонок, в которых будет проводиться обновление,
значениями - значения, которые будут вставлены;
или указать процедуру обновления данных нужной таблицы в принимающем ответ методе.
Метод xtables\base\CardView::renew($table, $id, $columnsData)
может использоваться для обеспечения обновления данных в sql таблице массивом параметров и в других случаях.
.
'params' => [
'icon_path_back' => '/incoming/adddoc',
'icon_for_id' => 'incoming_docs.id', // app will get data from db query
'icon_add' => 1
]
clear (array)
не обязательно поведение будет меняться:
card_icon
(находится, как правило, в компоненте CardView
),
то данный параметр будет использоваться для передачи данных для осуществления очистки иконок в компоненте
TableView
, чтобы, например, не показывать иконки около тех записей, которые соответствуют определенным условиям
(уже добавлены или иное); в массиве в качестве ключей нужно указать имена иконок, в отношении которых нужно применять проверку
на очистку, в качестве значения - использовать массив, где ключами будут полные названия sql таблица + колонка через точку,
соответствующие колнке таблицы, где будет проводиться проверка, в качетсве значения использовать массив данных (для автоматической
подстановки данных при использовании в компонентах TableView
и CardView
необходимо указать
полные названия sql таблица + колонка через точку (где осуществляется вставка иконки);
card_icon
НЕТ, то массив clear
будет использоваться для очистки иконок,
если название иконки совпадает с названием, которое содержится в параметрах clear
, переданных иконкой, содержащей
card_icon
;
'clear' => [
'icon_add' => [
'outgoing_docs.id' => ['incoming_docs.outgoing_id']
]
]
css_id (string)
не обязательно строка с названием css идентификатора, которым должна быть помечена иконка.
'css_id' => 'some_id'
css_classes (string)
не обязательно строка с названиями css классов, которыми должна быть помечена иконка.
'css_classes' => 'some_class else_class'
access (array)
не обязательно если необходимо ограничить показ иконки определенным категориям пользователей, то можно использовать данный параметр, передав в качестве его значения массив с названиями групп пользователей, которым должна быть доступна иконка.
'access' => [
'Level',
'Level2'
]
В компоненте CardView
может использоваться специальная иконка с именем 'unfix'
, которая может служить для
очистки данных от прикрепленной (связанной) таблицы.
Компонент CardView
обеспечивает скрытие иконок, имеющих название 'unfix'
, в случае
отсутствия соответствующих данных (таким образом, реализуется логика: нет данных, нечего стирать).
В качестве параметров передаются:
title (string)
не обязательно текст, отображаемый во всплывающей подсказке при наведении на иконку.
'title' => 'some info for html tag title'
base64 (boolean)
не обязательно если нужно, чтобы
параметры передавались в строке url в base64 кодированном виде, то нужно включить данный параметр со значением
true
; если параметр не определен, то параметры передаются в обычном виде через знак &
и
приложение автоматически переключается на кодировку BASE64, если встречает в значениях параметров массив.
'base64' => true // don't set this paramets to auto define
path (string)
путь (роут), по которому
будет проводиться выполнение очистки (внутри можно воспользоваться статическим методом
xtables\base\CardView::renew($table, $id, $columnsData)
).
'path' => '/outgoing/path_to_del/'
icon (string)
Специальная иконка <span class="close">×</span>
.
'icon' => '<span class="close">×</span>'
params (array)
в случае, если будет использоваться стандартный метод
xtables\base\CardView::renew($table, $id, $columnsData)
, то в качестве параметров можно
передать:
значение с ключом 'id'
и значением к нему
в виде полного имени sql таблица + колонка через точку, откуда компонент возьмет данные
об id
, в записи которого будет проводиться очистка;
'table'
- таблица, в которой будет проводиться очистка;
'column'
- название колонки, в которой будет произведена очистка;
'value'
- цифровое значение 0
).
'params' => [
'icon_for_id' => 'incoming_docs.id', // app will get data from db query
'table' => 'incoming_docs',
'columns' => 'incoming_docs.outgoing_id',
'value' => 0
]
access (array)
не обязательно если необходимо ограничить показ иконки определенным категориям пользователей, то можно использовать данный параметр, передав в качестве его значения массив с названиями групп пользователей, которым должна быть доступна иконка.
'access' => [
'Level',
'Level2'
]
Параметры в сборе
'card_icon2' => [
'title' => 'Прикрепление исходящего номера',
'path' => '/outgoing/journal/',
'icon' => '<i class="fa fa-anchor"></i>',
//'base64' => true,
//'access' => ['some_group', 'else_group'],
'params' => [
'icon_path_back' => '/incoming/adddoc',
'icon_for_id' => 'incoming_docs.id', // app will get data from db query
'icon_add' => 1
],
'clear' => [
'icon_add' => [
'outgoing_docs.id' => ['incoming_docs.outgoing_id']
]
]
],
'unfix' => [
'title' => 'Очистить',
'path' => '/xtables-card/unfix',
'icon' => '<span class="close">×</span>',
'params' => [
'icon_for_id' => 'incoming_docs.id', // app will get data from db query
'table' => 'incoming_docs',
'columns' => 'incoming_docs.outgoing_id',
'value' => 0
]
]
checkbox
для множественного выбора
В качестве имени иконки может использовать checkbox
, в который могут передаваться параметры:
title (string)
строка (иконка), которая будет отображаться в специальном меню с действиями для множественного выбора
для checkbox
; данное меню находится в составе popup
меню над таблицей; если данный
параметр не определен, то будет показана иконка: .
'title' => 'some title' // or don't set it for use default
column (string)
название колонки (полное название с sql таблице + колонкой через точку), откуда компонент
TableView
будет брать данные для значение каждого checkbox
.
'column' => 'users.id'
items (array)
состав пунктов специального меню в составе popup
меню над таблицей;
для добавления разделителя внутри меню нужно использовать значение 'divider'
;
в качестве значений необходимо указать адреса, по которым методом POST
будет передан
массив со значениями выбранных (активированных) checkbox
; указанные адреса должны
возвращать один из ответов, который может быть корректно обработан JS функцией xtables.serverReplyHandle()
:
'items' => [
'<a href="/users/projects?attach=1">Прикрепить</a>',
'divider',
'<a href="/users/projects?del=1">Удалить</a>'
]
matches (array)
действия, которые будут выполняться при совпадении текущего значения строки таблицы на массивом значений, которые
должны быть переданы в параметре 'values'
;
'values'
- массив значений, в котором будет проверяться текущее на совпадение;
'disabled'
- деактивировать checkbox
в случае совпадения; для включения
используется значение true
; если данный функционал не нужен, то не нужно объявлять данный параметр;
'sign'
- совпавшее значение будет помечено знаком, переданным в строке значения этого параметра
(это может быть слова (иконка)); если данный функционал не нужен, то не нужно объявлять данный параметр или
использовать в параметре значение false
;
'matches' => [
'values' => $this->multiChoice(), //array
//'disabled' => true,
'sign' => '<i class="fa fa-star" aria-hidden="true"></i>' // false
]
params (array)
Массив параметров, который будет передан через ajax
методом POST
на адрес, который будет выбран пользователем из верхнего меню (действия с чекбоксами);
рекомендуется передавать параметры 'for_table'
'for_id'
, которые обеспечать
совершение действий с определенным значением в sql таблице, используя полученный массив чекбоксов.
'params' => [
'for_table' => $this->params['icon_checkbox_for_table'],
'for_id' => $this->params['icon_checkbox_for_id']
]
dropup (boolean)
для открытия popup
меню вверх
определите данный параметр со значением true
.
'dropup' => true
label (string)
строковое значение (слово, иконка),
которое будет отображено рядом с checkbox
.
'label' => '<i class="fa fa-paper-plane" aria-hidden="true"></i>'
Параметры в сборе
'checkbox' => [
//'title' => 'Action',
'column' => 'users.id', // full name
'items' => [
'<a href="/users/projects?attach=1">Прикрепить</a>',
'divider',
'<a href="/users/projects?del=1">Удалить</a>'
],
'matches' => [
'values' => $this->multiChoice(), //array
//'disabled' => true,
'sign' => '<i class="fa fa-star" aria-hidden="true"></i>' // false
],
'params' => [
'for_table' => $this->params['icon_checkbox_for_table'],
'for_id' => $this->params['icon_checkbox_for_id']
],
//'dropup' => true, //default down
'label' => '<i class="fa fa-paper-plane" aria-hidden="true"></i>'
]
Пример работы IconAction
через ajaxDispatcher
. Нажмите на иконку в
карточке и прикрепите документ из другой таблицы иконкой .
Возможно добавлять несколько иконок, настраивая для них разные действия (в данном случае в примере
все иконки
выполняют одно и то же действие).