Константин Ильин

Константин Ильин

С нами с 10 февраля 2014; Место в рейтинге пользователей: #151
Константин Ильин
10 октября 2022, 10:27
0
<?
if($filter) {
        $modx->log(1,print_r($filter,1));
	$where = $modx->toJSON(array($filter));
} 
....
Результат смотрите в журнале ошибок модх
Константин Ильин
06 октября 2022, 15:13
+1
Я немного не по теме(возможно с этим и связанна текущая проблема), но когда то давно вам писали в ТП(не я), ваш компонент вроде как не работает с mysql 8, из-за поля rank.
Название rank в mysql 8 зарезервированное и выдает ошибку при запросах.
Возможно вы это исправили, но в chagelog не видел запись об этом.
Константин Ильин
06 октября 2022, 14:47
0
Нет
Отправляете например на request.php запрос, в нем проводите проверки необходимые и возвращаете уже обработанный чанк.

<?
return $modx->getChunk('chunkname', []);

или
$resp['out'] = $modx->getChunk('chunkname', []);
echo json_encode($resp);return;

Все зависит от того какой тип обращения AJAX, но саму обработку чанка вам выше подсказали
$modx->getChunk('chunkname', array());
// Это просто доп код
$pdo = $modx->getService('pdoTools');
$resp['out'] = $pdo->parseChunk('chunk',[
                'hashp' => $_POST['hashp'],
                'data' => $arr,
            ]);
echo json_encode($resp);return;
Константин Ильин
05 октября 2022, 23:41
0
печаль беда
Константин Ильин
05 октября 2022, 23:00
0
print_r() или var_dump()
Константин Ильин
05 октября 2022, 22:38
0
Я уже писал, что надо смотреть, что выдает и преобразовывать в массивы ЕСЛИ НАДО! Вы ничего не хотите понимать, искать, видимо. Просто пишет не работает, не работает. Я уже ничем таким людям не помогу
Константин Ильин
05 октября 2022, 22:09
0
не знаю тогда, проверяйте, что дает getvalue
Константин Ильин
05 октября 2022, 21:55
0
может быть, пробуйте, поставьте больше

$query->limit(0); тут поставьте 50 проверьте сначала работает ли код
Константин Ильин
05 октября 2022, 21:08
0
ну тогда надо писать поэтапное обновление, аяксом или сессионно, по 30-50 товаров за проход.
Константин Ильин
05 октября 2022, 20:44
0
мда…

<?php
$query = $modx->newQuery('msProduct');
$query->select(['msProduct.*']);
$query->where(['class_key' => 'msProduct']);
$query->limit(0);
$resources = $modx->getIterator('msProduct',$query);
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-available'] = $resource->getTVValue(30);
    
        // Это процессор обновления товара
        $response = $modx->runProcessor('resource/update', $productArray);
}
Константин Ильин
05 октября 2022, 19:44
+1
Примеры я давал, нужно для «Список с автодополнением» передавать массив, а не просто значение
<?
$productArray['tags'] =  ['большие' , 'маленькие'];
$productArray['options-cvet'] = ['белый' , 'кофе', 'серый'];
$productArray['options-napryzhenie'] = ['220' , '320'];
«У вас же заданы конкретные значения для опций, мне же надо эти самые опции вытаянуть из дополнительных полей.»

Ничего трудного же нет в этом, вот чуть просто подумать надо
$productArray['options-available'] = $resource->getTVValue(30);
Просто ведь? да?

Если у вас TV с множеством значений, то его сначала надо разобрать и преобразовать в массив, чтобы условно получилось ['белый', 'кофе', 'серый'] и потом уже присвоить нужной вам опции. Т.е. надо посмотреть что выдает $resource->getTVValue('id или название ТВ') и преобразовать в нужные данные.
Константин Ильин
05 октября 2022, 12:28
0
Ну это уже совсем. Программированию вас никто учить не будет. Включите голову, как присваиваются переменные. Вам уже все дали, как получить из ТВ, засунуть ее в переменную, как обновлять товар и его опции, осталось чуть подумать собрать все вместе, удалить ненужное.
Константин Ильин
05 октября 2022, 11:59
0
Так я вам и дал код который туда вставить, в цикл, внимательно смотрите.
Константин Ильин
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);
}
Константин Ильин
04 октября 2022, 22:37
+1
В этой строке указано имя ТВ — price, можете туда id поставить

$tv_price = $resource->getTVValue('price');
на ночь глядя ошибся
$query = $modx->newQuery('msProduct');
msProduct надо указывать везде
Константин Ильин
04 октября 2022, 22:12
0
Вам дали готовый код, Вы код смотрите вообще?
я специально закомментировал строчку кода.
Константин Ильин
04 октября 2022, 21:53
0
ну надо сначала получить все товары, и в цикле обработать

$query = $modx->newQuery('modResource');
$query->select(['msProduct.*']);
$query->where(['class_key' => 'msProduct']);
$query->limit(0);
$resources = $modx->getIterator('modResource',$query);
foreach ($resources as $resource) {
      $tv_price = $resource->getTVValue('price');
        $resource->set('price',$tv_price);
        //$resource->save();
}
Константин Ильин
04 октября 2022, 21:29
0
$prod_ID указали верный?
Константин Ильин
09 сентября 2022, 22:15
1
+1
Попробуй так
{if !($key | in : $array)} ... {/if}
Константин Ильин
19 августа 2022, 08:43
0
ну если вам так «удобнее» чем разобраться в проблеме.
Вы просто ни скринов ни исходников ничего не приложили, трудно так помогать.
Как минимум посмотреть код обычной страницы если он в строчку то плагин для удаления переносов в коде включен.