{'getTable' | snippet: [
'loadModels'=>'raschets',
'table'=>[
'class'=>'raschetsMatClass',
'actions'=>[
'create'=>[
],
'update'=>[
],
],
'pdoTools'=>[
'class'=>'raschetsMatClass',
'limit'=>0,
],
'checkbox'=>0,
'autosave'=>1,
'row'=>[
'id'=>[
],
'label'=>[
'label'=>'Имя',
'filter'=>1
],
],
],
]}

Инструкция loadModels говорит какую модель (базы) MODX загрузить. (Модель пока удобнее создавать через MIGX.)
В table задаются все параметры таблицы:
- class — класс таблицы.
- actions — что можно сделать с таблицей. Для того, чтобы в таблице можно было удалять строки достаточно добавить в action инструкцию ‘remove’=>[],.
- pdoTools — данные в таблицу из базы подготавливает pdoTools. И здесь можно использовать все его параметры.
- checkbox — включить выбор строк чекбоксами.
- autosave — инлайн редактирование данных таблицы. (Для autosave нужно чтоб action update было включено.)
- row — здесь задаются колонки таблицы, которые показываются и редактируются.
Дополнительные параметры сниппета:
- selects — задает селекты используемые в таблицах.
- showLog — выводит лог компонента.
- toJSON- выводит в лог компонента параметры сниппета в формате JSON.
- compile — компилирует таблицу каждый раз при вызове. (Скомпилированная таблица кешируется и берется при повторых вызовах из кеша). Нужен был при отладке.
Доступные действия:
- create — создать запись в таблице. Вызывает модальное окно.
- update — редактировать запись в таблице. Вызывает модальное окно.
- remove- удалить запись в таблице.
- toggle — включить или выключить булево поле в таблице. Поле задается параметром field.
- subtable — показать подтаблицу(под строкой). Подробнее ниже.
- a — добавить в действия ссылку. Еще не тестировалось.
$default_actions = [
'create' =>[
'action'=>'getTable/create',
'title'=>'Создать',
'cls' => '',
'icon' => "$icon_prefix-plus",
'topBar' => [],
'modal' => [
'action' => 'getModal/fetchTableModal',
'tpl'=>'getTableModalCreateUpdateTpl',
],
//'processors'=>['modResource'=>'resource/create'],
],
'update' =>[
'action'=>'getTable/update',
'title'=>'Изменить',
'cls' => '',
'icon' => "$icon_prefix-edit",//'glyphicon glyphicon-edit',
'row' => [],
'modal' => [
'action' => 'getModal/fetchTableModal',
'tpl'=>'getTableModalCreateUpdateTpl',
],
//'processors'=>['modResource'=>'resource/update'],
],
'remove' =>[
'action'=>'getTable/remove',
'title'=>'Удалить',
'cls' => 'btn-danger',
'icon' => "$icon_prefix-trash", //'glyphicon glyphicon-trash',
'multiple' => ['title'=>'Удалить выбранное'],
'row' => [],
],
'toggle' =>[
'action'=>"getTable/toggle",
'title'=>['Включить','Выключить'],
'multiple'=>['Включить','Выключить'],
'cls' => ['btn-danger','btn-success'],
'icon' => $icon_prefix == 'fa fa' ? "$icon_prefix-power-off" : 'glyphicon glyphicon-off',
'field' => 'published',
'row' => [],
],
'subtable' =>[
'action'=>"getTable/subtable",
'title'=>['Открыть','Закрыть'],
'cls' => ['get-sub-show ','get-sub-hide'],//['btn-danger','btn-success'],
'icon' => [$icon_prefix == 'fa fa' ? "$icon_prefix-eye" : 'glyphicon glyphicon-eye-open'
,$icon_prefix == 'fa fa' ? "$icon_prefix-eye-slash" : 'glyphicon glyphicon-eye-close'],
//['glyphicon glyphicon-eye-open','glyphicon glyphicon-eye-close'],
'row' => [],
],
'a' =>[
'action'=>"getTable/a",
'row' => [],
'icon' => '',
'tag' =>'a',
'href' => '',
],
'custom' =>[
'action'=>"getTable/custom",
'row' => [],
'icon' => '',
'tag' =>'a',
'attr' => '',
],
];
Можно создать несколько одинаковых действий. Но надо указывать другой ключ массива и прописывать параметр action. Например:
'subtable_orders'=>[
'action'=>'getTable/subtable',
'subtable_name'=>'tSkladOrders'
'icon' => ['glyphicon glyphicon-object-align-top','glyphicon glyphicon-object-align-bottom'],
],
'subtable_sales'=>[
'action'=>'getTable/subtable',
'subtable_name'=>'tSalesOrders'
'icon' => ['glyphicon glyphicon-triangle-bottom','glyphicon glyphicon-triangle-top'],
],
cls — css-класс добавляеммый к кнопке. row — показывать кнопку в строке. topBar — показывать кнопку в топбаре. multiple — показывать кнопку в топбаре в секции multiple (уточнить потом).table.row
Здесь задаются колонки таблицы, которые показываются и редактируются.
'row'=>[ 'id'=>[ ], 'label'=>[ 'label'=>'Имя', 'filter'=>1 ], ],ключи id,label задают имена полей. Эти поля должны быть в sql-запросе сформированном pdoTools.
В расширенном варианте:
'row'=>[
'cls'=>'{if $sum_closed}hit{else}warning{/if}',
'cols'=>[
'sum_closed'=>[
'class'=>'tSalesOrders',
'label'=>'Остаток заказа',
'content'=>'{if $sum_closed}Оплачено{else}{($price - $sum_amount) | number : 2 : "," : " "}{/if}',
'edit'=>false,
'filter'=>[
'position'=>-10,
'where'=> 'tSalesOrders.sum_closed',
'cols'=>2,
'edit'=>[
'field'=>'sum_closed',
'type'=>'checkbox',
'placeholder'=>'Сумма закрыта',
],
],
],
],
Здесь описания полей задвинуты в параметр cols. Это сделано, чтобы подсветить строки в зависимости от значения поля.
'cls'=>'{if $sum_closed}hit{else}warning{/if}',
Если sum_closed = 1, то строке таблице присваивается css-класс hit окрашивающий строку зеленым. Иначе строка красная.Параметры полей.
Основные:
'label'=>[ 'label'=>'Имя', 'filter'=>1 ],label — подпись поля, 'filter'=>1 выводит в топбар фильтр для этого поля.
Дополнительные:
'sum_closed'=>[
'class'=>'tSalesOrders',
'label'=>'Остаток заказа',
'content'=>'{if $sum_closed}Оплачено{else}{($price - $sum_amount) | number : 2 : "," : " "}{/if}',
'edit'=>false,
'filter'=>[
'position'=>-10,
'where'=> 'tSalesOrders.sum_closed',
'cols'=>2,
'edit'=>[
'field'=>'sum_closed',
'type'=>'checkbox',
'placeholder'=>'Сумма закрыта',
],
],
- class — в какую таблицу базы записывать поле. В компоненте из одной таблицы можно редактировать несколько таблиц базы. (позже дописать. не помню точно)
- 'data'=>1, вывести значение поля в data атрибуты строки. По ним ищутся строки таблицы базы в которые записывать значения.
- edit — параметры вывода поля. type (смотреть как выводит в чанках:getTable.EditRow.tpl,getTable.Modal.CreateUpdate.tpl,getTable.Filter.tpl):
- hidden
- 'row_view','view','disabled'
- view_date
- text
- decimal
- textarea
- checkbox
- select — описание ниже
- date
'default'=>'now', — для типа date можно указать текущую дату или любую дату используя синтаксис strtotime.
'search_fields'=>['payment_type_id'=>2, 'translation_id'=>'translation_id', 'order_id'=>'order_id'], используется вместе с class. Условие поиска строки в 2 редактируемой таблице базы. 'translation_id'=>'translation_id' — это взять data-translation_id (например, data-translation_id=«2») строки, подставить его и искать 'translation_id'=>2 во второй таблице.
- content — если параметр не пустой, то при выводе этого поля запускается $this->pdoTools->getChunk('@INLINE '.$td['content'], $row); где $row строка таблицы.
- filter — параметры фильтра в топбаре для этого поля. filter.edit мержится с edit поля. Используется, чтобы заменить тип поля и другие параметры в фильтре.
Задает селекты используемые в таблицах. Примеры:
'selects'=>[
'users'=>[
'groups'=>'6',
],
'period'=>[
'type'=>'select',
'class'=>'gtsBPeriod',
'pdoTools'=>[
'class'=>'gtsBPeriod',
'select'=>'id,label',
'sortby'=>[
'id'=>'ASC',
],
],
'content'=>'{$label}',
],
'org'=>[
'type'=>'autocomplect',
'class'=>'Orgs',
'pdoTools'=>[
'class'=>'Orgs',
'select'=>'Orgs.id,Orgs.shortname',
'sortby'=>[
'Orgs.shortname'=>'ASC',
],
'where'=>[
'Orgs.manager_id = '~$_modx->user.id,
],
],
'where'=>[
'Orgs.shortname:LIKE'=>'%query%',
],
'content'=>'{$shortname}',
],
],
В параметрах полей используется так:
'row'=>[
'cls'=>'{if $sum_closed}success{/if}',
'cols'=>[
'period_id'=>[
'label'=>'Период',
'class'=>'gtsBTranslation',
'edit'=>['type'=>'select','select'=>'period','force'=>5,'style'=>'min-width:90px;'],
'modal_only'=>1
],
'org_id'=>[
'label'=>'Контрагент зачисления',
'class'=>'gtsBTranslation',
'edit'=>[
'type'=>'select',
'select'=>'org',
'field_content'=>'shortname',
],
'data'=>1,
'filter'=>1
],
'manager_id'=>[
'label'=>'Менеджер',
'class'=>'SendOrgs',
'edit'=>[
'type'=>'select',
'select'=>'users',
'readonly'=>1,
'multiple'=>1,
'force'=>'user_id',
],
'filter'=>1
],
],
],
table.subtablesПример:
{'getTable' | snippet : [
'loadModels'=>'organizations,tsklad,base,gtsbalance,tskladsales',
'table'=>[
'subtables'=>[
'gtsBPayment'=>[
'class'=>'gtsBPayment',
'sub_where'=>['translation_id'=>'id'],
'actions'=>[
'create'=>[
],
'update'=>[
],
'remove'=>[
],
],
'pdoTools'=>[
'class'=>'gtsBPayment',
],
'checkbox'=>0,
'autosave'=>1,
'row'=>[
'id'=>[],
'translation_id'=>['label'=>'Платеж','edit'=>['type'=>'readonly'],],
],
],
],
'class'=>'gtsBTranslation',
'actions'=>[
'update'=>[
],
'subtable'=>['subtable_name'=>'gtsBPayment'],
],
'pdoTools'=>[
'class'=>'gtsBTranslation',
],
'row'=>[
'cls'=>'{if $sum_closed}hit{else}warning{/if}',
'cols'=>[
'id'=>[
'label'=>'Платеж №',
'cls'=>'',
'data'=>1,
'filter'=>['edit'=>['type'=>'text']],
'edit'=>['readonly'=>1],
],
],
],
],
]}
В ключ table.subtables.gtsBPayment записываем таблицу также как основную таблицу, но с параметром 'sub_where'=>['translation_id'=>'id'],.В table.actions.subtable прописываем:
'subtable_name'=>'gtsBPayment'Скриншот. (Не по коду но анналогичный)
Комментарии ()