We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 31533
    • 8 Posts
    Кратко суть вопроса: Как сделать связанные инфоблоки в 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, но он, судя по мануалу, позволяет привязать только к одному какому-то документу, а не к нескольким выбранным из группы.
      • 785
      • 2,113 Posts
      Как вариант, можно подойти к проблеме совсем иначе. Написать плагин, который при любом сохранении документа, связанного с преподавателем, формировал бы нужный список значений TV и менял бы ранее установленные значения TV, если изменилось название документа.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации