runProcessor('resource/update', $data) стирает существующие значения TV
Обновляю ресурс, например так:
Или есть какой-то способ, чтобы обновлять только нужные tv у ресурса?
$data = ArrayА значения других tv, которые не указаны в $data стираются. Это так и должно работать и нужно до этого получить как-то значения всех tv данного ресурса и передавать в data?
(
'class_key' => 'msProduct',
'context_key' => 'web',
'tvs' => '1',
'tv93' => '1558185960',
'price' => '5',
'article' => '20015',
'tv91' => '9',
'id' => '3014',
'alias' => 'alia-takoi-vot',
'pagetitle' => 'Заголовок'
);
$response = $modx->runProcessor('resource/update', $data);
Или есть какой-то способ, чтобы обновлять только нужные tv у ресурса?
Комментарии: 5
Нет, обходных моментов нативных нет. И да, MODX перетирает при обновлении все ТВшки при передаче tvs => 1. То есть если передан tvs => 1, то он пытается обновить все TVшки документа и если для имеющейся TVшки не было получено новое значение, то она стирается.
Это один из самых неприятных моментов в MODX, мешающих разработке кастомных интерфейсов для обновления ресурсов, так как при передаче хотя бы одного параметра надо передавать все имеющиеся. А это не только неудобно, но и не секурно (ты такой типа через управление формами скрываешь отдельные TVшки, чтобы другие манагеры их не видели и не меняли, а они тупо в hidden-полях на странице находятся и мало того, что их можно прочитать, так их еще и изменить можно (но это не точно, не помню проверяет ли он права на доступ к ТВшке при обновлении, но по-моему нет)). На мой взгляд это дичайшая дичь.
P.S. как вариант: если это ваш какой-то кастомный компонент, то можете не передавать tvs => 1, а в плагине на обновление ресурса обновлять ТВшку через $object->setTVValue($id/name, $value)
Это один из самых неприятных моментов в MODX, мешающих разработке кастомных интерфейсов для обновления ресурсов, так как при передаче хотя бы одного параметра надо передавать все имеющиеся. А это не только неудобно, но и не секурно (ты такой типа через управление формами скрываешь отдельные TVшки, чтобы другие манагеры их не видели и не меняли, а они тупо в hidden-полях на странице находятся и мало того, что их можно прочитать, так их еще и изменить можно (но это не точно, не помню проверяет ли он права на доступ к ТВшке при обновлении, но по-моему нет)). На мой взгляд это дичайшая дичь.
P.S. как вариант: если это ваш какой-то кастомный компонент, то можете не передавать tvs => 1, а в плагине на обновление ресурса обновлять ТВшку через $object->setTVValue($id/name, $value)
Благодарю за ответ.
Я так и сделал, tvs = false. А тв-шки через setTVValue.
PS: Про hidden-поля интересно, но обычно менеджеры даже не знают что такие поля существуют в природе. Ну и обычно кому не доверяешь, лучше менеджером не делать. Но да, выглядит костыльно, как будто сам делал)
Я так и сделал, tvs = false. А тв-шки через setTVValue.
PS: Про hidden-поля интересно, но обычно менеджеры даже не знают что такие поля существуют в природе. Ну и обычно кому не доверяешь, лучше менеджером не делать. Но да, выглядит костыльно, как будто сам делал)
Не за что!
Есть ещё вариант с расширением ресурса, если помнишь.
Помню. Но он не проще и не универсальней, потому что будет срабатывать только на расширенный тип ресурса. А плагин на обновление будет срабатывать на обновление любых типов ресурсов (имеется ввиду документов).
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.