- PVSM.RU - https://www.pvsm.ru -

Групповое редактирование ресурсов (документов) с помощью MIGXDB

Групповое редактирование ресурсов (документов) с помощью MIGXDBНе устаю удивляться возможностям, которые предоставляет компонент MIGX [1] от Bruno17 [2] для MODX Revolution. Выглядит он пока неказисто и встречаются ошибочки, но критических проблем нет. Всё, что написано в данной статье, актуально для версии 2.5.8-pl (последняя на данный момент).

Многие используют MIGX для создания фотогалерей [3], но этим его функционал не ограничивается. Это настоящий конструктор для управления данными любых таблиц БД. Можно даже выводить список дочерних ресурсов (документов MODX) в любом контейнере. Об этом и пойдет речь в данной статье. Кое что я узнал из документации MIGDB [4], но, на сколько я понял, она уже порядком устарела и многое там просто не работает.

Я расскажу как сделать такую таблицу с вложенными ресурсами:
Групповое редактирование ресурсов (документов) с помощью MIGXDB

1. Открыть «Компоненты» -> «MIGX». Перейти на вкладку «MIGX». Нажать кнопку «Добавить элемент».
2. На вкладке «Settings» ввести имя (Name) конфигурации, например «child_resources». Нажать кнопку «Выполнить».
Можно было бы очень долго расписывать что где нажать и куда что ввести, но сделаем проще. Я дам готовую конфигурацию, а вы настроите под себя.
3. Кликнуть правой кнопкой мыши по строке нашей конфигурации и выбрать «Экспорт/Импорт».
Групповое редактирование ресурсов (документов) с помощью MIGXDB
В поле в появившемся окне вставить такой JSON массив:

Показать

{

    "formtabs":[
        {
            "MIGX_id":1,
            "caption":"Основные данные",
            "print_before_tabs":"0",
            "fields":[
                {
                    "MIGX_id":1,
                    "field":"pagetitle",
                    "caption":"Заголовок",
                    "description":"",
                    "description_is_code":"0",
                    "inputTV":"",
                    "inputTVtype":"",
                    "configs":"",
                    "sourceFrom":"config",
                    "sources":"[]",
                    "inputOptionValues":"",
                    "default":""
                },
                {
                    "MIGX_id":10,
                    "field":"alias",
                    "caption":"Псевдоним",
                    "description":"",
                    "description_is_code":"0",
                    "inputTV":"",
                    "inputTVtype":"",
                    "configs":"",
                    "sourceFrom":"config",
                    "sources":"[]",
                    "inputOptionValues":"",
                    "default":""
                },
                {
                    "MIGX_id":6,
                    "field":"introtext",
                    "caption":"Краткое описание",
                    "description":"",
                    "description_is_code":"0",
                    "inputTV":"",
                    "inputTVtype":"textarea",
                    "configs":"",
                    "sourceFrom":"config",
                    "sources":"[]",
                    "inputOptionValues":"",
                    "default":""
                },
                {
                    "MIGX_id":7,
                    "field":"image",
                    "caption":"Картинка",
                    "description":"",
                    "description_is_code":"0",
                    "inputTV":"image",
                    "inputTVtype":"",
                    "configs":"",
                    "sourceFrom":"config",
                    "sources":"[]",
                    "inputOptionValues":"",
                    "default":""
                },
                {
                    "MIGX_id":4,
                    "field":"price",
                    "caption":"Цена",
                    "description":"",
                    "description_is_code":"0",
                    "inputTV":"price",
                    "inputTVtype":"",
                    "configs":"",
                    "sourceFrom":"config",
                    "sources":"[]",
                    "inputOptionValues":"",
                    "default":""
                },
                {
                    "MIGX_id":5,
                    "field":"context_key",
                    "caption":"Контекст",
                    "description":"",
                    "description_is_code":"0",
                    "inputTV":"",
                    "inputTVtype":"listbox",
                    "configs":"",
                    "sourceFrom":"config",
                    "sources":"[]",
                    "inputOptionValues":"catalog||web",
                    "default":"catalog"
                },
                {
                    "MIGX_id":2,
                    "field":"template",
                    "caption":"Шаблон",
                    "description":"",
                    "description_is_code":"0",
                    "inputTV":"",
                    "inputTVtype":"hidden",
                    "configs":"",
                    "sourceFrom":"config",
                    "sources":"[]",
                    "inputOptionValues":"",
                    "default":5
                },
                {
                    "MIGX_id":8,
                    "field":"show_in_tree",
                    "caption":"Показывать в дереве?",
                    "description":"",
                    "description_is_code":"0",
                    "inputTV":"",
                    "inputTVtype":"listbox",
                    "configs":"",
                    "sourceFrom":"config",
                    "sources":"[]",
                    "inputOptionValues":"no==0||yes==1",
                    "default":""
                },
                {
                    "MIGX_id":9,
                    "field":"published",
                    "caption":"Опубликован",
                    "description":"",
                    "description_is_code":"0",
                    "inputTV":"",
                    "inputTVtype":"hidden",
                    "configs":"",
                    "sourceFrom":"config",
                    "sources":"[]",
                    "inputOptionValues":"",
                    "default":1
                }
            ]
        },
        {
            "MIGX_id":2,
            "caption":"Подробное описание",
            "print_before_tabs":"0",
            "fields":[
                {
                    "MIGX_id":1,
                    "field":"content",
                    "caption":"Описание",
                    "description":"",
                    "description_is_code":"0",
                    "inputTV":"",
                    "inputTVtype":"richtext",
                    "configs":"",
                    "sourceFrom":"config",
                    "sources":"[]",
                    "inputOptionValues":"",
                    "default":""
                }
            ]
        }
    ],
    "contextmenus":"recall_remove_delete",
    "actionbuttons":"addItem||bulk||toggletrash",
    "columnbuttons":"update||publish||unpublish||recall_remove_delete",
    "filters":[
        {
            "MIGX_id":1,
            "name":"search",
            "label":"search",
            "emptytext":"Поиск...",
            "type":"textbox",
            "getlistwhere":{
                "pagetitle:LIKE":"%[[+search]]%",
                "OR:longtitle:LIKE":"%[[+search]]%",
                "OR:content:LIKE":"%[[+search]]%"
            },
            "getcomboprocessor":"",
            "combotextfield":"",
            "comboidfield":"",
            "comboparent":"",
            "default":""
        }
    ],
    "extended":{
        "migx_add":"Добавить",
        "formcaption":"Дочерний ресурс",
        "update_win_title":"",
        "win_id":"child_resources",
        "maxRecords":"",
        "addNewItemAt":"bottom",
        "multiple_formtabs":"",
        "extrahandlers":"",
        "packageName":"",
        "classname":"modResource",
        "task":"resconnections",
        "getlistsort":"id",
        "getlistsortdir":"desc",
        "use_custom_prefix":"0",
        "prefix":"",
        "grid":"",
        "gridload_mode":1,
        "check_resid":"0",
        "check_resid_TV":"",
        "join_alias":"",
        "has_jointable":"yes",
        "getlistwhere":"",
        "joins":"",
        "cmpmaincaption":"",
        "cmptabcaption":"",
        "cmptabdescription":"",
        "cmptabcontroller":"",
        "winbuttons":"",
        "onsubmitsuccess":"",
        "submitparams":""
    },
    "columns":[
        {
            "MIGX_id":1,
            "header":"ID",
            "dataIndex":"id",
            "width":50,
            "sortable":true,
            "show_in_grid":1,
            "renderer":"",
            "clickaction":"",
            "selectorconfig":"",
            "renderchunktpl":"",
            "renderoptions":"[]"
        },
        {
            "MIGX_id":2,
            "header":"Заголовок",
            "dataIndex":"pagetitle",
            "width":300,
            "sortable":true,
            "show_in_grid":1,
            "renderer":"this.renderRowActions",
            "clickaction":"",
            "selectorconfig":"",
            "renderchunktpl":"",
            "renderoptions":"[]"
        },
        {
            "MIGX_id":3,
            "header":"Цена",
            "dataIndex":"price",
            "width":100,
            "sortable":true,
            "show_in_grid":1,
            "renderer":"",
            "clickaction":"",
            "selectorconfig":"",
            "renderchunktpl":"",
            "renderoptions":"[]"
        },
        {
            "MIGX_id":4,
            "header":"Опубликован",
            "dataIndex":"published",
            "width":100,
            "sortable":"false",
            "show_in_grid":1,
            "renderer":"this.renderCrossTick",
            "clickaction":"",
            "selectorconfig":"",
            "renderchunktpl":"",
            "renderoptions":"[]"
        },
        {
            "MIGX_id":5,
            "header":"Удален",
            "dataIndex":"deleted",
            "width":"",
            "sortable":"false",
            "show_in_grid":"0",
            "renderer":"",
            "clickaction":"",
            "selectorconfig":"",
            "renderchunktpl":"",
            "renderoptions":"[]"
        }
    ]

}

Готов интерфейс управления ресурсами.
4. Создать файл конфигурации /core/components/migx/configs/grid/grid.child_resources.config.inc.php с таким содержимым:

<?php

$this->customconfigs['idfield_local'] = 'parent';
$this->customconfigs['includeTVs'] = 1;
$this->customconfigs['includeTVList'] = 'price,image';

Как вы догадались, includeTVList это список всех TV, которые вам нужны в компоненте.
5. Снова кликнуть по строке конфигурации «child_resources» и выбрать «Редактировать». Перейти «Formtabs» -> «Основные данные» -> «Редактировать». Откроется список всех полей. Здесь надо настроить имена полей и TV, которые вам нужны.
6. Как видим, для поля «image» установлен «Input TV» — «image». Если такой TV-параметр (дополнительное поле) ещё не создан, то нужно его создать, назначить тип ввода «Изображение» и сделать доступным для нужного шаблона. Так же с остальными TV.
7. Открыть редактирование поля «template», перейти на вкладку «Input Options» и в поле «Default Value» ввести ID шаблона дочерних ресурсов, которыми будем управлять через наш компонент. Так же следует настроить поле «context_key». Выставить там нужные контексты.
8. Теперь нужно сделать чтобы список ресурсов появлялся при редактировании ресурсов с соответствующим шаблоном. Создаем TV, например с именем «child_resources». Тип ввода указать «migxdb», в поле «Конфигурации» ввести название созданной ранеее конфигурации («child_resources»).
Групповое редактирование ресурсов (документов) с помощью MIGXDB
Сделать доступным этот TV для соответствующих ресурсам-контейнерам шаблонов.
9. На этом можно было бы закончить, но т.к. MIGX ещё сыроват мне пришлось поправить процессоры в папке "/processors/mgr/resconnections/". Взять из можно здесь [5]. Ещё нужно обновить код файла migx.class.php [6].

Теперь всё должно работать как надо.
Таким способом вы можете сделать управление для любых данных. С помощью MIGXDB можно создавать и редактировать свои таблицы в БД. Об этом написано здесь [7].

Автор: Andchir

Источник [8]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/modx/44993

Ссылки в тексте:

[1] MIGX: http://modx.com/extras/package/migx

[2] Bruno17: https://github.com/Bruno17

[3] фотогалерей: http://rtfm.modx.com/extras/revo/migx/migx.backend-usage

[4] документации MIGDB: http://rtfm.modx.com/extras/revo/migxdb/migxdb.tutorials/migxdb.manage-child-resources-in-a-grid-tv-with-help-of-migxdb

[5] здесь: https://bitbucket.org/andchir/migx/src/873758a934e867c87da6f7efe310b9be134c2771/core/components/migx/processors/mgr/resconnections?at=master

[6] migx.class.php: https://bitbucket.org/andchir/migx/src/873758a934e867c87da6f7efe310b9be134c2771/core/components/migx/model/migx/migx.class.php?at=master

[7] здесь: http://modx-shopkeeper.ru/documentation/modx-revolution/tovaryi-iz-otdelnoj-tabliczyi.html

[8] Источник: http://habrahabr.ru/post/196396/