Кратко суть вопроса: Как сделать связанные инфоблоки в MODx?
Я регулярно работаю с Bitrix CMS, там есть такой функционал: инфоблоки. Грубо говоря, инфоблок -- это тип документов (со всеми привычными полями: кратким и полным описанием, соответствующими картинками и т.д.), и в нем можно создать дополнительные поля разных типов. Точно также можно поступать с документами в MODx, создавая шаблон и привязывая к нему TV. Но в чем разница -- в инфоблоках Bitrix в качестве типа поля инфоблока можно выбрать другой инфоблок.
Проиллюстрирую: создаем тип документов "Книги", и в качестве поля "_Автор_" выбираем тип документов "Авторы". При создании записи "Книга" имеем возможность выбрать ее автора (или тут же внести нового) из уже созданной группы документов "Авторы". Ну и соответственно поддерживаются все манипуляции при отображении шаблонов обоих документов.
Как мне аналогичную штуку провернуть в MODx?
Что я сделал сам на текущий момент
Создал две папки "список курсов" и "список преподавателей"
Создал переменную trainers, в поле "Возможные значения" ввел @SELECT pagetitle FROM modx_site_content WHERE parent = 419 (где 419 -- это ID папки с преподавателями)
Привязал ее к шаблону с курсами
При создании документа курса теперь есть возможность выбрать одного или нескольких преподавателей.
Так в чем проблема?
MODx выбирает все имена всех преподавателей из списка, дает мне возможность их выбрать при создании курса, и где-то запоминает. Допустим, я редактирую имя преподавателя. Теперь, чтобы его имя обновилось во всех курсах, которые он ведет, надо снова эти курсы отредактировать, выбрать этого преподавателя, и сохранить. Тогда обновится. Кроме того, никакие манипуляции с Ditto не позволяют мне получить правильный список преподавателей при выводе страницы курса.
Ditto для вывода преподавателей курса я вызываю так:
[tt]<ul>
[[Ditto? &parents=`419` &depth=`1` &tpl=`dittoTrainersListForCourse` &filter=`[+pagetitle+],[*trainers*],8`]]
</ul>
[/tt]
И оно, разумеется, врет. Привязки не такие, как оно показывает. Да и вообще, неправильно я связанный каталог сделал, а как правильно -- не понимаю. Чую, это как-то просто очень, но как? Есть такой биндинг @DOCUMENT, но он, судя по мануалу, позволяет привязать только к одному какому-то документу, а не к нескольким выбранным из группы.
Как вариант, можно подойти к проблеме совсем иначе. Написать плагин, который при любом сохранении документа, связанного с преподавателем, формировал бы нужный список значений TV и менял бы ранее установленные значения TV, если изменилось название документа.