10 окт. 2017 г., 15:14

Как скопировать цены?

Добрый день! Возникла необходимость скопировать примерно у сотни страниц цены из TV price2 в {$object.price}.
Пробовал так:

$q = $modx->newQuery('modResource'); $q->command('update'); $q->innerJoin('ShopmodxProduct', "Product"); $q->query['set']["price"] = array( "value" => "Product.sm_price", "type" => false, ); $s = $q->prepare(); print $q->toSQL(); // $s->execute();
не получилось. (MODX Revolution 2.5.8-pl + Shopmodxbox 3.0.1) Есть ли какое-нибудь решение (кроме, как переделывать все ручками).


Поясните, какая связь между price2 и ShopmodxProduct?
В ShopmodxProduct нет поля price2.

Я так понимаю, Вы обновили shopmodx с версии 2.х до версии 3.х?
Связи нет. Просто нашел топик https://modxclub.ru/topics/sql-zapros-na-update-s-dzhoinami-sredstvami-xpdo-2152.html и попробовал сделать все по аналогии... Поможете?
Начиная с версии shopmodx-3.0 поле price находится в modResource, компонент ShopmodxProduct там не используется.

С ImportX не сталкивались, не могу по нему ничего сказать. Мы используем свой компонент для импорта.

Посмотрите в журнал администратора
Если после импорта там появляются записи типа

, то можно навесить плагин на событие OnDocFormSave, который будет копировать цену из tv в поле price документа. Если цена попадает при импорте в TV price2, то плагин будет примерно такой:

<?php $object->set('price', $object->getTVValue('price2')); $object->save();

записи есть. А какой код плагина?

про событие понял..
Ну и после этого нужно повторить импорт
Спасибо! Буду пробовать...
Пожалуйста. Напишите по результату :)
Что-то пошло не так:
Консоль запущена...
Attempted to set execution time to infinite. Max execution time currently: 30.
Тестирование данных перед импортом...
Данные из CSV-файла заменят все данные, введённые вручную. Название файла: import-NA-SITE.csv
Ошибок не обнаружено. Готовим данные к импорту...
Для импорта готовы элементы в количестве: 3. Импортирование...
PHP notice: Undefined index: data
PHP notice: Undefined variable: object

Потом все зависает. Если обновить страницу, появляется 1 ресурс из 3 импортируемых тестовых. В этом ресурсе поле price =0.


Попробуйте

<?php $resource->set('price', $resource->getTVValue('price2')); $resource->save();

Добавить комментарий