Pull to refresh

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

Reading time 8 min
Views 14K
Не устаю удивляться возможностям, которые предоставляет компонент MIGX от Bruno17 для MODX Revolution. Выглядит он пока неказисто и встречаются ошибочки, но критических проблем нет. Всё, что написано в этой статье, актуально для MIGX версии 2.5.8-pl (последняя на данный момент).

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



Я расскажу как сделать такую таблицу с вложенными ресурсами:


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

В поле в появившемся окне вставить такой 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»).

Сделать доступным этот TV для соответствующих ресурсам-контейнерам шаблонов.
9. На этом можно было бы закончить, но т.к. MIGX ещё сыроват мне пришлось поправить процессоры в папке "/processors/mgr/resconnections/". Взять из можно здесь. Ещё нужно обновить код файла migx.class.php.

Теперь всё должно работать как надо.
Таким способом вы можете сделать управление для любых данных. С помощью MIGXDB можно создавать и редактировать свои таблицы в БД. Об этом написано здесь.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+5
Comments 1
Comments Comments 1

Articles