Автообновление значений ресурса из TV
Добрый день, есть такая задача:
Создаю MIGX со специалистами, там ФИО, должность и пр поля. Далее создаю TV поле select и в него подставляю ФИО специалистов. Далее у ресурса выбираю специалиста.
Вопрос вот в чем, если я поменяю в MIGX ФИО специалиста, в TV оно меняется, но у ресурса остается старое значение, т.е. не обновляется. Возможно ли как-то обновлять значения у ресурса тоже?
Решение:
В итоге по совету написал сниппет который по id берет значения
Выводить значения так:
и т.д. любые поля что указали в MIGX.
К ресурсу соответственно привязывается ID и если его не менять, то все значения связанные с ним будут автоматически обновляться.
Создаю MIGX со специалистами, там ФИО, должность и пр поля. Далее создаю TV поле select и в него подставляю ФИО специалистов. Далее у ресурса выбираю специалиста.
Вопрос вот в чем, если я поменяю в MIGX ФИО специалиста, в TV оно меняется, но у ресурса остается старое значение, т.е. не обновляется. Возможно ли как-то обновлять значения у ресурса тоже?
Решение:
В итоге по совету написал сниппет который по id берет значения
$resource = $modx->getObject('modResource', array('id' => 8));
$tv = $modx->fromJSON( $resource->getTVValue($tvname) );
$result = array();
foreach ($tv as $key => $value) {
if ($value['id'] == $id) {
$result = $tv[$key];
break;
}
};
$modx->setPlaceholders($result, $tvprefix.'.');
Выводить значения так:
[[getMigxOptionByID?
&tvname=`consultation-specialist`
&tvprefix = `specialist`
&id=`1`
]]
[[+specialist.name]]
[[+specialist.image]]
и т.д. любые поля что указали в MIGX.
К ресурсу соответственно привязывается ID и если его не менять, то все значения связанные с ним будут автоматически обновляться.
Комментарии: 4
А в tv select каким образом значения выводите?
Сниппетом, он берет имена специалистов из MIGX и возвращает в виде ФИО1==ФИО1||ФИО2==ФИО2||ФИО3==ФИО3
В поле Возможные значения вызывается сниппет
Сам сниппет
В поле Возможные значения вызывается сниппет
@EVAL return $modx->runSnippet('getMigxOptionsForTV', array('tvname' => 'consultation-specialist', 'key' => 'name'));
Сам сниппет
$resource = $modx->getObject('modResource', array('id' => 8));
$tv = $modx->fromJSON( $resource->getTVValue($tvname) );
foreach ($tv as $value) {
$result[] = $value[$key].'=='.$value[$key];
};
return implode('||', $result);
Добавьте в таблицу уникальное числовое поле id и выводите не ФИО1==ФИО1, а 1==ФИО1,
а во фронтенде тогда выбирайте ФИО из migx по уникальному id
а во фронтенде тогда выбирайте ФИО из migx по уникальному id
Интересная идея, спасибо, буду пробовать.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.