Всего 125 336 комментариев

vectorserver
05 октября 2022, 11:45
0
Тогда иди в miniShop2 :: Настройки (скрин), создавай доп. опции, потом вызывай из через метод $product->loadData()->get('options') (пример кода ниже)



Пример:
<?php
$debug = 1;
$array_ids = $modx->getChildIds(8,6,array('context' => 'web'));

foreach ($array_ids as $doc_ID){
    /* @var msProduct $product */
    $product = $modx->getObject('msProduct',$doc_ID);
    if($product){

        //tv price
        $tv_price = $product->getTVValue('price');
        //tv available
        $tv_available = $product->getTVValue('available');



        //msProduct price
        $product->set('price',$tv_price);

        //Дополнительные опции товара
        $options = $product->loadData()->get('options');
        //Добавим значение в доп. опцию товара
        $options['available'][0] = $tv_available;
        //Обновим опции
        $product->set('options', $options);
        //Save
        $product->save();

        //debug
        if($debug){

            var_dump($product->toArray());
            break;
        }



    }

}
Константин Ильин
05 октября 2022, 11:43
0
Совсем вы не хотите гуглить.
Есть процессоры, один минус они медленные. Если товаров очень много(примерно >1000) то это будет долго или выйдет за лимит выполнения скрипта.
.....
foreach ($resources as $resource) {
    // Эти строки не трогайте
    $arr = $resource->toArray();
    $productArray['context_key'] = 'web';
    $productArray['class_key'] = 'msProduct';
    $productArray['alias'] = $arr['alias'];
    $productArray['id'] = $arr['id'];
    
    // Эти строки настраивайте как вам надо
    $productArray['options-cvet'] = ['белый' , 'кофе', 'серый'];
    $productArray['options-available'] = 1;
    $productArray['price'] = 99999;
    $productArray['tags'] =  ['большие' , 'маленькие'];
    
    // Это процессор обновления товара
    $response = $modx->runProcessor('resource/update', $productArray);
}
Maks
05 октября 2022, 10:59
0
Здесь проблема именно с записью в поля такие как Tags Color и остальные того же типа ввода. Если поле просто текст то проблем с записью нет никаких.

Никто не подскажет как сделать запись именно в такие поля?
Артур Шевченко
05 октября 2022, 10:58
0
Я думаю, что там адреса привязывались к пользователю, поэтому компонент будет работать.
Максим
05 октября 2022, 10:31
0
Помнится, видел даже готовое дополнение, которое позволяло создавать несколько адресов доставки из личного кабинета и при заказе выбирать… Эта функция достаточно удобная, сам пользуюсь на всяких ДодоПиццах ))
Maks
05 октября 2022, 10:25
0
Да но только не одной опцией все ограничивается. Есть и другие опции. Может кто подскажет как опции сюда прикрутить?
Aleksandr Huz
05 октября 2022, 09:41
+5
Добрый день!
В ТП вижу ваше сообщение в 21:02 (04.10). Когда мне нужно было отвечать, ночью?
Или может вы еще где-то писали в ТП и я не заметил. В любом случаи ответил вам в ТП.
Роман
05 октября 2022, 08:57
0
Версию php поменяйте на 7.4, скорее всего из-за этого.
Роман
05 октября 2022, 08:56
0
Вряд ли доступ был получен. Хотя лучше поменять все равно пароли. Можно поставить ограничения на создание пользователя по IP и времени, скажем с одного IP в 5-10 минут, ну или капчу повесить.
Сергей Чернышев
05 октября 2022, 08:55
0
Привет, ошибок по этому поводу нет, я даже подключил отдельную библиотеку, проблема не изменилась. Мне кажется не адаптирована под версию 2.8.4 MODX
Роман
05 октября 2022, 08:49
0
Зависимости от библиотек: jQuery, посмотрите в консоле браузера, возможны ошибки или еще что-то.
vectorserver
05 октября 2022, 07:40
+1
Я использовал для наличия товара menuindex, или оставляй в TV как есть.
Все опции товара можно посмотреть через var_dump($product->toArray()) (скрин)


<?php
$parent = 8;
$debug = 1;

/* @var modX $modx*/
$array_ids = $modx->getChildIds($parent,6,array('context' => 'web'));

foreach ($array_ids as $doc_ID){
    /* @var msProduct $product */
    $product = $modx->getObject('msProduct',$doc_ID);
    if($product){
        //FILTERS
        //$dataOpt = $product->getOne('Data');
        //$optionKeys = $dataOpt->getOptionKeys();
        //var_dump($optionKeys);



        //tv price
        $tv_price = $product->getTVValue('price');

        //tv available
        $tv_available = $product->getTVValue('available');

        //msProduct price
        $product->set('price',$tv_price);

        //msProduct available to menuindex
        $product->set('menuindex',$tv_available);

        //Save
        $product->save();

        //debug
        if($debug) var_dump($product->toArray()); break;

    }

}
Димыч
05 октября 2022, 06:16
0
Техподдержка пока молчит. Буду признателен за любую помощь. PHP 8.4.

Запуск через ssh под пользователем запустил скрипт, завершилось с ошибкой.
============================
[14:38:36 / 1s / 6Mb] Запускаем парсинг GiftsRu
[14:42:48 / 253s / 7Mb] Скачали базу поставщика размером 75 Mb
PHP Fatal error: Uncaught Error: Call to a member function get() on null in /home/gamma/web/***/public_html/core/components/allgifts/processors/mgr/object/download.class.php:71
Stack trace:
#0 /home/gamma/web/***/public_html/core/model/modx/modprocessor.class.php(185): agObjectDownloadProcessor->process()
#1 /home/gamma/web/***/public_html/core/model/modx/modx.class.php(1770): modProcessor->run()
#2 /home/gamma/web/***/public_html/core/components/allgifts/handlers/tools/agtools.class.php(150): modX->runProcessor()
#3 /home/gamma/web/***/public_html/core/components/allgifts/cron/import/run.php(90): agTools->runProcessor()
#4 /home/gamma/web/***/public_html/core/components/allgifts/cron/import/run.php(32): agCronParser->process()
#5 /home/gamma/web/***/public_html/core/components/allgifts/cron/import/run.php(240): agCronParser->run()
#6 {main}
thrown in /home/gamma/web/***/public_html/core/components/allgifts/processors/mgr/object/download.class.php on line 71
Pavel
05 октября 2022, 01:29
0
Здравствуйте. Помогите, пожалуйста. Не могу понять в чем затык?

$modtelegram = $modx->getService('modtelegram');
$modtelegram->telegramSendMessage(array(
'chat_id' => '******',
'text' => 'Новый заказ',
));

Запускаю из консоли все работает.
Создал плагин с событием msOnCreateOrder
при новом заказе ничего не происходит
Maks
04 октября 2022, 22:53
0
Спасибо. Работает. Не подскажете еще как перенести из тв в опцию товара. К примеру создал опцию available в нее перенести из тв Наличие товара.
Константин Ильин
04 октября 2022, 22:37
+1
В этой строке указано имя ТВ — price, можете туда id поставить

$tv_price = $resource->getTVValue('price');
на ночь глядя ошибся
$query = $modx->newQuery('msProduct');
msProduct надо указывать везде
Maks
04 октября 2022, 22:22
0
//$resource->save(); эту строку я раскомментировал. результат тот же.
Maks
04 октября 2022, 22:18
0
Или что то недопонял, объясните пожалуйста.
Maks
04 октября 2022, 22:16
0
Так ваш код и взял его и использовал.