runProcessor('resource/update', $data) стирает существующие значения TV

Обновляю ресурс, например так:
$data = Array
(
'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, которые не указаны в $data стираются. Это так и должно работать и нужно до этого получить как-то значения всех tv данного ресурса и передавать в data?
Или есть какой-то способ, чтобы обновлять только нужные tv у ресурса?
Павел
18 мая 2019, 16:48
modx.pro
1 551
0

Комментарии: 5

Fi1osof
18 мая 2019, 18:12
0
Нет, обходных моментов нативных нет. И да, MODX перетирает при обновлении все ТВшки при передаче tvs => 1. То есть если передан tvs => 1, то он пытается обновить все TVшки документа и если для имеющейся TVшки не было получено новое значение, то она стирается.
Это один из самых неприятных моментов в MODX, мешающих разработке кастомных интерфейсов для обновления ресурсов, так как при передаче хотя бы одного параметра надо передавать все имеющиеся. А это не только неудобно, но и не секурно (ты такой типа через управление формами скрываешь отдельные TVшки, чтобы другие манагеры их не видели и не меняли, а они тупо в hidden-полях на странице находятся и мало того, что их можно прочитать, так их еще и изменить можно (но это не точно, не помню проверяет ли он права на доступ к ТВшке при обновлении, но по-моему нет)). На мой взгляд это дичайшая дичь.

P.S. как вариант: если это ваш какой-то кастомный компонент, то можете не передавать tvs => 1, а в плагине на обновление ресурса обновлять ТВшку через $object->setTVValue($id/name, $value)
    Павел
    18 мая 2019, 18:38
    0
    Благодарю за ответ.
    Я так и сделал, tvs = false. А тв-шки через setTVValue.

    PS: Про hidden-поля интересно, но обычно менеджеры даже не знают что такие поля существуют в природе. Ну и обычно кому не доверяешь, лучше менеджером не делать. Но да, выглядит костыльно, как будто сам делал)
      Fi1osof
      18 мая 2019, 18:42
      0
      Не за что!
      Сергей Шлоков
      18 мая 2019, 21:13
      0
      Есть ещё вариант с расширением ресурса, если помнишь.
        Fi1osof
        19 мая 2019, 01:50
        0
        Помню. Но он не проще и не универсальней, потому что будет срабатывать только на расширенный тип ресурса. А плагин на обновление будет срабатывать на обновление любых типов ресурсов (имеется ввиду документов).
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5