Код самой простой таблицы выглядит так:

{'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 — компилирует таблицу каждый раз при вызове. (Скомпилированная таблица кешируется и берется при повторых вызовах из кеша). Нужен был при отладке.
table.actions
Доступные действия:
  • 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
    'readonly'=>1 — не редактируемое поле.
    '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
Задает селекты используемые в таблицах. Примеры:
'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'
Скриншот. (Не по коду но анналогичный)

19 сентября 2020, 01:20    Александр Туниеков Справка getTables 0    3 0

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Вы можете авторизоваться на сайте через:
    YandexGoogle