Здравствуйте. Вопрос такого рода. Есть структура:
- Родитель
- ---Дочерний 1
- ---Дочерний 2
- ---Дочерний 3
- Родитель
- ---Дочерний 1
- ---Дочерний 2
- ---Дочерний 3
Дочерних документов может быть неограниченное! количество. У каждого дочернего документа есть несколько ТВ параметров с типом ввода мульти-селект(множественный выбор). Скажем одно из доп. полей называется my_tv_1. Такое же доп. поле my_tv_1 есть и у Родителя. Теперь главная суть вопроса: вот я в дочерних документах задал значения в my_tv_1 (например в ресурсе 1, значение А, в ресурсе 2 значение Б и в ресурсе 3 значение В) и нужно чтобы эти значения с трех дочерних ресурсов прописались в этом же ТВ у родителя. То есть у родителя значения тв my_tv_1 были А, Б, В.
Если короче выражаться, то в ТВ родителя должны быть все возможные значения определенного ТВ всех дочерних ресурсов (если какое-то значение уже есть, тогда не дублируем, только уникальные значения).
Я как бы с пхп совсем на Вы… Я думаю надо сделать плагин на событие onDocFormSave, который будет при сохранении дочернего ресурса брать полученное значение ТВ, искать его в родителе и если такого значения нет, тогда записываем и обновляем родительский ресурс. Может кто-то помочь накидать такой плагин?
SweetDreams 02.01.2017 13:55 #
При сохранении дочернего ресурса берем значение my_tv_1 текущего документа, проверяем значение my_tv_1 родительского ресурса, если такое значение есть тогда ничего не делаем, иначе добавляем это значение и обновляем родительский документ.
Логику я надеюсь понимаю, а вот написать на пхп проблемно.....(
Павел Романов 02.01.2017 14:50 #
SweetDreams 02.01.2017 15:08 #
Это же ТВ «Тип» есть и у родителя. Поэтому возможные значения и все остальное формируется также, ну потому что это и есть это ТВ «тип» и другим оно быть не может.
Так вот… В итоге если взять все дочерние ресурсы, вариантов значения поля «тип» может быть штук 5 например, и надо все эти 5 значений назначить родителю. Это все можно сделать и в ручную конечно, но хотелось бы это все автоматизировать так как будет трудозатратно переписывать все возможные значения ручками.
Павел Романов 02.01.2017 15:26 #
Например, все слова идут через запятую или разделены ещё как-то.
Что выводится, если у ресурса добавить несколько значений в эту TV и просто прописать [[*my_tv_1]]?
SweetDreams 02.01.2017 15:46 #
Павел Романов 02.01.2017 16:35 #
Но вообще-то, в фильтр Вы можете все параметры собрать сниппетом прямо в родителе без всяких TV и плагинов:
Для второго варианта чанк filter-item может быть, например, таким:
SweetDreams 02.01.2017 16:47 #
Просто мне надо штук 5 разных ТВ прикрепить к родителю, чтобы не делать 5 сниппетов на каждое тв
SweetDreams 02.01.2017 16:55 #
Буду пробовать плагин. Плагин же на событие onDocFormSave назначать или на какое?
SweetDreams 02.01.2017 16:43 #
Павел Романов 02.01.2017 16:58 #
SweetDreams 02.01.2017 17:23 #
Вот так выводятся товары
pixs.ru/showimage/modelsjpg_7808803_24633047.jpg
А так коллекции (категории)
pixs.ru/showimage/collection_8801661_24633060.jpg
Все это дело выводится за один раз сниппетом msProducts. Поэтому мне и нужно прикрутить значения всех ТВ коллекциям, чтобы они могли фильтроваться, если хоть один товар в коллекции имеет значение тв «тип» винил, то выведется коллекция где есть этот товар иначе не выведется, а так фильтр не знает где какие опции.
Павел Романов 02.01.2017 17:25 #
Я просто думал у Вас там своя система фильтрации.
SweetDreams 03.01.2017 10:37 #
Павел Романов 03.01.2017 11:49 #
Нужно в возможных значениях сделать так, чтобы в шаблоне вывода эти значения во что-то оборачивались. Например в "_":
То есть, если в @EVAL у Вас выборка производится через runSnippet, то так:
Тогда можно обработать эти разделители и писать их в базу в правильном формате:
SweetDreams 03.01.2017 11:57 #
И outputSeparator ||
То есть вот так Виниловые==Виниловые||Бумажные==Бумажные
А вот эти штуки _ обязательно да писать?
SweetDreams 03.01.2017 12:00 #
Павел Романов 03.01.2017 12:01 #
На самом деле можно избежать добавления "_", если получать сразу сырые значения из базы (вместе с ||).
Попробуйте пока не добавлять разделители, а сделать так:
SweetDreams 03.01.2017 12:03 #
Павел Романов 03.01.2017 12:11 #
SweetDreams 03.01.2017 12:25 #
И все, все отлично работает, спасибо вам огромное:)
Вот то что получилось (событие для плагина onDocFormSave):
Павел Романов 03.01.2017 12:35 #
Поэтому лучше используйте последний вариант. Там через modTemplateVarResource получаются как раз сырые данные (подробности) и в переменную $parTV пишется верно:
Тогда просто добавляем "||Пластиковые" и все ок:
SweetDreams 03.01.2017 12:40 #
SweetDreams 03.01.2017 12:54 #
Событие (onDocFormSave)
SweetDreams 31.01.2017 20:56 #
Павел Романов 01.02.2017 10:44 #
То есть не:
а:
SweetDreams 01.02.2017 22:04 #