Сохранить
Сохраняем
  • R
    rpa

    Напишите сниппет, используя SHKorder.
    ID последнего заказа доступен в сессии или через плейсхолдер [[+shk.id]]

    написал в Поддержка Читать далее
  • R
    rpa

    Проверьте атрибут data-shopcart в шаблонах корзин.
    Значения должны быть разными и соответствовать порядковому номеру набора параметров в системной настройке shk3.property_sets

    написал в Поддержка Читать далее
  • R
    rpa

    Добрый день.
    Странное поведение параметра &groupBy.
    Если добавить значение (например, как в документации - parent), то в корзине товары не выводятся вовсе (shopCartRow.tpl).
    Если добавить parent в параметр savePurchasesFields, то выводится только один товар и в плейсхолдер name подставляется ID родителя.
    Проверялось на MODX 2.5.5, SHK 3.2.6 / 3.2.7
    Ошибок ни в логе ни в консоли нет.

    Как бы побороть данный момент?

    написал в Поддержка Читать далее
  • R
    rpa

    Вот тут недавно обсуждали (в самом конце).

    написал в Поддержка Читать далее
  • R
    rpa

    Сделайте сниппет:

    $order = $_SESSION['shk_order'];
    if(empty($order)) return;
    $weight = 0;
    foreach($order as $prod){
        $id = $prod['id'];
        $res = $modx->getObject('modResource', $id);
        $wei = $res->getTVValue('weight'); //вместо weight укажите имя TV с весом
        $t_wei = $wei * $prod['count'];
        $weight += $t_wei;
    }
    $modx->setPlaceholder('total_weight', $weight);
    

    Вызывайте его где-нибудь в шапке сайта некешированным.
    В шаблонах и чанках выводите общий вес так:

    [[+total_weight]]
    

    написал в Поддержка Читать далее
  • R
    rpa

    @ImHappy
    Если так, то можно вообще малой кровью обойтись (хоть и криво)).
    Сделать у товаров TV-шки с которыми будет работать catalogFill.
    И сделать сниппет, который будет брать эти значения и писать в свойства товара miniShop:

    //Получаем ID товаров miniShop
    $ids = $modx->runSnuppet('pdoResources', array(
        'parents' => 0, //ID каталога
        'where'=> '{"class_key":"msProduct"}',
        'limit'=>0,
        'returnIds'=>1
    ));
    
    $arr = explode(',', $ids);
    foreach($arr as $id){
        $product = $modx->getObject('msProduct', $id);
        $tv_price = $product->getTVValue('price'); //Цена из TV
        $ms_price = $product->get('price'); //Цена минишоп
        if($ms_price != $tv_price){ //если разные, то пишем TV в цену товара
            $product->set('price', $tv_price);
            $product->save();
        }
    }
    //чистим кеш
    $cm = $modx->getCacheManager();
    $cm->refresh();
    

    Можно, в принципе, любые данные добавить. Для опций вот.
    И запускать этот сниппет после импорта или по расписанию.

    написал в Поддержка Читать далее
  • R
    rpa

    @ImHappy С самими товарам и их TV работать не проблема — просто добавляете в значения по умолчанию:

    'class_key' => 'msProduct',
    'show_in_tree' => 0,
    

    А вот для работы со специфическими полями товара нужно уже использовать функции фильтрации при импорте и экспорте (примеры есть в файлах конфигурации). Теоретически можно, наверное, подключить класс miniShop и забивать данные куда нужно.

    написал в Поддержка Читать далее
  • R
    rpa

    Что касается catalogFill и MIGX, то можно добавить пользовательские функции (на импорт и на экспорт), которые будут принимать понятный клиенту формат данных и преобразовывать его в JSON, которым оперирует MIGX (и обратно).
    К примеру, имеем галерею товара (TV с ID=37). В таблице MIGX есть поля image и title.
    В поле Excel-файла можно указывать так:

    /images/catalog/image1.jpg||Заголовок1,/images/catalog/image2.jpg||Заголовок2

    и т. д.
    Функция для импорта тогда будет примерно такая:

    //функция для фильтрации значений при ИМПОРТЕ
    function filter_import($value_arr){
    $output_arr = $value_arr;
     if(!function_exists("clrMIGX")) {
         function clrMIGX($inp){
            $arr = explode(',', $inp);
    	    $count = 1;
    	    foreach($arr as $item){
                    $a_item = explode('||', $item);
                    $image = $a_item[0];
                    $image = str_replace('/', '\/', $image);
                    $title = $a_item[1];
                    $out .= '{"MIGX_id":"'.$count.'","image":"'.$image.'","title":"'.$title.'"},';
                    $count++;
                }
            $out = str_replace("\n", "", $out);
            return '['.mb_substr($out, 0, -1).']';
        }
     }
    //применяем функцию к TV с ID=37:
    if(isset($output_arr['tv']['37'])) $output_arr['tv']['37'] = clrMIGX($output_arr['tv']['37']);	
    return $output_arr;
    }
    

    Для экспорта можно сделать типа этого:

    //функция для фильтрации значений при ЭКСПОРТЕ
    function filter_export($value_arr,$doc_id=0){
    $output_arr = $value_arr;    
    if(!function_exists("clearMIGX")) {
    function clearMIGX($input){
        $items = json_decode($input, true);
            foreach($items as $item){
    	$image = $item['image'];
    	$title = $item['title'];
    	$out .= $image.'||'.$title.',';
            }
        return mb_substr($out, 0, -1);
    }
    }
    //применяем функцию к TV с ID=37:
    if(isset($output_arr[37])) $output_arr[37] = clearMIGX($output_arr[37]);    
    return $output_arr;
    }

    написал в Поддержка Читать далее