IconAction
Описание

Класс 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():

  • url для перехода по нему;
  • json, где ключом (объектом) будет выступать название css элемента для вставки в него данных, значение - данные в html тегах (без изменения адреса url);
  • готовые данные для отображения на экране, не меняя адреса url.

'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. Нажмите на иконку в карточке и прикрепите документ из другой таблицы иконкой .
Возможно добавлять несколько иконок, настраивая для них разные действия (в данном случае в примере все иконки выполняют одно и то же действие).

ajDi circle