Александр Туниеков

Александр Туниеков

С нами с 19 декабря 2015; Место в рейтинге пользователей: #15
Александр Туниеков
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, 14:46
0
Блин некогда разбираться. Позже
Александр Туниеков
24 марта 2021, 13:04
0
я и сказал что все сниппеты не могут возвращать массив. Хоть из pdoTools хоть из чего. pdoFetch входит в pdoTools.
Александр Туниеков
24 марта 2021, 01:09
+2
pdoTools умеет возвращать массивы. Это сниппеты modx не умеют возвращать массивы. Только строки. Точнее выражайтесь плиз :-)
Александр Туниеков
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»
Александр Туниеков
23 марта 2021, 23:57
0
Чтобы поля редактировались надо указать как их искать.
'fullname'=>[
                    'class'=>'modUserProfile',
                            'edit'=>[
                                'type'=>'text',
                                'search_fields'=>['internalKey '=>'id', ],
                            ],
                    ],
Александр Туниеков
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'=>'',
Александр Туниеков
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']
                    ],
            ],
    ],
]}
Александр Туниеков
21 марта 2021, 13:20
0
Блин с extended полями не понятно как их вывести и редактировать. Не работает сейчас компонент с ними!
Я 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']
                    ],
            ],
    ],
]}
Александр Туниеков
14 марта 2021, 16:08
0
Отправил тебе 200р за Автоустановщик шаблонов BELISSIMO. Еще не тестировал, но сама идея нравиться :-). Не верстальщик и все время мучаюсь с шаблонами.
Александр Туниеков
11 марта 2021, 17:07
0
Еще можно перегнать код массива femom в JSON.
В конфиге записать 2 параметра toJSON и showLog и в логе будет массив в json.
{'getTable' | snippet : [
    'showLog'=>1,
    'toJSON'=>1,
    'loadModels'=>'raschets',
    'table'=>[
toFenom преобразует json массив в fenom массив
Александр Туниеков
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, 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, 16:32
0
Ошибки не критичные. Не могу добраться все их обработать :-(. их много при работе компонента вылазит. Весь журнал забивают.
Александр Туниеков
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.