![](https://habrastorage.org/storage3/89f/6a5/23a/89f6a523a7d1aba8c7e210e33065638f.png)
Многие используют MIGX для создания фотогалерей, но этим его функционал не ограничивается. Это настоящий конструктор для управления данными любых таблиц БД. Можно даже выводить список дочерних ресурсов (документов MODX) в любом контейнере. Об этом и пойдет речь в данной статье. Кое что я узнал из документации MIGDB, но, на сколько я понял, она уже порядком устарела и многое из описанного там просто не работает.
Я расскажу как сделать такую таблицу с вложенными ресурсами:
![](https://habrastorage.org/storage3/806/da3/edd/806da3edd276862e30713d4e0051fb80.png)
1. Открыть «Компоненты» -> «MIGX». Перейти на вкладку «MIGX». Нажать кнопку «Добавить элемент».
2. На вкладке «Settings» ввести имя (Name) конфигурации, например «child_resources». Нажать кнопку «Выполнить».
Можно было бы очень долго расписывать что где нажать и куда что ввести, но сделаем проще. Я дам готовую конфигурацию, а вы настроите под себя.
3. Кликнуть правой кнопкой мыши по строке нашей конфигурации и выбрать «Экспорт/Импорт».
![](https://habrastorage.org/storage3/c0a/2e7/779/c0a2e77796c48fca02fdb34204fb8e5f.png)
В поле в появившемся окне вставить такой 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»).
![](https://habrastorage.org/storage3/45c/d43/a6f/45cd43a6f1dee43390527220ad7936fd.png)
Сделать доступным этот TV для соответствующих ресурсам-контейнерам шаблонов.
9. На этом можно было бы закончить, но т.к. MIGX ещё сыроват мне пришлось поправить процессоры в папке "/processors/mgr/resconnections/". Взять из можно здесь. Ещё нужно обновить код файла migx.class.php.
Теперь всё должно работать как надо.
Таким способом вы можете сделать управление для любых данных. С помощью MIGXDB можно создавать и редактировать свои таблицы в БД. Об этом написано здесь.