[getTables] Компонент редактируемых таблиц на основе bootstrap и pdoTools

При написании компонентов для MODX много времени уходит на программирование редактируемых таблиц через extJs. У меня на это уходит каждый раз до 4 часов. Причем на совершенно однотипные таблицы. В конце концов мне это надоело и я решился написать свой компонент редактируемых таблиц на основе bootstrap и pdoTools— getTables! Сложность задачи я сильно недооценил и компонент сейчас выглядит и исполнен ужастно, но время на программирование таблиц с ним сократилось до 5 минут на простую и до часа на более сложную. Это сильно помогает и getTables я постоянно использую и потихоньку допиливаю. Сейчас на его основе сделано несколько компонентов, которые я хочу выложить в общий доступ. Ну и приходиться выкладывать и getTables, несмотря на не самую лучшую его реализацию.

Есть, конечно, замечательный компонент MIGX, но чтобы его использовать на фронте нужно вытаскивать на фронт extJs ради пары табличек. А bootstrap у меня везде используется.

Для примера вот реализация админки компонента вопросов-ответов gtsReview на getTables.


Код вызова [ [!getTabs? &config=`gtsreview_admin`]]. Инструкция config загружает gts-код табов и таблиц из системной настройки gtsreview_admin в JSON формате. Посмотреть код можно на GitHub

Основы gts-синтаксиса
Код самой простой таблицы выглядит так:
{'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 — здесь задаются колонки таблицы, которые показываются и редактируются.
Таких простых простых таблиц за полгода я уже насоздавал штук 40. Делать их все через extJs было бы очень долго.

Более подробная справка Основы gts-синтаксиса

Ссылка на GitHub
https://modstore.pro/packages/utilities/gettables

UPD 01.02.2021
Судя по скачиваниям, getTables ставит еще кто-то кроме меня, но вопросов по его работе нет. Документация далеко не полная. Я думал пополнять ее по мере вопросов. Если кто getTables пользуется, отзовитесь, чтоб я продолжил работу над документацией :-).
Александр Туниеков
19 сентября 2020, 06:10
modx.pro
2
3 991
+14
Поблагодарить автора Отправить деньги

Комментарии: 136

Артем
25 сентября 2020, 23:21
+1
Это очень крутое и нужное дополнение!
Александр Туниеков
27 сентября 2020, 00:30
0
Кто-нибудь уже начал компонент использовать тестить? Как впечатления?
    R2m0x94 (Vasily)
    04 октября 2020, 02:04
    0
    Попробовал. getTable работает! СУПЕР-круто. Спасибо! :)
    R2m0x94 (Vasily)
    01 октября 2020, 15:40
    0
    А как вывести content товаров и два tv-поля, через &element=`` или через LeftJoin?
    |id|content|tv_1|tv_2|действия|
      Александр Туниеков
      01 октября 2020, 17:41
      +1
      Сейчас вспоминал. Вот что получилось:
      {'getTable' | snippet : [
          'table'=>[
              'class'=>'modResource',
              'actions'=>[
                  'create'=>[
                  ],
                  'update'=>[
                      
                  ],
              ],
              'pdoTools'=>[
                   'class'=>'modResource',
                   'parents'=>258,
                   'includeTVs'=>'icon,price',
              ],
              'checkbox'=>0,
              'autosave'=>1,
              'row'=>[
                      'id'=>[
                          ],
                      'content'=>[
                          ],
                      'icon'=>[
                          'class'=>'TV',
                          ],
                      'price'=>[
                          'class'=>'TV',
                          ],
                  ],
          ],
      ]}


      Только надо иметь ввиду, что таблица пишет в тв даже если к этой странице не привязанно такое TV.
        Александр Туниеков
        01 октября 2020, 18:05
        +1
        'includeTVs'=>'icon,price', — pdoTools делает leftJoin
        А для 'class'=>'TV',
        'price'=>[
                            'class'=>'TV',
                            ],
        getTables преобразует в
        3 => 
                array (
                  'field' => 'price',
                  'type' => 'text',
                  'label' => 'price',
                  'placeholder' => 'price',
                  'where_field' => '`TVprice`.`value`',
                  'class' => 'modTemplateVarResource',
                  'search_fields' => 
                  array (
                    'contentid' => 'id',
                    'tmplvarid' => 1,
                  ),
                  'value_field' => 'value',
                  'as' => 'price',
                ),
        where_field используется если для поля включен фильтр.
        По class и search_fields определяется в какую таблицу базы в какую строку писать изменения.
        Эти инструкции можно самим писать. Кажется так:
        'price'=>[
                            'class'=>'modTemplateVarResource',
                            'edit'=>[
                                  'type'=>'text',
                                 'where_field'=> '`TVprice`.`value`',
                                 'search_fields' => 
                                  [
                                    'contentid' => 'id',
                                    'tmplvarid' => 1,
                                 ]
                            ]
                       ],
          R2m0x94 (Vasily)
          04 октября 2020, 02:05
          0
          А как это вывести на getTable? (На конфиг ругается)
            Александр Туниеков
            04 октября 2020, 18:17
            0
            Что вывести и как ругается?
              R2m0x94 (Vasily)
              04 октября 2020, 18:25
              0
              [[!getTabs? &config=`gtsreview_admin`]]
              На выходе пишет, что
              Нет конфига tabs!
              Уже пробовал создать системную настройку с параметрами из примера выше, но ничего не получилось. Хотелось бы про config узнать подробнее
                Александр Туниеков
                04 октября 2020, 18:29
                0
                Системная настройка gtsreview_admin есть? И там массив в JSON? В массиве есть инструкция tabs на верхнем уровне? :-)
                  Александр Туниеков
                  04 октября 2020, 18:38
                  +2
                  Если нужен пример выше в системную настройку, то создаем сиснастройку, например, test_gettable_tv в нее записываем json массив:
                  {
                      "table": {
                          "class": "modResource",
                          "actions": {
                              "create": [],
                              "update": []
                          },
                          "pdoTools": {
                              "class": "modResource",
                              "parents": 258,
                              "includeTVs": "icon,price"
                          },
                          "checkbox": 0,
                          "autosave": 1,
                          "row": {
                              "id": [],
                              "content": [],
                              "icon": {
                                  "class": "TV"
                              },
                              "price": {
                                  "class": "TV"
                              }
                          }
                      }
                  }

                  И вызываем getTable
                  [[!getTable? &config=`test_gettable_tv`]]
                    Александр Туниеков
                    04 октября 2020, 18:39
                    +1
                    getTable вызывает таблицу, а getTabs — табы. &config в обоих работает.
                    Наверно позже 1 сниппет сделаю, чтоб табы или таблица сам из инструкций определял.
                      R2m0x94 (Vasily)
                      04 октября 2020, 19:06
                      0
                      Создал системную настройку gettables_admin. в неё записал:
                      {
                          "table": {
                              "class": "modResource",
                              "actions": {
                                  "create": [],
                                  "update": []
                              },
                              "pdoTools": {
                                  "class": "modResource",
                                  "parents": 10,
                                  "includeTVs": "keywords,partner_condition_multi",
                                  "where": {"template": 24},
                                  "limit": 20
                              },
                              "checkbox": 0,
                              "autosave": 1,
                              "row": {
                                  "id": [],
                                  "partner_condition_multi": {
                                      "class": "TV"
                                  },
                                  "keywords": {
                                      "class": "TV"
                                  }
                              }
                          }
                      }
                      // Вывел, так
                      [[!getTabs? &config=`gettables_admin`]]
                      Но по прежнему — Нет конфига tabs!
                        Александр Туниеков
                        04 октября 2020, 20:45
                        +1
                        Так у вас в конфиге нет же tabs. Табов нет только таблица. Вызывайте getTable
                        [[!getTable? &config=`gettables_admin`]]
                          R2m0x94 (Vasily)
                          05 октября 2020, 19:43
                          0
                          Надо попробовать, ну а с табами тоже было б неплохо понять как их скомпилировать на вывод.

                          Jgrowl мне пришлось отключить, так как использую замену sweetalert, поэтому скорее всего сильно нагрузка выросла — там мол постоянно был цикличный запрос на этот файл, что повлекло нагрузку на аккаунт
                            Александр Туниеков
                            06 октября 2020, 19:36
                            0
                            С табами разобрались?
                            там же просто
                            {'!getTabs' | snippet : [
                                'tabs'=>[
                                    'tab1'=>[
                                        'label'=>'таб с чанком',
                                        'chunk'=>'какой-то чанк'
                                    ],
                                     'tab2'=>[
                                        'label'=>'таб с таблицей',
                                        'table'=>[
                                            все параметры от таблиц
                                        ]
                                    ],
                                ]
                            ]}
                        Александр Туниеков
                        04 октября 2020, 21:10
                        +1
                        Если у вас включено создание ресурсов
                        "actions": {
                                    "create": [],
                        То нужно еще прописывать поля: pagetitle,parent,template. И лучше наверно через процессор создавать ресурсы
                        'actions'=>[
                                    'create'=>[
                                        'processors'=>['modResource'=>'resource/create',],
                                    ],
                                    'update'=>[
                                        
                                    ],
                                ],
          R2m0x94 (Vasily)
          04 октября 2020, 02:29
          0
          А как это вывести на getTable? (На конфиг ругается)
          *getTabs
          А можно как совместить getTable с компонентом quickview? Или же он тут не ляжет, и надо только обстилить, чтобы модалка заработала?
            Александр Туниеков
            04 октября 2020, 18:23
            +1
            Не пользовался quickview. Так что не знаю что получиться. Вообще в любом чанке должно сработать. А вот если quickview сам чанк по ajax подгружает может скрипты js не подгрузятся. И если у quickview модалки бутстраповкие проблемы с модалками могут возникнуть. Там новая модалка может ниже старой открыться и стратая будет закрывать ее.
            Вообще попробуйте затестить и отпишитесь что как :-).
              R2m0x94 (Vasily)
              04 октября 2020, 19:10
              0
              Отпишусь обязательно, пока только тестировать начал. Компонент очень нужный
                R2m0x94 (Vasily)
                05 октября 2020, 14:25
                0
                Бутстрап грузится от quickview, а из gettables_mgr_framework_style_css — не грузит (в моём случае это хорошо, потом сделаю на quickview). Но для табсов ещё пока застрял на конфиге.
                // gettables
                <button type="button" class="btn get-table-row " data-name="update" data-action="getTable/update" data-modal="getModal/fetchTableModal" title="Изменить">
                
                </button>
                
                // quickview
                <a class="quickview"
                			data-click
                			data-quickview-mode="modal"
                			data-data-action="chunk"
                			data-data-element="test"
                			data-data-id="1"
                			data-dialog-buttons='["close"]'
                			> </a>
                Вот думаю, как их объединить…
                — gettables update выводит ругать в консоль, а именно сам вывод в феном, сейчас думаю объединить с quickview, но с update, что-то я не так делаю, возможно там не надо указывать параметров?
                {'getTable' | snippet : [
                    'table'=>[
                        'class'=>'modResource',
                        'actions'=>[
                            'create'=>[
                            ],
                            'update' =>[
                                'action'=>'getTable/update',
                                'title'=>'Изменить',
                                'cls' => '',
                                
                                'row' => [],
                                'icon' => 'far fa-edit',
                                'modal' => [
                                    'action' => 'getModal/fetchTableModal',
                                    'tpl'=>'b4.getTable.Modal.CreateUpdate.tpl',
                                ],
                                'processors'=>['modResource'=>'resource/update'],
                            ],

                да и не разобрался ещё какой чанк отвечает за actions
                  R2m0x94 (Vasily)
                  05 октября 2020, 15:28
                  0
                  'update' =>[
                                  'action'=>'getTable/update',
                                  'title'=>'Изменить',
                                  'cls' => 'quickview',
                                  'click' => '',
                                  'quickview-mode' => 'modal',
                                  'row' => [],
                                  'icon' => 'far fa-edit',
                                  'modal' => [
                                      'action' => 'getModal/fetchTableModal',
                                      'tpl'=>'b4.getTable.Modal.CreateUpdate.tpl',
                                  ],
                  Было-бы неплохо давать возможность добавлять атрибуты на кнопку, чтобы появилась возможность связи с quickview

                  Класс добавился, а вот другие данные нет
                    Александр Туниеков
                    05 октября 2020, 16:11
                    +1
                    На update какая-то ошибка на поцессоре
                    'processors'=>['modResource'=>'resource/update'],
                    Без него работает.
                    для actions я чанк сперва не сделал. думал потом сделаю, а потом возникла проблема как код перевести в чанк и снова отложилось.
                      Александр Туниеков
                      05 октября 2020, 16:26
                      +1
                      gettables_mgr_framework_style — стиль для админки. gettables_frontend_framework_style — для фронта.
                      Если gettables_frontend_framework_style=bootstrap_v3 по умолчанию грузятся чанки заданные в наборе параметров getTables_bootstrap_v3 yadi.sk/i/Mio_2Fxn2r79jg
                      Если gettables_frontend_framework_style=bootstrap_v4, то набор параметров getTables_bootstrap_v4, а если gettables_frontend_framework_style=test, то будет пробовать найти набор параметров getTables_test

                      чтоб грузило css и js надо включить соответствующие gettables_load_frontend_framework_style. Включение загрузки задается в gettables_load_что-то-там
                        Александр Туниеков
                        05 октября 2020, 16:53
                        +1
                        для quickview наверно стоит попробывать action
                        'custom' =>[
                                        'action'=>"getTable/custom",
                                        'row' => [],
                                        'icon' => '',
                                        'tag' =>'a',
                                        'attr' => '',
                                    ],
                        и все что вам надо в attr запихать.

                        Только не понятно зачем вам quickview? И я под quickview компонент не планировал и не понятно как data-data-id=«1» в кнопку запихать. У меня все data-id в дата атрибутах строки запиханы. yadi.sk/i/0bBau5HI-TkEmA. На action кнопках данные строки не подставляются.

                        Вы еще можете вместо добавления кнопки в колонку действия, запихать кнопку в отдельную колонку.
                        "row": {
                                    "id": [],
                                    "partner_condition_multi": {
                                        "class": "TV"
                                    },
                                    "keywords": {
                                        "class": "TV"
                                    },
                                    "test": {
                                        "label":"quickview",
                                        "content":"<a class=\"quickview\" data-click
                        			data-quickview-mode=\"modal\"
                        			data-data-action=\"chunk\"
                        			data-data-element=\"test\"
                        			data-data-id=\"{$id}\"
                        			data-dialog-buttons='[\"close\"]'
                        			> </a>"
                                    }
                                }
                        код примерный
                          R2m0x94 (Vasily)
                          05 октября 2020, 18:06
                          0
                          Намудрил, что-то не выходит. Вместо ссылки <\a — в таблице <\input
                          {'getTable' | snippet : [
                              'table'=>[
                                  'class'=>'modResource',
                                  'actions'=>[
                                      'create'=>[
                                      ],
                                      'update' =>[
                                          'action'=>'getTable/update',
                                          'title'=>'{$_modx->resource.id}',
                                          'cls' => '=',
                                          'row' => [],
                                          'icon' => 'far fa-edit',
                                          'modal' => [
                                              'action' => 'getModal/fetchTableModal',
                                              'tpl'=>'b4.getTable.Modal.CreateUpdate.tpl',
                                          ],
                                          
                                      ],
                                  ],
                                  'custom' =>[
                                          'action'=>"getTable/custom",
                                          'row' => [],
                                          'icon' => 'far fa-edit',
                                          'tag' =>'a',
                                          'attr' => 'data-data-tag',
                                      ],
                                  'pdoTools'=>[
                                       'class'=>'modResource',
                                       'parents'=>10,
                                       'template'=>24,
                                       'resource'=>'52603',
                                       'includeTVs'=>'keywords,partner_condition_multi',
                                       'where'=>[
                                          	'template' => 24, 
                                          	'id:IN' => ['', 52603, 2],
                                          ],
                                       'limit'=>20,
                                  ],
                                  'checkbox'=>0,
                                  'autosave'=>1,
                                  'row'=>[
                                          'id'=>[],
                                          'partner_condition_multi'=>[
                                              'class'=>'TV',
                                              ],
                                          'keywords'=>[
                                              'class'=>'TV',
                                              'edit'=>[
                                                  'type'=>'text',
                                                  'where_field'=>'`TVkeywords`.`value`',
                                                  'search_fields' => [
                                                      'contentid' => 'id',
                                                      'tmplvarid' => 6,
                                                  ]
                                              ]
                                             ],
                                          'test'=>[
                                              'label'=>'quickview',
                                              'content'=>'<a >da</a>',
                                              ],
                                      ],
                              ],
                          ]}
                            R2m0x94 (Vasily)
                            05 октября 2020, 18:29
                            0
                            {'getTable' | snippet : [
                                'table'=>[
                                    'class'=>'modResource',
                                    'actions'=>[
                                        'create'=>[
                                        ],
                                        'update' =>[
                                            'action'=>'getTable/custom',
                                            'title'=>'{$_modx->resource.id}',
                                            'cls' => 'quickview" data-click quickview-mode="modal" data-data-action="chunk" data-data-id="{$_modx->resource.id}" data-data-element="getTable.Modal.CreateUpdate.tpl" data-dialog-size="size-wide" data-dialog-title="safasfa"',
                                            'row' => [],
                                            'icon' => 'far fa-edit',
                                            'modal' => [
                                                'action' => 'getModal/fetchTableModal',
                                                'tpl'=>'b4.getTable.Modal.CreateUpdate.tpl',
                                            ],
                                            
                                        ],
                                    ],
                                    'custom' =>[
                                            'action'=>"getTable/custom",
                                            'row' => [],
                                            'icon' => 'far fa-edit',
                                            'tag' =>'a',
                                            'attr' => 'data-data-tag',
                                        ],
                                    'pdoTools'=>[
                                         'class'=>'modResource',
                                         'parents'=>10,
                                         'template'=>24,
                                         'resource'=>'52603',
                                         'includeTVs'=>'keywords,partner_condition_multi',
                                         'where'=>[
                                            	'template' => 24, 
                                            	'id:IN' => ['', 52603, 2],
                                            ],
                                         'limit'=>20,
                                    ],
                                    'checkbox'=>0,
                                    'autosave'=>1,
                                    'row'=>[
                                            'id'=>[],
                                            'partner_condition_multi'=>[
                                                'class'=>'TV',
                                                ],
                                            'keywords'=>[
                                                'class'=>'TV',
                                                'edit'=>[
                                                    'type'=>'text',
                                                    'where_field'=>'`TVkeywords`.`value`',
                                                    'search_fields' => [
                                                        'contentid' => 'id',
                                                        'tmplvarid' => 6,
                                                    ]
                                                ]
                                               ],
                                            'test'=>[
                                                'label'=>'quickview',
                                                'content'=>'<a >da</a>',
                                                ],
                                        ],
                                ],
                            ]}

                            получилось окно вывести, но проблема в том, что окно в окне получилось и на выходе пусто

                            // в attr вывести не удалось атрибуты
                            'attr' => '',
                              Александр Туниеков
                              05 октября 2020, 22:58
                              +1
                              custom должно быть в массиве actions
                              Вот мой конфиг:
                              {'getTable' | snippet : [
                                  'showLog'=>1,
                                  'toJSON'=>1,
                                  'table'=>[
                                      'class'=>'modResource',
                                      'actions'=>[
                                          'create'=>[
                                              
                                          ],
                                          'update'=>[
                                              'processors'=>['modResource'=>'resource/update',],
                                          ],
                                          'custom' =>[
                                              'action'=>"getTable/custom",
                                              'row' => [],
                                              'cls'=>'red',
                                              'icon' => 'glyphicon glyphicon-edit',
                                              'tag' =>'a',
                                              'attr' => 'data-data-tag',
                                          ],
                                      ],
                                      'pdoTools'=>[
                                           'class'=>'modResource',
                                           'parents'=>258,
                                           'includeTVs'=>'icon,price',
                                      ],
                                      'checkbox'=>0,
                                      'autosave'=>1,
                                      'row'=>[
                                              'id'=>[
                                                  ],
                                              'content'=>[
                                                  ],
                                              'icon'=>[
                                                  'class'=>'TV',
                                                  ],
                                              'price'=>[
                                                  'class'=>'TV',
                                                  ],
                                              'test'=>[
                                                  'label'=>'quickview',
                                                  'content'=>'<a >da</a>',
                                                  'edit'=>false,
                                                  ],
                                          ],
                                  ],
                              ]}
                              только в custom всетаки ошибка забыл кавычки поставить. Ладно попробую сегодня новую версию getTables выпустить.
                              Но все таки зачем вам quickview что вы в нем хотите сделать? может это по другому решать надо?
                                R2m0x94 (Vasily)
                                06 октября 2020, 08:58
                                0
                                Просто, задумка такова, чтобы связать сниппеты, например у меня используется mFilter2 и в нем quickview, я вывожу всё это дело в таблицу с фильтром, и тут появился getTables, который надо внедрить в mFilter2, соответственно решено было скрестить их, но перем маштабом, появилась необходимость сделать возможность окон на редактирование через quickview, так как он все равно подгружается, а из бутстрапа только сетка css и modal-dialog, конечно если есть решение как вывести mFilter2 с getTable, буду только рад. :)
                                  Александр Туниеков
                                  06 октября 2020, 19:06
                                  0
                                  Скрестить getTables с mFilter2 — такого никогда не задумывалось :-). getTables получает данные таблиц только от pdoTools. По хорошему нужно переписывать функции. В core\components\gettables\core\gettable.class.php
                                  generateData чтобы каким-то образом брал данные из mFilter2. Возможно еще потребуется изменить addFilterTable и в core\components\gettables\core\getmodal.class.php generateEditsData и в core\components\gettables\core\gettableprocessor.class.php check_rows.
                                  По топорному можно добавить в таблицу фильтр с 'where_field'=>'`modResource`.`id`:IN',
                                  mFilter2 заставить выдавать только ids и на mse_load (точно не помню) забивать в этот фильтр ids и обновлять таблицу getTables.sendData.$GtsApp = $('.get-table');getTables.Table.refresh();
                                  (Здесь только для getTables надо пару строк добавить чтоб :IN коректно отрабатывало)
                                  R2m0x94 (Vasily)
                                  06 октября 2020, 11:11
                                  0
                                  Подключил bootstrap без quickview, окно открылось с полями, как и было задумано, но при сохранении в уведомлении пишет, что объект не сохранен.
                                  Object   не сохранен update
                                  И не сохранились значения, а напрямую в таблице всё сохраняется и сохранялось без проблем
                                    R2m0x94 (Vasily)
                                    06 октября 2020, 11:36
                                    0
                                    Ой, забыл добавить alias, теперь всё норм
                      R2m0x94 (Vasily)
                      05 октября 2020, 16:02
                      0
                      Ещё предложение добавить словари для настройки, а то когда переходишь в систему управления — описание нету и сложно додуматься, что для чего нужно. Спасибо
                        Александр Туниеков
                        05 октября 2020, 16:14
                        0
                        Мда… так и знал стоит выложить и куча работы добавят :-).
                          Александр Туниеков
                          06 октября 2020, 06:06
                          +1
                          Обновил компонент
                          1.5.3-alpha
                          ==============
                          — Чанк для action.
                          — Попровлена ошибка проверки существования строки в таблице перед записью.
                          — Добавлены описания для системных параметров.

                          Во все action теперь можно добавить произвольные атрибуты через attr.
                          'actions'=>[
                                      'custom' =>[
                                          'action'=>"getTable/custom",
                                          'row' => [],
                                          'cls'=>'red',
                                          'icon' => 'glyphicon glyphicon-edit',
                                          'tag' =>'a',
                                          'attr' => 'data-data-tag="a"',
                                      ],
                                  ],
                          Проверил
                          'update'=>[
                                          'processors'=>['modResource'=>'resource/update',],
                                      ],
                          Процессор resource/update требует чтобы поле alias было.
                            R2m0x94 (Vasily)
                            07 октября 2020, 21:33
                            0
                            А есть, какой-то простой способ редактировать поле (уже из выборки pdo) tv через процессор напрямую из фронтенда?
                              Александр Туниеков
                              07 октября 2020, 21:37
                              0
                              Через процессор нет способа. А зачем? и через какой процессор?
                          R2m0x94 (Vasily)
                          06 октября 2020, 16:54
                          0
                          Ещё предлагаю внести корректировки в textarea, чтобы можно было кодить с ACE
                          // такова типа (или же из системной настройки, если он установлен и возможность вкл/выкл редактора в системной настройке)
                          <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js"></script>
                          <style>
                              .autosize {
                                /*resize: none;
                                overflow: hidden;*/
                                height:400px!important;
                              }
                              .autosize[readonly], .autosize[readonly] div {
                                  background: brown;
                                  user-select: none;
                                  cursor: not-allowed;
                              }
                          </style>
                          
                          autosize();
                          function autosize(){
                              var text = $('.autosize');
                          
                              text.each(function(){
                                  $(this).attr('rows',1);
                                  resize($(this));
                              });
                          
                              text.on('input', function(){
                                  resize($(this));
                              });
                              
                              function resize ($text) {
                                  $text.css('height', 'auto');
                                  $text.css('height', $text[0].scrollHeight+'px');
                              }
                          }
                          
                          // Hook up ACE editor to all textareas with data-editor attribute
                          $(function() {
                            $('textarea[data-editor]').each(function() {
                              var textarea = $(this);
                              var mode = textarea.data('editor');
                              var editDiv = $('<div>', {
                                position: 'absolute',
                                width: textarea.width(),
                                height: textarea.height(),
                                'class': textarea.attr('class'),
                                'readonly': textarea.attr('readonly')
                              }).insertBefore(textarea);
                          
                              textarea.css('display', 'none');
                              var editor = ace.edit(editDiv[0]);
                              editor.renderer.setShowGutter(textarea.data('gutter'));
                              editor.getSession().setValue(textarea.val());
                              editor.getSession().setMode("ace/mode/" + mode);
                              editor.setTheme("ace/theme/idle_fingers");
                              //editor.setTheme("ace/theme/chrome");
                          
                              // copy back to textarea on form submit...
                              textarea.closest('form').submit(function() {
                                textarea.val(editor.getSession().getValue());
                              })
                            });
                          });
                          
                          
                          
                          // Ещё в чанк getTable.EditRow.tpl для textarea
                              {case 'textarea'}
                                  <textarea data-editor="xml" data-gutter="1" rows="15" data-field="{$edit.field}" name="{$edit.field}" placeholder="{$edit.placeholder}" class="form-control autosize get-table-autosave"
                                      style="max-height: 400px;" {if $edit.readonly}readonly{/if}>{$edit.value}</textarea>
                                  <span class="error_{$edit.field}"></span>
                            Александр Туниеков
                            06 октября 2020, 19:19
                            +1
                            Интересный вариант. Только не понятно textarea.closest('form').submit не должно сработать на строке таблицы. И другие редакторы тоже хотелось бы подключать.
                              Александр Туниеков
                              06 октября 2020, 20:24
                              0
                              думаю подключить ACE и CKEditor. Наверно надо будет указывать
                              'row'=>[
                                  'content'=>[
                                      'edit'=>[
                                          'type'=>'textarea',
                                          'editor'=>'ACE', или 'CKEditor'
                                      ]
                                  ]
                              ]
                              автоматом выбрать редактор не понятно по какому признаку можно :-(.
                                R2m0x94 (Vasily)
                                07 октября 2020, 10:21
                                0
                                Было б вообще волшебно, чтоб как в админке с emmet'ом, но пока ещё эта настройка 'editor'=>'ACE' — не работает
                                  Александр Туниеков
                                  07 октября 2020, 20:14
                                  0
                                  Не нравиться мне в таблицу редактор запихивать. Строки разьезжаются и это уже не таблица получается yadi.sk/i/uZxbjTVkxqx1kQ
                                  Может лучше к модалке редакторы цеплять? yadi.sk/i/9UrYl9rYeDbZrA сюда?
                                    R2m0x94 (Vasily)
                                    07 октября 2020, 20:16
                                    0
                                    Ну да в модалке можно, просто при ajax пагинации ace слитает
                                      Александр Туниеков
                                      07 октября 2020, 20:22
                                      0
                                      В assets\components\gettables\js\gettables.js я вешаю обработчик на событие открытия модалки
                                      getTables.$doc.on('shown.bs.modal', function (event) {
                                                      $('.get-date').each(function(){
                                                          $(this).datepicker();
                                                      });
                                                      $('.get-select-multiple').each(function(){
                                                          $(this).multiselect();
                                                      });
                                                  });
                                      И редакторы тудаже тогда запихаю
                                  R2m0x94 (Vasily)
                                  07 октября 2020, 12:39
                                  0
                                  А как сделать, если стр. много и при переключении на вторую стр. редактор-ACE не слитал?
                                R2m0x94 (Vasily)
                                07 октября 2020, 20:13
                                0
                                Попробовал выводить модалку quickview, а в ней форму редактирования, но не вышло. Взял за основу пример 5.
                                Окно открылось, но getTable сниппет отдаёт 'не найдено', хоть и в сервис quickview подключил getTable.

                                ...
                                                            }
                                            }
                                        }
                                    }
                                }
                                0.0000050: __construct
                                0.0000019: getTables loaded.
                                0.0000191: cacheConfig
                                0.0004060: getTables init from cache.
                                0.0004311: load propertySet getTables_bootstrap_v3
                                0.0000069: cacheConfig
                                0.0002370: registerCSS_JS
                                0.0001199: handleRequest getTable/fetch
                                0.4405050: Total time
                                2 097 152: Memory usage
                                  Александр Туниеков
                                  07 октября 2020, 20:17
                                  0
                                  Как вызываешь покажи весь код
                                    R2m0x94 (Vasily)
                                    07 октября 2020, 20:25
                                    0
                                    // id'шники вывожу на стр.
                                    <div class="quickview-parent"
                                    	data-quickview-mode="modal"
                                    	data-data-action="chunk"
                                    	data-data-element="quickview.tpl"
                                    	data-quickview-loop="true"
                                    	data-quickview-viewhash="true"
                                    	data-dialog-size="size-wide"
                                    	data-dialog-buttons='["prev","next"]'>
                                    	[[!pdoPage?
                                    		&parents=`3679`
                                    		&element=`msProducts`
                                    		&tpl=`@INLINE
                                    		<a class='quickview'
                                    		    data-click
                                    		    data-data-id="[[+id]]"
                                    		    data-quickview-group="product"
                                    		    data-dialog-title="[[+pagetitle]]">[[+pagetitle]]</a>
                                    	`]]
                                    	[[!+page.nav]]
                                    </div>
                                    
                                    // В чанке quickview.tpl
                                        {'!getTable' | snippet : [
                                        'showLog'=>1,
                                        'toJSON'=>1,
                                        'table'=>[
                                            'class'=>'modResource',
                                            'actions'=>[
                                                'update' =>[
                                                    'icon' => 'far fa-edit',
                                                    'processors'=>['modResource'=>'resource/update'],
                                                ],
                                            ],
                                            'pdoTools'=>[
                                                'class'=>'modResource',
                                                'parents'=>3679,
                                                'template'=>4,
                                                'includeTVs'=>'technical_specifications,equipment,videos',
                                                'where'=>[
                                                    'template' => 4, 
                                                    'id' => $_modx->resource.id,
                                                ],
                                                'limit'=>5,
                                            ],
                                            'checkbox'=>0,
                                            'autosave'=>1,
                                            'row'=>[
                                                'id'=>[
                                                    'custom' =>[
                                                    
                                                    'cls'=>'red',
                                                    'icon' => 'far fa-edit',
                                                    'tag' =>'a',
                                                    'attr' => 'data-data-tag',
                                                    ],
                                                ],
                                                'content'=>[
                                                    'edit'=>[
                                                        'type'=>'textarea',
                                                    ],
                                                    
                                                ],
                                                'technical_specifications'=>[
                                                    'class'=>'TV',
                                                    'label'=>'Технические характеристики',
                                                    'edit'=>['type'=>'textarea',],
                                                ],
                                                'equipment'=>[
                                                    'class'=>'TV',
                                                    'label'=>'Комплект поставки',
                                                    'edit'=>[
                                                        'type'=>'textarea',
                                                        'where_field'=>'`TVequipment`.`value`',
                                                        'search_fields' => [
                                                            'contentid' => 'id',
                                                            'tmplvarid' => 95,
                                                        ],
                                                        'readonly'=>1,
                                                    ],
                                                    
                                               ],
                                               'videos'=>[
                                                    'class'=>'TV',
                                                    'label'=>'Видео',
                                                    'edit'=>['type'=>'textarea',],
                                                ],
                                               'alias'=>['edit'=>['readonly'=>1,],],
                                            ],
                                        ],
                                    ]}
                                      Александр Туниеков
                                      07 октября 2020, 20:38
                                      0
                                      'id' => $_modx->resource.id, сюда вот что приходит? какой id?
                                        R2m0x94 (Vasily)
                                        07 октября 2020, 20:53
                                        0
                                        не найдено
                                        0.5348940: toJSON {
                                            "getTableEditRowTpl": "getTable.EditRow.tpl",
                                            "getTableFilterTpl": "getTable.Filter.tpl",
                                            "getTableModalCreateUpdateTpl": "getTable.Modal.CreateUpdate.tpl",
                                            "getTableNavTpl": "getTable.nav.tpl",
                                            "getTableOuterTpl": "getTable.outer.tpl",
                                            "getTableRowTpl": "getTable.row.tpl",
                                            "getTabsTpl": "getTabs.tpl",
                                            "limit": 10,
                                            "outputSeparator": "\n",
                                            "sortby": "id",
                                            "sortdir": "ASC",
                                            "showLog": 1,
                                            "table": {
                                                "class": "modResource",
                                                "actions": {
                                                    "update": {
                                                        "icon": "far fa-edit",
                                                        "processors": {
                                                            "modResource": "resource\/update"
                                                        }
                                                    }
                                                },
                                                "pdoTools": {
                                                    "class": "modResource",
                                                    "parents": 3679,
                                                    "template": 4,
                                                    "includeTVs": "technical_specifications,equipment,videos",
                                                    "where": {
                                                        "template": 4,
                                                        "id": 3690
                                                    },
                                                    "limit": 5
                                                },
                                                "checkbox": 0,
                                                "autosave": 1,
                                                "row": {
                                                    "id": {
                                                        "custom": {
                                                            "cls": "red",
                                                            "icon": "far fa-edit",
                                                            "tag": "a",
                                                            "attr": "data-data-tag"
                                                        }
                                                    },
                                                    "content": {
                                                        "edit": {
                                                            "type": "textarea"
                                                        }
                                                    },
                                                    "technical_specifications": {
                                                        "class": "TV",
                                                        "label": "\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438",
                                                        "edit": {
                                                            "type": "textarea"
                                                        }
                                                    },
                                                    "equipment": {
                                                        "class": "TV",
                                                        "label": "\u041a\u043e\u043c\u043f\u043b\u0435\u043a\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0438",
                                                        "edit": {
                                                            "type": "textarea",
                                                            "where_field": "`TVequipment`.`value`",
                                                            "search_fields": {
                                                                "contentid": "id",
                                                                "tmplvarid": 95
                                                            },
                                                            "readonly": 1
                                                        }
                                                    },
                                                    "videos": {
                                                        "class": "TV",
                                                        "label": "\u0412\u0438\u0434\u0435\u043e",
                                                        "edit": {
                                                            "type": "textarea"
                                                        }
                                                    },
                                                    "alias": {
                                                        "edit": {
                                                            "readonly": 1
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                        0.0000050: __construct
                                        0.0000019: getTables loaded.
                                        0.0000341: cacheConfig
                                        0.0005000: load propertySet getTables_bootstrap_v3
                                        0.0000069: cacheConfig
                                        0.0002151: registerCSS_JS
                                        0.0001290: handleRequest getTable/fetch
                                        0.5363231: Total time
                                        4 194 304: Memory usage
                                          Александр Туниеков
                                          07 октября 2020, 21:34
                                          +1
                                          А это здесь ошибка
                                          if($action == "fetch" and !$this->config['isAjax'])
                                                          return $this->fetch($data);
                                                  
                                                  //$this->getTables->addDebug($data['table_name'],'handleRequest  $table_name');
                                                  if(!$table = $this->getTables->getClassCache('getTable',$data['table_name'])){
                                                      return $this->error("{$data['table_name']} не найдено");
                                                  }
                                          Определяет, что запрос по ajax и не пускает в метод fetch.
                                          А по ajax пускать в fetch опасно. Можно тогда произвольный конфиг туда передать и вытащить любую любую таблицу modx :-(.
                                          Можно сделать сниппет такой getTableFetch
                                          <?php
                                          /** @var modX $modx */
                                          /** @var array $scriptProperties */
                                          /** @var getTables $getTables */
                                          //$getTables = $modx->getService('getTables', 'getTables', MODX_CORE_PATH . 'components/gettables/model/', $scriptProperties);
                                          
                                          $gettables_core_path = $modx->getOption('gettables_core_path',null, MODX_CORE_PATH . 'components/gettables/core/');
                                          $gettables_core_path = str_replace('[[+core_path]]', MODX_CORE_PATH, $gettables_core_path);
                                          if (!$modx->loadClass('gettables', $gettables_core_path, false, true)) {
                                              return 'Could not load getTables class!';
                                          }
                                          if (!$modx->loadClass('getTable', $gettables_core_path, false, true)) {
                                              return 'Could not load getTable class!';
                                          }
                                          //echo "<pre>".print_r($scriptProperties,1)."<pre>";
                                          
                                          $getTables = new getTables($modx, $scriptProperties);
                                          if (!$getTables) {
                                              return 'Could not load getTables class!';
                                          }
                                          
                                          $getTables->pdoTools->addTime('getTables loaded.');
                                          $getTables->initialize();
                                          
                                          //$response = $getTables->handleRequest('getTable/fetch');
                                          $class = 'getTable';
                                          $getTable = new getTable($getTables, $getTables->config);
                                          if (!$getTable) {
                                              return 'Could not load getTable class!';
                                          }else{
                                              $response = $getTable->fetch();
                                          }
                                          
                                          if(!$response['success']){
                                              $output = $response['message'];
                                          }else{
                                              $output = $response['data']['html'];
                                          }
                                          
                                          $log = '';
                                          if ($modx->user->hasSessionContext('mgr') && !empty($showLog)) {
                                              $log .= $response['log'];
                                          }
                                          return $output.$log;
                                            R2m0x94 (Vasily)
                                            07 октября 2020, 23:02
                                            0
                                            Да, getTableFetch выводит в quickview супер-круто. Спасибо
                                        Александр Туниеков
                                        07 октября 2020, 20:47
                                        0
                                        У меня нет quickview я проверить не могу
                                    R2m0x94 (Vasily)
                                    07 октября 2020, 20:20
                                    0
                                    А какой синтаксис параметров !getTable вывести их из коробки? Например
                                    [[!getTable? &table=`в фигурных или квадратных?`]]
                                      Александр Туниеков
                                      07 октября 2020, 20:26
                                      0
                                      Э… квадратные скобки это для феном только. А без фенома можно только из системной настройки через config вывести.
                                        R2m0x94 (Vasily)
                                        07 октября 2020, 20:29
                                        0
                                        интересно, попробую…
                                      Александр Туниеков
                                      08 октября 2020, 00:08
                                      +1
                                      1.5.4-alpha
                                      ==============
                                      — Добавлены редакторы для textarea: ace и ckeditor.

                                      Включение ace:
                                      В системных настройках включить gettables_load_frontend_ace
                                      В конфиге edit поля таблицы прописать 'editor'=>'ace':
                                      ...
                                      'row'=>[
                                              'content'=>[
                                                  'edit'=>        ['type'=>'textarea','editor'=>'ace','editor_mode'=>'xml','editor_height'=>'300','editor_theme'=>'idle_fingers'],
                                                  ],
                                      ....
                                      Включение ckeditor:
                                      В системных настройках включить gettables_load_frontend_ckeditor
                                      В конфиге edit поля таблицы прописать 'editor'=>'ckeditor':
                                      ...
                                      'row'=>[
                                              'content'=>[
                                                  'edit'=>        ['type'=>'textarea','editor'=>'ckeditor',],
                                                  ],
                                      ....
                                      ace с параметром readonly не получилось совместить :-(
                                        R2m0x94 (Vasily)
                                        08 октября 2020, 00:28
                                        0
                                        там в js 1 строчка кода. я для этого дописал
                                        'readonly': textarea.attr('readonly')
                                        или в конструкторе
                                        'readonly'=>'readonly',
                                          Александр Туниеков
                                          08 октября 2020, 00:46
                                          0
                                          Это я написал. Вообще практически тоже самое что ты написал. Но редактировать дает.
                                          У тебя еще
                                          .autosize[readonly], .autosize[readonly] div {
                                                  background: brown;
                                                  user-select: none;
                                                  cursor: not-allowed;
                                              }
                                          тоже применил, но снова редактировать дает и ничего не видно все brown покрашено.
                                            R2m0x94 (Vasily)
                                            08 октября 2020, 09:17
                                            0
                                            Главное, что запись в него не идёт. Хотя есле в инпекторе браузера убрать атрибут readonly, то сохраняет. Я вот, что не понял, когда в quickview выаожу таблицу, то там почему-то не идёт сохранение через GetTablesFetch, может ещё надо какую строку подкрутить?

                                            Ну а в модульном всё сохраняет))
                                              Александр Туниеков
                                              08 октября 2020, 09:45
                                              0
                                              Я вот, что не понял, когда в quickview выаожу таблицу, то там почему-то не идёт сохранение через GetTablesFetch, может ещё надо какую строку подкрутить
                                              Я вот не понял какое именно сохранение. И через сниппет никакого сохранения нету. Все операции через ajax идут. Через quickview вообще скрипт assets\components\gettables\js\gettables.js подгружается?
                                                R2m0x94 (Vasily)
                                                08 октября 2020, 09:47
                                                0
                                                Да, скрипт assets\components\gettables\js\gettables.js подгружается, а позавчера сохранялось всё норм было
                                                  R2m0x94 (Vasily)
                                                  08 октября 2020, 09:49
                                                  0
                                                  Скорей всего это из-за моего шаманства. Сейчас проверю…
                                                    Александр Туниеков
                                                    08 октября 2020, 10:02
                                                    0
                                                    В твоем шаманстве только ты разберешься :-)
                                                      R2m0x94 (Vasily)
                                                      08 октября 2020, 10:33
                                                      0
                                                      Да, это в чанке getTable.EditRow.tpl, напортачил))
                                                      <textarea data-editor="xml" data-gutter="1" rows="15"
                                                      из-за этого авто сохранение почему-то перестаёт работать
                                                        R2m0x94 (Vasily)
                                                        08 октября 2020, 11:05
                                                        0
                                                        Только вот без этого ace пропадает, но сохраняет, а с ace не сохраняет. Плюс в параметрах
                                                        'content'=>[
                                                                        'edit'=>[
                                                                            'type'=>'textarea','editor'=>'ace','editor_mode'=>'xml','editor_height'=>'400','editor_theme'=>'idle_fingers'
                                                                        ],
                                                        и все равно атрибуты не подсовывает
                                                R2m0x94 (Vasily)
                                                08 октября 2020, 09:45
                                                0
                                                да и если просто getTable на странице выводу то перестал автосохранять
                                                  R2m0x94 (Vasily)
                                                  08 октября 2020, 11:13
                                                  0
                                                  А в модулюном quickview теперь «Строка таблицы не найдена» и не происходит автосохранение
                                                  0.0044389: __construct
                                                  0.0000319: cacheConfig
                                                  0.0001361: handleRequest getTable/autosave
                                                  0.0006440: xPDO query object created
                                                  0.0005109: Included list of tvs: equipment, technical_specifications, videos
                                                  0.0002639: leftJoined modTemplateVarResource as TVequipment
                                                  0.0000439: leftJoined modTemplateVarResource as TVtechnical_specifications
                                                  0.0000389: leftJoined modTemplateVarResource as TVvideos
                                                  0.0000961: Added selection of msProduct: `id`, `type`, `contentType`, `pagetitle`, `longtitle`, `description`, `alias`, `alias_visible`, `link_attributes`, `published`, `pub_date`, `unpub_date`, `parent`, `isfolder`, `introtext`, `content`, `richtext`, `template`, `menuindex`, `searchable`, `cacheable`, `createdby`, `createdon`, `editedby`, `editedon`, `deleted`, `deletedon`, `deletedby`, `publishedon`, `publishedby`, `menutitle`, `donthit`, `privateweb`, `privatemgr`, `content_dispo`, `hidemenu`, `class_key`, `context_key`, `content_type`, `uri`, `uri_override`, `hide_children_in_tree`, `show_in_tree`, `properties`
                                                  0.0000060: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `equipment`
                                                  0.0000021: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `technical_specifications`
                                                  0.0000019: Added selection of modTemplateVarResource: IFNULL(`value`, '') AS `videos`
                                                  0.0000191: Replaced TV conditions
                                                  0.0000060: Processed additional conditions
                                                  0.0000880: Added where condition: id=3374, modResource.id:IN(3374)
                                                  0.0000029: Replaced TV conditions
                                                  0.0000598: Sorted by modResource.id, ASC
                                                  0.0000041: Limited to 1, offset 0
                                                  0.0002069: SQL prepared "SELECT `msProduct`.`id`, `msProduct`.`type`, `msProduct`.`contentType`, `msProduct`.`pagetitle`, `msProduct`.`longtitle`, `msProduct`.`description`, `msProduct`.`alias`, `msProduct`.`alias_visible`, `msProduct`.`link_attributes`, `msProduct`.`published`, `msProduct`.`pub_date`, `msProduct`.`unpub_date`, `msProduct`.`parent`, `msProduct`.`isfolder`, `msProduct`.`introtext`, `msProduct`.`content`, `msProduct`.`richtext`, `msProduct`.`template`, `msProduct`.`menuindex`, `msProduct`.`searchable`, `msProduct`.`cacheable`, `msProduct`.`createdby`, `msProduct`.`createdon`, `msProduct`.`editedby`, `msProduct`.`editedon`, `msProduct`.`deleted`, `msProduct`.`deletedon`, `msProduct`.`deletedby`, `msProduct`.`publishedon`, `msProduct`.`publishedby`, `msProduct`.`menutitle`, `msProduct`.`donthit`, `msProduct`.`privateweb`, `msProduct`.`privatemgr`, `msProduct`.`content_dispo`, `msProduct`.`hidemenu`, `msProduct`.`class_key`, `msProduct`.`context_key`, `msProduct`.`content_type`, `msProduct`.`uri`, `msProduct`.`uri_override`, `msProduct`.`hide_children_in_tree`, `msProduct`.`show_in_tree`, `msProduct`.`properties`, IFNULL(`TVequipment`.`value`, '') AS `equipment`, IFNULL(`TVtechnical_specifications`.`value`, '') AS `technical_specifications`, IFNULL(`TVvideos`.`value`, '') AS `videos` FROM `modx_site_content` AS `msProduct` LEFT JOIN `modx_site_tmplvar_contentvalues` `TVequipment` ON `TVequipment`.`contentid` = `msProduct`.`id` AND `TVequipment`.`tmplvarid` = 95 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVtechnical_specifications` ON `TVtechnical_specifications`.`contentid` = `msProduct`.`id` AND `TVtechnical_specifications`.`tmplvarid` = 94 LEFT JOIN `modx_site_tmplvar_contentvalues` `TVvideos` ON `TVvideos`.`contentid` = `msProduct`.`id` AND `TVvideos`.`tmplvarid` = 96 WHERE  ( `msProduct`.`id` = 3374 AND `modResource`.`id` IN (3374) )  ORDER BY modResource.id ASC LIMIT 1 "
                                                  0.0004120: Could not process query, error #1054: Unknown column 'modResource.id' in 'where clause'
                                                  0.0074599: Total time
                                                  4 194 304: Memory usage
                                            R2m0x94 (Vasily)
                                            08 октября 2020, 10:46
                                            0
                                            В конфиге edit поля таблицы прописать 'editor'=>'ace':
                                            Обновил версию, но редактор так и не подключился
                                              Александр Туниеков
                                              08 октября 2020, 11:26
                                              0
                                              ctrl f5 делали? и редактор только в модалке при редактировании. yadi.sk/i/Vf4qQw0XBt0Vew
                                                R2m0x94 (Vasily)
                                                08 октября 2020, 13:37
                                                0
                                                Да в модульном есть, но модульное не использую, так как и так в quickview таблица в модульном выводится. И надо в таблице прикрутить редактор. Прикрутить, то получается, вот только загвоздка при авто сохранении не понимаю ничего не происходит, а когда из textarea убираю атрибут data-editor=«xml», то редактор слитает и авто сохранение происходит.

                                                Если добавить класс к textarea[data-editor] в assets/components/gettables/js/gettables.js
                                                $('.ace_text-input').addClass('get-table-autosave');
                                                То вообще row не выводится
                                                  Александр Туниеков
                                                  08 октября 2020, 20:57
                                                  0
                                                  что-то вроде этого воткните
                                                  editor.on("change", function() {
                                                      textarea.val(editor.getSession().getValue());
                                                      //textarea.trigger('change');
                                                  })
                                                    Александр Туниеков
                                                    09 октября 2020, 21:21
                                                    0
                                                    помогло editor.on(«change»?
                                                      R2m0x94 (Vasily)
                                                      10 октября 2020, 01:10
                                                      0
                                                      Ещё не пробовал, попробую отпишусь. Кстати существует атрибут content=editable на саму таблицу, которую вывожу, через mFilter2. Люди говорят, что можно через процессор сохранять по ajax, следовательно вариант проще есть, просто надо вещать на элемент и сохранить будет возможно, правда, вот как через процессор это сделать с ajax пока не вникал, но через форму на php по sql запросу получается отредактировать таблицу (без процессора modx, пока тестирую). GetTables слишком трудно даётся, да и к тому же ещё не успел спросить про фильтр, так и не дошел до него, а про getTabs, тоже не вникнул почему у меня нет вкладок, как их туда прописать.

                                                      По сути мне всего то надо в уже имеющейся таблице, которую вывожу на mFilter2 — сделать ячейку или поле +price доступным для быстрого редактирования (событие doubleClick например), так как цены часто меняются и всё, вот думаю если товаров больше 100k как это сделать? И я понимаю, что это реально сделать, но с процессором MODX ещё не доводилось иметь дело, думаю вскором проработать этот вопрос, если есть решение буду очень благодарен
                                                        Александр Туниеков
                                                        10 октября 2020, 03:31
                                                        0
                                                        Кстати существует атрибут content=editable на саму таблицу, которую вывожу, через mFilter2.
                                                        Первый раз такое слышу.
                                                        если товаров больше 100k
                                                        Возможно 100k проще редактировать через excel и потом только выгружать в модкс. Но вот чтобы менеджеры сами 100k товаров редактировали я с таким не сталкивался. Обычно есть прайсы поставщиков и берем их цены умножаем на коофициент и загружаем. У вас не прайсы? Именно вручную 100k товаров редактировать надо?
                                                          R2m0x94 (Vasily)
                                                          10 октября 2020, 11:42
                                                          0
                                                          Ну не на всю продукцию править надо цены, а на некую часть. Да на счёт умножения я знаю как сделать, и к тому же msPre решает эту проблему, но вопрос в другом, про фронтенд
                                                          Александр Туниеков
                                                          10 октября 2020, 04:10
                                                          1
                                                          +1
                                                          А вообще можно примерно так сделать простой редактор поля price
                                                          в чанке вывода результатов mfilter2 для поля price пишем:
                                                          <input type="number" class="autosave" data-product_id="[[+id]]" value="[[+price]]"/>
                                                          На страницу или в отдельный файл пишем скрипт
                                                          <script>
                                                          $(function() {
                                                              $(document).on('change','.autosave',function(){
                                                                  $.post( "/assets/components/autosave/action.php", 
                                                                  { product_id: $(this).data('product_id'), value: $(this).val() })
                                                                    .done(function( data ) {
                                                                      alert( "Data Loaded: " + data );
                                                                    });
                                                              });
                                                          });
                                                          </script>
                                                          Создаем файл /assets/components/autosave/action.php
                                                          <?php
                                                          define('MODX_API_MODE', true);
                                                          require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';
                                                          
                                                          $modx->getService('error', 'error.modError');
                                                          $modx->setLogLevel(modX::LOG_LEVEL_ERROR);
                                                          $modx->setLogTarget('FILE');
                                                          
                                                          if (!$modx->user->hasSessionContext('mgr')){
                                                              echo 'Access denied';
                                                              exit;
                                                          }
                                                          
                                                          if((int)$_POST['product_id'] > 0){
                                                              if($product = $modx->getObject('msProduct',(int)$_POST['product_id']){
                                                                  $product->set('price', $_POST['price']);
                                                                  if($product->save()) echo 'success';
                                                              }
                                                          }
                                                            R2m0x94 (Vasily)
                                                            10 октября 2020, 12:49
                                                            0
                                                            Спасибо, попробовал. /assets/components/autosave/action.php отдаёт 500 ошибку при смене цены и не сохраняет
                                                              Александр Туниеков
                                                              10 октября 2020, 22:58
                                                              +1
                                                              Я не проверял код. Счас посмотрел здесь скобочку забыл
                                                              if($product = $modx->getObject('msProduct',(int)$_POST['product_id']){
                                                              надо
                                                              if($product = $modx->getObject('msProduct',(int)$_POST['product_id'])){
                                                              Проверяйте!
                                                              В начале /assets/components/autosave/action.php напишите
                                                              error_reporting(E_ALL);
                                                              ini_set('display_errors', 1);
                                                              чтоб ошибки показывал
                                                                R2m0x94 (Vasily)
                                                                10 октября 2020, 23:26
                                                                0
                                                                Спасибо, поправил, но сохранения не происходит, консоль пустой, data пустая, ошибок нет, единственное, что пишет консоль — предупреждение
                                                                [Violation] 'load' handler took 1776ms
                                                                И alert вылетает
                                                                Data Loaded:
                                                                  Александр Туниеков
                                                                  10 октября 2020, 23:34
                                                                  +1
                                                                  А что в пост параметры отправляется?
                                                                  Пустой ответ это либо (int)$_POST['product_id'] == 0
                                                                  Либо продукт не найден.
                                                                  R2m0x94 (Vasily)
                                                                  10 октября 2020, 23:44
                                                                  0
                                                                  <script>
                                                                  $(document).on('change','.autosave',function(){ 
                                                                      $.post('assets/components/autosave/action.php', 
                                                                      { product_id: $(this).data('product_id'), value: $(this).val() })
                                                                        .done(function(data) { 
                                                                          alert("Data Loaded: " + data);
                                                                          console.log($.post);
                                                                        });
                                                                  });
                                                                  </script>
                                                                  В пост отправляется
                                                                  ƒ (a,c,d,e){return n.isFunction©&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}
                                                                  Александр Туниеков
                                                                  10 октября 2020, 23:52
                                                                  +1
                                                                  что-то ты меня озадачил… ты то смотришь?
                                                                  даже код проверил. У меня вот пост yadi.sk/i/BXVEFzq5aFPfpQ
                                                                  Александр Туниеков
                                                                  10 октября 2020, 23:56
                                                                  +1
                                                                  Кстати еще ошибочка
                                                                  <script>
                                                                  $(document).on('change','.autosave',function(){ 
                                                                      $.post('assets/components/autosave/action.php', 
                                                                      { product_id: $(this).data('product_id'), price: $(this).val() })
                                                                        .done(function(data) { 
                                                                          alert("Data Loaded: " + data);
                                                                          console.log($.post);
                                                                        });
                                                                  });
                                                                  </script>
                                                                  вместо price value почемуто поставил.
                                                                  R2m0x94 (Vasily)
                                                                  11 октября 2020, 00:16
                                                                  0
                                                                  Работает, спасибо :)
                                                                  У меня кэшировался mFilter2, от туда и непонятки были, но в уведомление data всё ровно не пишется :(
                                                                  Александр Туниеков
                                                                  11 октября 2020, 00:21
                                                                  +1
                                                                  success должно написать. Разбираться надо почему не пишется.
                                                                  Но я тебе основы подсказал. Дальнейший обвес сам сделаешь. Ок?
                                                                  R2m0x94 (Vasily)
                                                                  11 октября 2020, 00:26
                                                                  0
                                                                  Ok :)
                                                                  R2m0x94 (Vasily)
                                                                  11 октября 2020, 01:14
                                                                  0
                                                                  Возможно success не пишется из-за версии jQuery 3.4.1.., а на закуску рабочий вариант, правда с перезагрузкой :/
                                                                  <script>
                                                                  // Пришлось делать перезагрузку стр.
                                                                  $(document).on('change','.autosave', function(){ 
                                                                      //$.post('assets/components/autosave/action.php', { product_id: $(this).data('product_id'), price: $(this).val()}).done(function(data) { 
                                                                      //    alert("Data Loaded: " + data);
                                                                      //});
                                                                      $.ajax({  
                                                                          type: "POST",  
                                                                          url: 'assets/components/autosave/action.php', 
                                                                          data: { product_id: $(this).data('product_id'), price: $(this).val()},
                                                                          success:  function(data) { 
                                                                              if (!data){
                                                                                  miniShop2.Message.success('Успешно обновлена!' + data)
                                                                                  location.reload(true);
                                                                                  //setInterval('location.reload()', 444);
                                                                              } else{
                                                                                  miniShop2.Message.error('Что-то пошло не так, попробуйте позже!');
                                                                                  console.log($.post);
                                                                                  console.log(data);
                                                                              }
                                                                          } 
                                                                      }); 
                                                                  });
                                                                  
                                                                  </script>
                                                                  В чанке вывода mFilter2
                                                                  <input type="number" name="price" class="autosave" data-product_id="{$id}" value="{$price | replace : ' ' : ''}"/>
                                                                  А в action.php
                                                                  <?php
                                                                  error_reporting(E_ALL);
                                                                  ini_set('display_errors', 1);
                                                                  
                                                                  define('MODX_API_MODE', true);
                                                                  //require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';
                                                                  
                                                                  /** @noinspection PhpIncludeInspection */
                                                                  require dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';
                                                                  
                                                                  
                                                                  $modx->getService('error', 'error.modError');
                                                                  $modx->setLogLevel(modX::LOG_LEVEL_ERROR);
                                                                  $modx->setLogTarget('FILE');
                                                                  
                                                                  if (!$modx->user->hasSessionContext('mgr')){
                                                                      echo 'Access denied';
                                                                      exit;
                                                                  }
                                                                  
                                                                  if((int)$_POST['product_id'] > 0){
                                                                      if($product = $modx->getObject('msProduct',(int)$_POST['product_id'])){
                                                                          $product->set('price',$_POST['price']);
                                                                          $product->save();
                                                                      }
                                                                  }
                                                                  Александр Туниеков
                                                                  11 октября 2020, 01:28
                                                                  0
                                                                  А зачем перезагрузка-то если цена успешно обновлена то в поле и так актуальные данные же
                                                                  R2m0x94 (Vasily)
                                                                  11 октября 2020, 01:37
                                                                  0
                                                                  На фронте цена без success не обновляется, поэтому перезагрузка, пока как решить не знаю
                                                                  Александр Туниеков
                                                                  11 октября 2020, 01:45
                                                                  +1
                                                                  Это где не обновляется? В <input type=«number» name=«price» class=«autosave» data-product_id="{$id}" value="{$price | replace: ' ': ''}"/> она должна остаться такая какая введена. В другом месте можно скриптом обновлять.
                                                                  И причем тут success?
                                                                  Александр Туниеков
                                                                  11 октября 2020, 01:52
                                                                  +1
                                                                  И вообще в $.ajax лучше добавить dataType: «json», а в action.php писать ответы скрипта так:
                                                                  $message = 'Access denied action.php';
                                                                      echo json_encode(
                                                                              ['success' => false,
                                                                              'message' => $message,]
                                                                              );
                                                                      return;
                                              R2m0x94 (Vasily)
                                              08 октября 2020, 09:21
                                              0
                                              Можно же выборку сделать через pdoPage с элементом getTable, без pdoTools параметров, или ошибаюсь?

                                              Ещё заметил, что при GetTableFetch в quickview, что некоторые id дублируются аж по 8 штук,
                                                Александр Туниеков
                                                08 октября 2020, 10:00
                                                +1
                                                Можно же выборку сделать через pdoPage с элементом getTable, без pdoTools параметров, или ошибаюсь?
                                                нельзя! данные в таблицу только pdoTools дает. без pdoTools параметров ничего нельзя.
                                                Ещё заметил, что при GetTableFetch в quickview, что некоторые id дублируются аж по 8 штук,
                                                Наверно в pdoTools к 1 id leftJoin нескольких строк есть
                                                в GetTableFetch Замени строку $log .= $response['log']; на
                                                $log = '<pre class="getTablesLog" style="width:900px;">' . print_r($getTables->pdoTools->getTime(), 1) . '</pre>';
                                                и посмотри sql запрос, что pdoTools сформировал.
                                                wfoojjaec
                                                03 ноября 2020, 16:32
                                                0
                                                Возможно стоит воспользоваться этой штукой для рендеринга таблиц. У них много полезностей, в том числе локализация, поддержка различных версий bootstrap, различные поиски-сортировки-экспорты, AJAX обновление из указанного источника.

                                                https://datatables.net/

                                                Из того, что у них особенно понравилось — хорошо оптимизирован поиск и сортировка. Неплохо выгребает даже на 200к записей.
                                                  R2m0x94 (Vasily)
                                                  10 ноября 2020, 19:53
                                                  0
                                                  Было бы неплохо, да и посмотрел примеры vYLVjRz, ZEWJNRE, PoNjpYG — крутая тема, тут надо подумать как использовать её с getTables или с pdoTools. Так, как понимаю, что pdoTools вообще обновляться возможно не будет больше.
                                                    Александр Туниеков
                                                    10 ноября 2020, 20:55
                                                    0
                                                    Красиво выглядит, но поиски и сортировки нужны в базе а не на странице. Вообще можно попробовать накатить datatables поверх разметки getTables, но не совсем понятно что будет и топбар gettables останется как есть.
                                                    В общем, фильтры getTables обращаются сразу к базе, а datatables скорее всего уже по выведенной на страницу таблице ищет. В getTables главное редактирование таблиц делал, а datatables — это чисто отображение. Хорошо бы на getTables сделать красивое отображение, но я в стилях не шарю. А накатывать datatables поверх скорее всего разметка полей, которые внутри ячеек таблицы, поедет. И лишний код тащить на страницу.
                                                    Думаю datatables и getTables не стоит совмещать. Если уж идти от datatables то это идти от его ajax и pdoTools, но это уже будет какой-то другой новый компонент.
                                                      wfoojjaec
                                                      11 ноября 2020, 02:44
                                                      0
                                                      Для отображния я его использовал. Но встречал в документации ссылку на получение данных через AJAX. Вполне возможно там есть поддержка всех плюшей именно на стороне сервера. Но тут не могу гарантировать, надо копать.
                                                    Андрей
                                                    10 марта 2021, 15:42
                                                    0
                                                    Здравствуйте. Отличный компонент!
                                                    Подскажите пожалуйста, как использовать вывод и запись в таблицу через MIGX? Как я понял нужно создать таблицу с помощью MIGX? Тогда какой класс использовать в этом случае?
                                                      Александр Туниеков
                                                      10 марта 2021, 15:53
                                                      0
                                                      Добрый день! Сами таблицы компонента с MIGX не связанны. С MIGX просто быстрей таблицы в базе mysql сделать. А потом все без MIGX.
                                                        Андрей
                                                        10 марта 2021, 16:04
                                                        0
                                                        Ясно. Спасибо.
                                                          Александр Туниеков
                                                          10 марта 2021, 16:11
                                                          0
                                                          Ок. Помощь в освоении нужна? Компонент достаточно сложный и даже я не все инструкции не помню.
                                                        Александр Туниеков
                                                        10 марта 2021, 16:09
                                                        0
                                                        даже не знаю как объяснить :-). Ваш уровень владения MODX не понятен.
                                                        Есть таблица в базе mysql. Есль классы в MODX для связи с таблицей в базе. Таблицу и классы проще создать через MIGX.
                                                        Компонент getTables чтобы вывести таблицу пользователю чтоб он мог редактировать в ней данные. Это аналог MIGX, только без ExtJs. Использовать можно и на фронте и в админке.
                                                        Надеюсь понятно. Можно по скайпу связаться если не понятно.
                                                          Андрей
                                                          10 марта 2021, 16:39
                                                          0
                                                          Да, уровень у меня начальный, вы правы.
                                                          Объясню в двух словах, возможно вы посоветуете общее направление куда копать.
                                                          Есть задача сделать простой менеджер проектов на фронте. Т.е. пользователь создает проект, (ресурс modx), внутри автоматом генерятся основные разделы общие для всех проектов (вводная инфа по проекту, этап1, этап2, этап3, сдача проекта). А вот внутри этих разделов может быть любое количество разных задач. Задачи это to-do листы. Список чекбоксов. По сути та же редактируемая таблица, что может создавать ваш компонент. Через него очень удобно редактировать название задачи, менять и сохранять ее статус. Вот думаю как бы меньшими силами это воплотить. MIGX удобен готовым механизмом хранения и обработки табличных данных, но, как вы и говорите, вытаскивать ExtJs на фронт тяжко. По сути нужен удобный типTV.
                                                          Спасибо за оперативный ответ.
                                                            Александр Туниеков
                                                            10 марта 2021, 17:14
                                                            0
                                                            Ну я бы точно на геттаблес делал. Но для вас смотрите сами что вам удобной. Я сейчас на геттаблес табель учета рабочего времени делаю :-).
                                                            Только для вашей задачи было бы хорошо если геттаблес еще дерево мог строить, но он этого пока не умеет. Времени не хватает сделать. А подгружать subtable на 3 уровня не очень хорошая идея. А так бы все можно было бы на компоненте сделать.
                                                            Несколько вопросов есть:
                                                            1) «основные разделы общие для всех проектов» — то есть могут создаваться и другие разделы?
                                                            2) Создавать проект через ajax или перезагрузка таблицы?
                                                            3) открывать to-do лист по ajax или можно ссылку на отделную страницу?

                                                            Можно связаться по скайп. Мой скайп touols
                                                              Александр Туниеков
                                                              10 марта 2021, 21:13
                                                              0
                                                              Наверно, кстати, я не верно первоначальный вопрос понял. Если tv MIGX создавать в базе через migxdb, то вывести эту табличку можно через getTables без проблем. Я просто тв уже редко использую и обычно таблицы к ресурсам MODX не привязываю.
                                                              Пример вывода для таблицы https://www.tale.by/assets/docs/default.schema.xml из из статьи Товары из отдельной таблицы (migxdb:
                                                              {'getTable' | snippet : [
                                                                  'loadModels'=>'pages',
                                                                  'table'=>[
                                                                      'class'=>'CustomPages',
                                                                      'actions'=>[
                                                                          'create'=>[
                                                                          ],
                                                                          'update'=>[
                                                                              
                                                                          ],
                                                                      ],
                                                                      'pdoTools'=>[
                                                                          'class'=>'CustomPages',        
                                                                      ],
                                                                      'checkbox'=>0,
                                                                      'autosave'=>1,
                                                                      'row'=>[
                                                                              'id'=>[
                                                                                  ],
                                                                              'resource_id'=>[
                                                                                  'label'=>'Ресурс ID',
                                                                                  'edit'=>['type'=>'hidden',
                                                                                  ],
                                                                                  'filter'=>[
                                                                                   'edit'=>['type'=>'text',],
                                                                                   ],
                                                                              ],
                                                                              'pagetitle'=>[
                                                                                  'label'=>'Имя',
                                                                                  'filter'=>1
                                                                              ],
                                                                              'longtitle'=>[
                                                                                  'label'=>'Описание',
                                                                                  'edit'=>['type'=>'textarea',
                                                                                  ],
                                                                              ],
                                                                              'published'=>[
                                                                                  'label'=>'Опубликован',
                                                                                  'edit'=>['type'=>'checkbox',],
                                                                              ],
                                                                          ],
                                                                  ],
                                                              ]}
                                                              Примерный сокращенный код. Не проверял его работу. Если разместить его на какой-либо странице и зайти на неё с get или post параметром resource_id=15, то покажет покажет CustomPages прикрепленные к ресурсу с id=15.
                                                                Андрей
                                                                11 марта 2021, 10:41
                                                                0
                                                                Ого! Спасибо. Буду разбираться
                                                                  Андрей
                                                                  11 марта 2021, 11:16
                                                                  0
                                                                  Разобрался с созданием таблицы и класса через MIGX. Геттаблес все отлично выводит, хотя в логах появляются ошибки

                                                                  [2021-03-11 11:09:44] (ERROR @ L:\mysites\OpenServer\domains\test.ru\core\xpdo\xpdo.class.php : 644) Could not load class: pages from pages.
                                                                  [2021-03-11 11:09:44] (ERROR @ L:\mysites\OpenServer\domains\test.ru\core\xpdo\xpdo.class.php : 1247) Problem getting service pages, instance of class pages, from path L:/mysites/OpenServer/domains/test.ru/core/components/pages/model/
                                                                  [2021-03-11 11:09:44] (ERROR @ L:\mysites\OpenServer\domains\test.ru\core\xpdo\xpdo.class.php : 644) Could not load class: pages from pages.
                                                                  [2021-03-11 11:09:44] (ERROR @ L:\mysites\OpenServer\domains\test.ru\core\xpdo\xpdo.class.php : 1247) Problem getting service pages, instance of class pages, from path L:/mysites/OpenServer/domains/test.ru/core/components/pages/model/pages/
                                                                  Новые записи в таблицу геттаблес не создает, ругается на пустое значение resource_id. Это и понятно, ведь мы его не передаем в сниппет. Так? Уже созданные записи в бд отлично редактируются и в геттаблес. Просто сказка! Осталось исправить ошибку с созданием новых записей.
                                                                    Александр Туниеков
                                                                    11 марта 2021, 16:32
                                                                    0
                                                                    Ошибки не критичные. Не могу добраться все их обработать :-(. их много при работе компонента вылазит. Весь журнал забивают.
                                                                    Андрей
                                                                    11 марта 2021, 13:00
                                                                    0
                                                                    Разобрался. Вот сюда
                                                                    'resource_id'=>[
                                                                                        'label'=>'Ресурс ID',
                                                                                        'edit'=>['type'=>'hidden',
                                                                                        ],
                                                                    надо добавить строчку value=$_modx->resource.id
                                                                    'resource_id'=>[
                                                                                                    'label'=>'Ресурс ID',
                                                                                                    'edit'=>['type'=>'hidden',
                                                                                                            'value'=>$_modx->resource.id
                                                                                        ],
                                                                    Все работает. Записи создаются. Спасибо. Изучаю дальше.
                                                                      Александр Туниеков
                                                                      11 марта 2021, 16:38
                                                                      0
                                                                      Я тут изобретаю параметры default и force, а оказывается можно просто value указать :-).
                                                                      Вообще можно:
                                                                      'resource_id'=>[
                                                                                                      'label'=>'Ресурс ID',
                                                                                                      'edit'=>['type'=>'hidden',
                                                                                                              'default'=>$_modx->resource.id
                                                                                          ],
                                                                      или
                                                                      'resource_id'=>[
                                                                                                      'label'=>'Ресурс ID',
                                                                                                      'edit'=>['type'=>'hidden',
                                                                                                              'force'=>$_modx->resource.id
                                                                                          ],
                                                                      default записывает, если записываемое значение пустое. А force всегда перезаписывает значение чтобы юзер не написал.
                                                              Андрей
                                                              11 марта 2021, 14:05
                                                              0
                                                              А можно еще пример, как использовать геттаблес в админке modx?
                                                                Александр Туниеков
                                                                11 марта 2021, 16:58
                                                                0
                                                                На вывода как tv на ресурсе ничего пока не сделано. MIGX выводить только.
                                                                Можно в компонентах вывести несколько таблицу или несколько таблиц в табах.
                                                                Только здесь конфиг надо в системных настройках MODX в формате JSON прописывать.
                                                                Например системная настройка gtsreview_admin. В ней код 2 табов с таблицами в них:
                                                                {
                                                                            "loadModels": "gtsreview",
                                                                            "tabs": {
                                                                              "Orgs": {
                                                                                "label": "Фирмы",
                                                                                "table": {
                                                                                  "class": "gtsReviewOrg",
                                                                                  "actions": {
                                                                                    "create": [],
                                                                                    "update": []
                                                                                  },
                                                                                  "pdoTools": {
                                                                                    "class": "gtsReviewOrg"
                                                                                  },
                                                                                  "checkbox": 1,
                                                                                  "autosave": 1,
                                                                                  "row": {
                                                                                    "id": {
                                                                                      "cls": "",
                                                                                      "edit": {
                                                                                        "type": "hidden"
                                                                                      }
                                                                                    },
                                                                                    "name": {
                                                                                      "label":"Имя",
                                                                                      "filter": 1
                                                                                    },
                                                                                    "site": {
                                                                                      "label":"Сайт",
                                                                                      "filter": 1
                                                                                    },
                                                                                    "manager": {
                                                                                      "label":"Фио менеджера",
                                                                                      "filter": 1
                                                                                    },
                                                                                    "description": {
                                                                                      "label":"Описание",
                                                                                      "edit": {
                                                                                        "type": "textarea",
                                                                                        "skip_sanitize": 0
                                                                                      }
                                                                                    }
                                                                                  }
                                                                                }
                                                                              },
                                                                              "Leed": {
                                                                                
                                                                                "label": "Сделки",
                                                                                "table": {
                                                                                 
                                                                                  "pdoTools": {
                                                                                    "class": "gtsReviewLeed",
                                                                                    "leftJoin":{
                                                                                        "gtsReviewOrg":{
                                                                                            "class":"gtsReviewOrg",
                                                                                            "on":"gtsReviewOrg.id = gtsReviewLeed.org_id"
                                                                                        }
                                                                                    },
                                                                                    "select":{
                                                                                        "gtsReviewLeed":"*",
                                                                                        "gtsReviewOrg":"gtsReviewOrg.name as org"
                                                                                    }
                                                                                  },
                                                                                  "checkbox": 1,
                                                                                  "autosave": 1,
                                                                                  "row": {
                                                                                    "id": {
                                                                                      "cls": "",
                                                                                      "edit": {
                                                                                        "type": "hidden"
                                                                                      }
                                                                                    },
                                                                                    "org_id":{
                                                                                      "label":"Фирма",
                                                                                      "filter": 1,
                                                                                      "edit":{
                                                                                          "type":"select",
                                                                                          "select":"org",
                                                                                          "field_content":"org"
                                                                                      }
                                                                                    },
                                                                                    "name": {
                                                                                      "label":"Название сделки",
                                                                                      "filter": 1
                                                                                    },
                                                                                    "date": {
                                                                                      "label":"Дата сделки",
                                                                                      "filter": 1,
                                                                                      "edit": {
                                                                                        "type": "date"
                                                                                      }
                                                                                    },
                                                                                    "description": {
                                                                                      "label":"Описание",
                                                                                      "edit": {
                                                                                        "type": "textarea",
                                                                                        "skip_sanitize": 0
                                                                                      }
                                                                                    },
                                                                                    "rating": {
                                                                                      "label":"Рейтинг",
                                                                                      "filter": 1
                                                                                    },
                                                                                    "active": {
                                                                                      "label":"Активно",
                                                                                        "filter": 1,
                                                                                        "edit": {
                                                                                            "type": "checkbox"
                                                                                        },
                                                                                        "default":1
                                                                                    }
                                                                                  }
                                                                                }
                                                                              }
                                                                            }
                                                                          }
                                                                Для подключения в админке делаем меню, где прописываем Действие: home Параметры: &config=gtsreview_admin Пространство имён: gettables


                                                                Получиться вот:
                                                                  Александр Туниеков
                                                                  11 марта 2021, 17:07
                                                                  0
                                                                  Еще можно перегнать код массива femom в JSON.
                                                                  В конфиге записать 2 параметра toJSON и showLog и в логе будет массив в json.
                                                                  {'getTable' | snippet : [
                                                                      'showLog'=>1,
                                                                      'toJSON'=>1,
                                                                      'loadModels'=>'raschets',
                                                                      'table'=>[
                                                                  toFenom преобразует json массив в fenom массив
                                                                    Денис
                                                                    21 марта 2021, 12:57
                                                                    0
                                                                    Здравствуйте!

                                                                    Подскажите пожалуйста, как вывести таблицу с пользователями. Пробую так:

                                                                    {'getTable' | snippet : [
                                                                        'loadModels'=>'pdoUsers',
                                                                    
                                                                        'table'=>[
                                                                            'class'=>'modUser',
                                                                            'actions'=>[
                                                                                'create'=>[
                                                                                ],
                                                                                'update'=>[
                                                                                    'icon' => 'fa fa-edit',
                                                                                ],
                                                                            ],
                                                                            'pdoTools'=>[
                                                                                'class'=>'modUser',
                                                                                'limit'=>10,
                                                                                'groups'=>'OPT',
                                                                            ],
                                                                            'checkbox'=>0,
                                                                            'autosave'=>1,
                                                                            'row'=>[
                                                                                    'id'=>[
                                                                                        ],
                                                                                     'fullname'=>[
                                                                                        ], 
                                                                                     'extended'=>[
                                                                                         'oc_name'=>[],
                                                                                        ],
                                                                     
                                                                                    'label'=>[
                                                                                        'label'=>'Имя',
                                                                                        'filter'=>1
                                                                                        ],
                                                                                ],
                                                                        ],
                                                                    ]}
                                                                    Но кроме id ничего не выводится. Хотелось бы вывести пользователей из определенной группы, поля из профиля и доп. поля extended.
                                                                      Александр Туниеков
                                                                      21 марта 2021, 13:17
                                                                      0
                                                                      'loadModels'=>'pdoUsers', не надо
                                                                      {'getTable' | snippet : [
                                                                          'table'=>[
                                                                              'class'=>'modUser',
                                                                              'actions'=>[
                                                                                  'create'=>[
                                                                                  ],
                                                                                  'update'=>[
                                                                                      'icon' => 'fa fa-edit',
                                                                                  ],
                                                                              ],
                                                                              'pdoTools'=>[
                                                                                  'class'=>'modUser',
                                                                                  'leftJoin'=>[
                                                                                      'modUserProfile'=>[
                                                                                          'class' => 'modUserProfile',
                                                                                          'on' => 'modUserProfile.internalKey = modUser.id',
                                                                                      ],
                                                                                  ],
                                                                                  'select'=>[
                                                                                      'modUser' => 'modUser.id',
                                                                                      'modUserProfile'=>'*',
                                                                                  ],
                                                                              'decodeJSON'=>1,
                                                                              ],
                                                                              'checkbox'=>0,
                                                                              'autosave'=>1,
                                                                              'row'=>[
                                                                                      'id'=>[
                                                                                          ],
                                                                                       'fullname'=>[
                                                                                          'class'=>'modUserProfile'
                                                                                          ], 
                                                                                       'oc_name'=>[
                                                                                           'label'=>'extended поле не редактируется',
                                                                                           'edit'=>['type'=>'view']
                                                                                          ],
                                                                                  ],
                                                                          ],
                                                                      ]}
                                                                        Александр Туниеков
                                                                        21 марта 2021, 13:20
                                                                        0
                                                                        Блин с extended полями не понятно как их вывести и редактировать. Не работает сейчас компонент с ними!
                                                                        Я extended полями не пользуюсь. Просто если надо поля доп таблицу завожу какую надо.
                                                                          Денис
                                                                          21 марта 2021, 14:53
                                                                          0
                                                                          Спасибо, поля профиля вывелись. extended к сожалению как раз и нужно было редактировать( А как выводить пользователей определенной группы?
                                                                            Александр Туниеков
                                                                            21 марта 2021, 15:29
                                                                            0
                                                                            составить запрос основываясь на modUserGroupMember
                                                                            {'getTable' | snippet : [
                                                                                'table'=>[
                                                                                    'class'=>'modUserGroupMember',
                                                                                    'actions'=>[
                                                                                        'create'=>[
                                                                                        ],
                                                                                        'update'=>[
                                                                                            'icon' => 'fa fa-edit',
                                                                                        ],
                                                                                    ],
                                                                                    'pdoTools'=>[
                                                                                        'class'=>'modUserGroupMember',
                                                                                        'leftJoin'=>[
                                                                                            'modUserProfile'=>[
                                                                                                'class' => 'modUserProfile',
                                                                                                'on' => 'modUserProfile.internalKey = modUserGroupMember.member',
                                                                                            ],
                                                                                        ],
                                                                                        'where'=>[
                                                                                            'modUserGroupMember.user_group'=>2,
                                                                                        ],
                                                                                        'select'=>[
                                                                                            'modUserProfile'=>'*',
                                                                                        ],
                                                                                    'decodeJSON'=>1,
                                                                                    ],
                                                                                    'checkbox'=>0,
                                                                                    'autosave'=>1,
                                                                                    'row'=>[
                                                                                            'internalKey'=>[
                                                                                                'label'=>'data- 1 добавляем в data-индификатор строки, чтобы по нему можно было искать редактируемое значение fullname',
                                                                                                'data'=>1
                                                                                                ],
                                                                                             'fullname'=>[
                                                                                                'class'=>'modUserProfile',
                                                                                                        'edit'=>[
                                                                                                            'type'=>'text',
                                                                                                            'search_fields'=>['internalKey '=>'internalKey', ],
                                                                                                        ],
                                                                                                ], 
                                                                                             'oc_name'=>[
                                                                                                 'label'=>'extended поле не редактируется',
                                                                                                 'edit'=>['type'=>'view']
                                                                                                ],
                                                                                        ],
                                                                                ],
                                                                            ]}
                                                                              Денис
                                                                              22 марта 2021, 20:24
                                                                              0
                                                                              Добрый вечер.
                                                                              Приджойнил modUser и таблицы минишопа, выборка работает, но выводится только один пользователь с ссумарными параметрами остальных пользователей. Не понятно почему.
                                                                              Подозреваю что как то не так обратился к modUser
                                                                              'modUser'=>[
                                                                              'class' => 'modUser',
                                                                              'on' => 'modUser.id = modUser.active',
                                                                              ],


                                                                              {'getTable' | snippet : [
                                                                                  'table'=>[
                                                                                      'class'=>'modUserGroupMember',
                                                                                      'actions'=>[
                                                                                          'remove' =>[
                                                                                              'cls' => 'btn btn-danger',
                                                                                              'icon' => 'fa fa-trash-o',
                                                                                              'row' => [], 
                                                                                      ],
                                                                                          'update'=>[
                                                                                              'cls' => 'btn btn-default',
                                                                                              'icon' => 'fa fa-edit',
                                                                                          ],
                                                                                      ],
                                                                                      'pdoTools'=>[
                                                                                          'class'=>'modUserGroupMember',
                                                                              
                                                                                          'limit'=>'5',
                                                                                          'leftJoin'=>[
                                                                                              'modUserProfile'=>[
                                                                                                  'class' => 'modUserProfile',
                                                                                                  'on' => 'modUserProfile.internalKey = modUserGroupMember.member',
                                                                                              ],
                                                                                              'modUser'=>[
                                                                                                  'class' => 'modUser',
                                                                                                  'on' => 'modUser.id = modUser.active',
                                                                                              ],
                                                                                              'msOrder'=>[
                                                                                                  'class' => 'msOrder',
                                                                                                  'on' => 'modUser.id = msOrder.user_id',
                                                                                              ],
                                                                                              'msOrderProduct'=>[
                                                                                                  'class' => 'msOrderProduct',
                                                                                                  'on' => 'msOrder.id = msOrderProduct.order_id',
                                                                                              ],
                                                                                              
                                                                                          ],
                                                                                          'where'=>[
                                                                                              'modUserGroupMember.user_group'=>2,
                                                                                          ],
                                                                                          'select'=>[
                                                                                              'modUserProfile'=>'*',
                                                                                              'modUser'=>'*',
                                                                                              'msOrder'=>'SUM(msOrder.cost) as sum',
                                                                                              'msOrderProduct'=>'SUM(msOrderProduct.count) as count',
                                                                                          ],
                                                                                          'sortdir'=>'DESC',
                                                                                          'sortby'=>'',
                                                                                      'decodeJSON'=>1,
                                                                                      ],
                                                                                      'checkbox'=>1,
                                                                                      'autosave'=>1,
                                                                                      'row'=>[
                                                                              
                                                                                              'id'=>[
                                                                                                  'label'=>'id',
                                                                                              ],
                                                                              
                                                                                               'fullname'=>[
                                                                                                  'label'=>'Имя',
                                                                                                  'filter'=>1,
                                                                                                  ], 
                                                                                               'email'=>[
                                                                                                  'label'=>'Email',
                                                                                                  ], 
                                                                                               'count'=>[
                                                                                                   'label'=>'Товаров',
                                                                                                  ],
                                                                                               'sum'=>[
                                                                                                   'label'=>'Сумма',
                                                                                                  ],
                                                                                               'active'=>[
                                                                                                   'label'=>'Статус',
                                                                                                  ],
                                                                                                  
                                                                                          ],
                                                                                  ],
                                                                              ]}
                                                                                Александр Туниеков
                                                                                23 марта 2021, 10:29
                                                                                0
                                                                                надо
                                                                                'modUser'=>[
                                                                                                    'class' => 'modUser',
                                                                                                    'on' => 'modUser.id = modUserGroupMember.member',
                                                                                                ],
                                                                                И надо вам добавить groupby
                                                                                {'getTable' | snippet : [
                                                                                    'table'=>[
                                                                                        'class'=>'modUserGroupMember',
                                                                                        'actions'=>[
                                                                                            'remove' =>[
                                                                                                'cls' => 'btn btn-danger',
                                                                                                'icon' => 'fa fa-trash-o',
                                                                                                'row' => [], 
                                                                                        ],
                                                                                            'update'=>[
                                                                                                'cls' => 'btn btn-default',
                                                                                                'icon' => 'fa fa-edit',
                                                                                            ],
                                                                                        ],
                                                                                        'pdoTools'=>[
                                                                                            'class'=>'modUserGroupMember',
                                                                                
                                                                                            'limit'=>'5',
                                                                                            'leftJoin'=>[
                                                                                                'modUserProfile'=>[
                                                                                                    'class' => 'modUserProfile',
                                                                                                    'on' => 'modUserProfile.internalKey = modUserGroupMember.member',
                                                                                                ],
                                                                                                'modUser'=>[
                                                                                                    'class' => 'modUser',
                                                                                                    'on' => 'modUser.id = modUserGroupMember.member',
                                                                                                ],
                                                                                                'msOrder'=>[
                                                                                                    'class' => 'msOrder',
                                                                                                    'on' => 'modUser.id = msOrder.user_id',
                                                                                                ],
                                                                                                'msOrderProduct'=>[
                                                                                                    'class' => 'msOrderProduct',
                                                                                                    'on' => 'msOrder.id = msOrderProduct.order_id',
                                                                                                ],
                                                                                                
                                                                                            ],
                                                                                            'where'=>[
                                                                                                'modUserGroupMember.user_group'=>2,
                                                                                            ],
                                                                                            'select'=>[
                                                                                                'modUserProfile'=>'*',
                                                                                                'modUser'=>'*',
                                                                                                'msOrder'=>'SUM(msOrder.cost) as sum',
                                                                                                'msOrderProduct'=>'SUM(msOrderProduct.count) as count',
                                                                                            ],
                                                                                            'groupby'=>'modUser.id',
                                                                                            'sortdir'=>'DESC',
                                                                                            'sortby'=>'',
                                                                                        'decodeJSON'=>1,
                                                                                        ],
                                                                                        'checkbox'=>1,
                                                                                        'autosave'=>1,
                                                                                        'row'=>[
                                                                                
                                                                                                'id'=>[
                                                                                                    'label'=>'id',
                                                                                                ],
                                                                                
                                                                                                 'fullname'=>[
                                                                                                    'label'=>'Имя',
                                                                                                    'filter'=>1,
                                                                                                    ], 
                                                                                                 'email'=>[
                                                                                                    'label'=>'Email',
                                                                                                    ], 
                                                                                                 'count'=>[
                                                                                                     'label'=>'Товаров',
                                                                                                    ],
                                                                                                 'sum'=>[
                                                                                                     'label'=>'Сумма',
                                                                                                    ],
                                                                                                 'active'=>[
                                                                                                     'label'=>'Статус',
                                                                                                    ],
                                                                                                    
                                                                                            ],
                                                                                    ],
                                                                                ]}
                                                                                и сортировка не понятная 'sortdir'=>'DESC',
                                                                                'sortby'=>'',
                                                                                  Денис
                                                                                  23 марта 2021, 23:53
                                                                                  0
                                                                                  Спасибо, все отобразилось, сортировка тоже работает. Единственное, почему то не редактируются поля, пишет что строка таблицы не найдена.
                                                                                    Александр Туниеков
                                                                                    23 марта 2021, 23:57
                                                                                    0
                                                                                    Чтобы поля редактировались надо указать как их искать.
                                                                                    'fullname'=>[
                                                                                                        'class'=>'modUserProfile',
                                                                                                                'edit'=>[
                                                                                                                    'type'=>'text',
                                                                                                                    'search_fields'=>['internalKey '=>'id', ],
                                                                                                                ],
                                                                                                        ],
                                                                                      Александр Туниеков
                                                                                      24 марта 2021, 00:58
                                                                                      0
                                                                                      компонент у data атрибутов tr строки таблицы пишет данные строки. Обязательно пишет id. У тебя
                                                                                      select'=>[
                                                                                                      'modUserProfile'=>'*',
                                                                                                      'modUser'=>'*',
                                                                                      значит id пишется с modUser.id. 'class'=>'modUserGroupMember', Значит, по умолчанию, пытается найти строку в таблице modUserGroupMember с этим id и ничего не находит. Для того, чтобы компонент нашел нужную строку нужно в инструкциях поля указать нужную таблицу 'class'=>'modUserProfile', и прописать правило как из data атрибутов строки найти строку.
                                                                                      'search_fields'=>['internalKey '=>'id', ],
                                                                                      Здесь в sql запрос попадает update modUserProfile set fullname='что ввел' where internalKey = 5, если < tr data-id=«5»
                                                                                        Денис
                                                                                        24 марта 2021, 12:58
                                                                                        0
                                                                                        Все равно не находит почему то
                                                                                        Александр Туниеков
                                                                                        24 марта 2021, 13:05
                                                                                        0
                                                                                        код покажи плиз
                                                                                        Денис
                                                                                        24 марта 2021, 13:34
                                                                                        0
                                                                                        {'getTable' | snippet : [
                                                                                            'table'=>[
                                                                                                'class'=>'modUserGroupMember',
                                                                                                'actions'=>[
                                                                                                    'remove' =>[
                                                                                                        'cls' => 'btn btn-danger',
                                                                                                        'icon' => 'fa fa-trash-o',
                                                                                                        'row' => [], 
                                                                                                ],
                                                                                                    'update'=>[
                                                                                                        'cls' => 'btn btn-default',
                                                                                                        'icon' => 'fa fa-edit',
                                                                                                    ],
                                                                                                ],
                                                                                                'pdoTools'=>[
                                                                                                    'class'=>'modUserGroupMember',
                                                                                        
                                                                                                    'limit'=>'5',
                                                                                                    'leftJoin'=>[
                                                                                                        'modUserProfile'=>[
                                                                                                            'class' => 'modUserProfile',
                                                                                                            'on' => 'modUserProfile.internalKey = modUserGroupMember.member',
                                                                                                        ],
                                                                                                        'modUser'=>[
                                                                                                            'class' => 'modUser',
                                                                                                            'on' => 'modUser.id = modUserGroupMember.member',
                                                                                                        ],
                                                                                                        'msOrder'=>[
                                                                                                            'class' => 'msOrder',
                                                                                                            'on' => 'modUser.id = msOrder.user_id',
                                                                                                        ],
                                                                                                        'msOrderProduct'=>[
                                                                                                            'class' => 'msOrderProduct',
                                                                                                            'on' => 'msOrder.id = msOrderProduct.order_id',
                                                                                                        ],
                                                                                                        
                                                                                                    ],
                                                                                                    'where'=>[
                                                                                                        'modUserGroupMember.user_group'=>2,
                                                                                                    ],
                                                                                                    'select'=>[
                                                                                                        'modUserProfile'=>'*',
                                                                                                        'modUser'=>'*',
                                                                                                        'msOrder'=>'SUM(msOrder.cost) as sum',
                                                                                                        'msOrderProduct'=>'SUM(msOrderProduct.count) as count',
                                                                                                    ],
                                                                                                    'groupby'=>'modUser.id',
                                                                                                    'sortdir'=>'DESC',
                                                                                                    'sortby'=>'sum',
                                                                                                'decodeJSON'=>1,
                                                                                                ],
                                                                                                'checkbox'=>1,
                                                                                                'autosave'=>1,
                                                                                                'row'=>[
                                                                                        
                                                                                                        'id'=>[
                                                                                                            'label'=>'id',
                                                                                                        ],
                                                                                        
                                                                                                         'fullname'=>[
                                                                                                            'label'=>'Имя',
                                                                                                            'filter'=>1,
                                                                                                            'class'=>'modUserProfile',
                                                                                                                'edit'=>[
                                                                                                                    'type'=>'text',
                                                                                                                    'search_fields'=>['internalKey'=>'modUser.id', ],
                                                                                                                ],
                                                                                                            ], 
                                                                                                         'email'=>[
                                                                                                            'label'=>'Email',
                                                                                                            ], 
                                                                                                         'count'=>[
                                                                                                             'label'=>'Товаров',
                                                                                                            ],
                                                                                                         'sum'=>[
                                                                                                             'label'=>'Сумма',
                                                                                                            ],
                                                                                                         'active'=>[
                                                                                                             'label'=>'Статус',
                                                                                                            ],
                                                                                                            
                                                                                                    ],
                                                                                            ],
                                                                                        ]}
                                                                                        Александр Туниеков
                                                                                        24 марта 2021, 14:47
                                                                                        0
                                                                                        Что-то глюк поправить не могу. попозже напишу
                                                                                        Александр Туниеков
                                                                                        24 марта 2021, 17:22
                                                                                        0
                                                                                        Установи новую версию getTables c модсторе. Исправил глюк с search_field один.
                                                                                        У тебя редактируется несколько таблиц сразу. И так компонент сделан, что найти основную таблицу все равно надо. Я переделал код для этого. Смотри:
                                                                                        {'getTable' | snippet : [
                                                                                            'showLog'=>1,
                                                                                            'table'=>[
                                                                                                'class'=>'modUserGroupMember',
                                                                                                'actions'=>[
                                                                                                    
                                                                                                    'update'=>[
                                                                                                        'cls' => 'btn btn-default',
                                                                                                        'icon' => 'fa fa-edit',
                                                                                                    ],
                                                                                                ],
                                                                                                'pdoTools'=>[
                                                                                                    'class'=>'modUserGroupMember',
                                                                                        
                                                                                                    'limit'=>'5',
                                                                                                    'leftJoin'=>[
                                                                                                        'modUserProfile'=>[
                                                                                                            'class' => 'modUserProfile',
                                                                                                            'on' => 'modUserProfile.internalKey = modUserGroupMember.member',
                                                                                                        ],
                                                                                                        'modUser'=>[
                                                                                                            'class' => 'modUser',
                                                                                                            'on' => 'modUser.id = modUserGroupMember.member',
                                                                                                        ],
                                                                                                        
                                                                                                    ],
                                                                                                    'where'=>[
                                                                                                        'modUserGroupMember.user_group'=>3,
                                                                                                    ],
                                                                                                    'select'=>[
                                                                                                        'modUserProfile'=>'*',
                                                                                                        'modUserGroupMember'=>'modUserGroupMember.id',
                                                                                                    ],
                                                                                                    'groupby'=>'modUser.id',
                                                                                                'decodeJSON'=>1,
                                                                                                ],
                                                                                                'checkbox'=>1,
                                                                                                'autosave'=>1,
                                                                                                'row'=>[
                                                                                        
                                                                                                        'internalKey'=>[
                                                                                                            'label'=>'id',
                                                                                                            'edit'=>[
                                                                                                                'type'=>'view',
                                                                                                            ],
                                                                                                            'data'=>1,
                                                                                                        ],
                                                                                        
                                                                                                         'fullname'=>[
                                                                                                            'label'=>'Имя',
                                                                                                            'filter'=>1,
                                                                                                            'class'=>'modUserProfile',
                                                                                                            'edit'=>[
                                                                                                                'type'=>'text',
                                                                                                                'search_fields'=>['internalKey'=>'internalKey', ],
                                                                                                            ],
                                                                                                            ], 
                                                                                                         'email'=>[
                                                                                                            'label'=>'Email',
                                                                                                            'class'=>'modUserProfile',
                                                                                                            'edit'=>[
                                                                                                                'type'=>'text',
                                                                                                                'search_fields'=>['internalKey'=>'internalKey', ],
                                                                                                            ],
                                                                                                            ], 
                                                                                                         'count'=>[
                                                                                                             'label'=>'Товаров',
                                                                                                            ],
                                                                                                         'sum'=>[
                                                                                                             'label'=>'Сумма',
                                                                                                            ],
                                                                                                         'active'=>[
                                                                                                             'label'=>'Статус',
                                                                                                            ],
                                                                                                            
                                                                                                    ],
                                                                                            ],
                                                                                        ]}

                                                                                        Только у меня на тестовом сайте минишопа нет и я убрал запросы к его таблицам при тестировании. Кстати в modUser ничего кроме username нету такого что можно вывести и тебе присоединять modUser и не надо.
                                                                                        На поле internalKey надо 'data'=>1, чтобы по нему записи в search_field искать
                                                                                        Денис
                                                                                        24 марта 2021, 22:10
                                                                                        0
                                                                                        Обновился, все отлично ?
                                                                                        extended поля получается даже вывести нельзя?
                                                                                        Александр Туниеков
                                                                                        25 марта 2021, 06:33
                                                                                        0
                                                                                        Ну получается даже вывести нельзя :-(
                                                                    Stepan
                                                                    04 апреля 2023, 13:11
                                                                    0
                                                                    народ вопрос по getTables
                                                                    кто-то реализовал там select из произвольных данных в фильтре?
                                                                    т.е. по факту мне нужен список из 2 слов(например: такойто и такое)
                                                                    в таблице значение так и хранится словом
                                                                      Александр Туниеков
                                                                      05 апреля 2023, 03:05
                                                                      +1
                                                                      Привет. Вопрос не до конца понял, но может так: вносятся данные в виде текста и селект нужен только в фильтре.
                                                                      Тогда примерно так:
                                                                      {'!getTable' | snippet : [
                                                                         'loadModels'=>'gtsShop',
                                                                         'showLog'=>1,
                                                                         'selects'=>[
                                                                            'test'=>[
                                                                               'type'=>'data',
                                                                               'rows'=>[
                                                                                  ['test','test'],
                                                                                  ['Oplata','Oplata']
                                                                               ]
                                                                            ]
                                                                         ],
                                                                         'table'=>[
                                                                              'class'=>'gsRaschet',
                                                                              'pdoTools'=>[
                                                                                  'class'=>'gsRaschet',
                                                                              ],
                                                                              'autosave'=>1,
                                                                              'row'=>[
                                                                                  'id'=>['filter'=>1],
                                                                                  'name'=>[
                                                                                      'edit'=>['type'=>'text'],
                                                                                      'filter'=>[
                                                                                          'edit'=>['type'=>'select','select'=>'test']
                                                                                      ]
                                                                                  ],
                                                                              ]
                                                                          ]
                                                                      ]}
                                                                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                                                                      136