Артур Шевченко

Артур Шевченко

С нами с 24 мая 2019; Место в рейтинге пользователей: #3
Отправить деньги
01 февраля 2021, 22:35
0
Вы в консоли весь этот код запускаете? Достаточно вот этого
<?php
// Проходимся по всем товарам
$products = $modx->getIterator('msProduct', array('class_key' => 'msProduct'));
foreach ($products as $product) {
    // Получаем оригиналы их картинок
    $files = $product->getMany('Files', array('parent' => 0));
    foreach ($files as $file) {
        // Затем получаем их преью
        $children = $file->getMany('Children');
        foreach ($children as $child) {
            // Удаляем эти превью, вместе с файлами
            $child->remove();
        }
        // И генерируем новые
        $file->generateThumbnails();

        // Если это первый файл в галерее - обновляем ссылку на превью товара
        /** @var msProductData $data */
        if ($file->get('rank') == 0 && $data = $product->getOne('Data')) {
            $thumb = $file->getFirstThumbnail();
            $data->set('thumb', $thumb['url']);
            $data->save();
        }
    }
}
01 февраля 2021, 14:28
0
фото в корзину не добавляется, оно подтягивается из галереи ресурса, поэтому в корзине нужно в зависимости от выбранного цвета подтягивать нужное фото.
01 февраля 2021, 14:25
0
Опоздал на минутку)))
01 февраля 2021, 14:24
0
Я конечно не уверено, но эта фраза
Incorrect string value: '\xD2\xF0\xF3\xE1\xE0 ...'
как бы намекает на то что имеет место быть Некорректное строковое значение. И если посмотреть в запрос то там есть вот это
VALUES ('document', 'text/html', '����� ���������� 15*15*0,9 ��',
Первое что приходит на ум, это проблемы с кодировкой. какая кодировка у файла импорта?
31 января 2021, 14:21
0
Как вариант))) Мне просто с js легче работать.
31 января 2021, 12:06
0
Скиньте конечно. Попробуйте обновить админку.
31 января 2021, 08:37
0
Это вы типа модификации хотите сделать? Или что за другое изображение? А вообще самом простое это сделать TV типа migx с двумя колонками название цвета и путь к картинке, на фронте с помощью js менять картинку в зависимости от выбранного цвета.
31 января 2021, 00:45
0
первое, попробуйте удалить папку с кешем. второе, скажите что делали перед тем как это случилось?
30 января 2021, 12:28
0
А вы можете пошаговое решение написать или дать ссылку? Я бы почитал для саморазвития.
30 января 2021, 00:53
0
То есть если товар есть в корзине, нужно это показать и дать возможность изменить его количество, верно понимаю?
29 января 2021, 23:34
0
Ох, тяжело… Вы хотите чтобы на странице каталога, там где выводятся все товары из всех категорий и, возможно, есть фильтры, после нажатия на кнопку добавления в корзину, происходила проверка на наличие этого товара в корзине и если он там есть, то кнопка добавления должна скрываться и показываться поле для указания количества?
29 января 2021, 18:39
0
Спасибо всем участвующим. Будем считать вопрос решённым.
29 января 2021, 16:01
0
Ну суть та же, только я хотел обойтись без промежуточного массива. По факту
$resources = $modx->getIterator('msProduct', array('parent' => $resource->get('parent')));
Массив для пункта 1 можно вытащить только перебрав $resources. И да, с массивом работать удобнее, но п.3 это проблема. Давайте псевдокод напишу
$oldValue // старое значение позиции текущего ресурса
$newValue // новое значение
$resources // массив со всеми значениями [id => menuindex]
//По идее надо перебрать $resources предварительно сравнив $oldValue и $newValue
if($newValue < $oldValue){
foreach($resources as $r){
//надо прибавить  1 ко всем menuindex которые соответствуют  $newValue <= menuindex < $oldValue
}
else{
//надо отнять  1 ото всех menuindex которые соответствуют  $newValue > menuindex >= $oldValue
}
}
Но получается что если $newValue < $oldValue, то последнее значение не меняется.
29 января 2021, 11:00
0
И вообще TV на самая большая проблема в этой задаче, самая большая проблема это я, потому что я не понимаю что не так, в голове и на бумаге логика безупречна, а код работает не правильно.
29 января 2021, 10:58
0
Сорри, слово before не заметил)))
29 января 2021, 10:50
0
Сразу скажу, с PayAndSee не работал, но он тут и не причём, вам нужно к информации о пользователе добавлять id оплаченной конфигурации, после чего уже при выводе проверять какая конфигурация(и) оплачена(ы), те и показывать. Логика простая, вот реализация у неподготовленного человека может вызвать проблемы. В самом простом варианте для записи данных о купленных модификациях я бы повесил плагин на создание заказа или на смену статуса, саму запись делал бы в поле extended объекта modUser, ну и для вывоза написал бы сниппет, который бы проверял что куплено и в соответствии с этим показывал только доступные файлы. Я бы действовал так. Думаю это не лучшее из возможных решений, но точно одно из простых.
29 января 2021, 10:39
0
Почему вы считаете, что TV не сохраняется из плагина? У меня не далее как вчера сохранялась. И второй момент, почему вы считаете, что TV не нужно, ведь значение menuidex сохраняемого ресурса меняет не плагин, а пользователь, т.е. в плагин приходит уже новое значение.
28 января 2021, 17:36
0
Я переписал код, но он всё равно как-то не так работает
<?php
switch ($modx->event->name) {
    case 'OnDocFormSave':
        $oldValue = $resource->getTVValue('old_value');
        $newValue = $resource->get('menuindex');
        $resource->setTVValue('old_value', $newValue);
        $resource->save();
        $resources = $modx->getIterator('msProduct', array('parent' => $resource->get('parent')));
        
        if($newValue < $oldValue){
            foreach($resources as $res){
                $menuindex = $res->get('menuindex');
               
                if($menuindex >= $newValue && $menuindex < $oldValue && $res->get('id') != $id){
                    $res->set('menuindex', $menuindex + 1);
                    $res->set('old_value', $menuindex + 1);
                }
                
                $res->save();                
            }
        }
        else{
            foreach($resources as $res){
                $menuindex = $res->get('menuindex');
               
                if($menuindex > $newValue && $menuindex <= $oldValue && $res->get('id') != $id){
                    $res->set('menuindex', $menuindex - 1);
                    $res->set('old_value', $menuindex - 1);
                }
                
                $res->save();                
            }    
        }
    break;
}
28 января 2021, 16:11
1
0
Думаю стоить дополнить этот пост раз он есть в поиске. Во-первых на мой взгляд решение не самое лучшее, но достаточно простое, поэтому я его немного переделал для компактности
ПЛАГИН
<?php
switch ($modx->event->name) {
    case 'OnDocFormSave':
        $sql = 'SELECT article FROM modx_msop_modifications WHERE rid= ?';
        $statement = $modx->prepare($sql);
        if ( $statement->execute(array($id)) ) {
            $result = $statement->fetchAll(PDO::FETCH_COLUMN);
        }
        $resource->set('introtext', implode(',',$result));
        $resource->save();
    break;
}
КОД ДЛЯ КОСОЛИ, чтобы обновить товары
<?php
$resources = $modx->getIterator('msProduct');

foreach ($resources as $resource) {
    $id = $resource->get('id');
    $sql = 'SELECT article FROM modx_msop_modifications WHERE rid= ?';
    $statement = $modx->prepare($sql);
    if ( $statement->execute(array($id)) ) {
        $result = $statement->fetchAll(PDO::FETCH_COLUMN);
    }
    $resource->set('introtext', implode(',',$result));
    $resource->save();
}