{'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'Скриншот. (Не по коду но анналогичный)
Комментарии ()