• 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;
    }

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

    У Вас из-за оформления селекта показывает не то, что нужно. Стоит скрипт, который скрывает сам селект (ставит ему прозрачность), а поверх накладывает SPAN, где прописан первый пункт:
    alt text
    Тут уж или оформление делать иначе, или копаться в скрипте-украшателе.

    написал в Общие вопросы Читать далее
  • R
    rpa

    Fancybox лень ставить - с Сolorbox (практически то же самое) все прекрасно работает: http://rpa-design.ru/t.html

    написал в Общие вопросы Читать далее
  • R
    rpa

    Да нет, скрипт как раз работает:
    alt text
    Вот тестик: http://rpa-design.ru/t.html
    Добавил там одну строчку:

    <script>
    $(document).ready(function(){ 
       $(".pro_val_one").change(function(){
           var num = $(this).val();
           $("#field").val(num);
           $(".color").html(num);
           $("#numb option").each(function(){
                if($(this).val() == num) {
                    $("#numb option").removeAttr("selected");
                    $(this).attr("selected", "selected");
                }
            });
       });
    });
    </script>
    

    написал в Общие вопросы Читать далее
  • R
    rpa

    А для чего Вам в окне еще раз повторять то, что человек уже сделал? Он же уже выбрал расцветку — просто выведите эту информацию тут не селектом, а span-ом, как я описал ранее:
    alt text

    Но если так уж нужно в окне выбирать, то попробуйте сделать так:

    <script>
    $(document).ready(function(){ 
       $(".pro_val_one").change(function(){
           var num = $(this).val();
           $("#field").val(num);
           $(".color").html(num);
           $("#numb option").each(function(){
                if($(this).val() == num) {
                    $(this).attr("selected", "selected");
                    
                }
            });
       });
    });
    </script>```

    написал в Общие вопросы Читать далее
  • R
    rpa

    Сорри, в скрипте ошибся:

    <script>
    $(document).ready(function(){ 
       $(".pro_val_one").change(function(){
           $("#field").val($(this).val());
           $(".color").html($(this).val());
       });
    });
    </script>
    

    написал в Общие вопросы Читать далее
  • R
    rpa

    Сейчас то, что выбрано из радиокнопок прописывается в поле field именно модального окна (форма заявки у Вас там).
    И оно работает: alt text
    Если нужно просто вывести, то сделайте в форме блок:

    <p>Расцветка: <span class="color">1</span></p>
    

    И измените скрипт:

    <script>
    $(document).ready(function(){ 
       $(".pro_val_one").change(function(){
           $("#field, .color").val($(this).val());
       });
    });
    </script>
    

    Кстати, поскольку у Вас по умолчанию стоит выбранный первый пункт, в форме у поля пропишите сразу так:

    <input type="hidden" name="field" value="1" id="field"/>
    

    Если человек ничего не выберет, то везде будет стоять 1 (она уже выбрана).

    написал в Общие вопросы Читать далее
  • R
    rpa

    Не надо ничего никуда собирать и передавать.
    У Вас на странице самого товара уже будет форма заявки. То есть вот эту форму просто вставьте на страницу товара в любом месте в блок с ID="form" и скройте все этим самым display:none:

     <div style="display:none">
         <div id="form">
             <form>
                Тут код Вашей формы заявки
             </form>
         </div>
     </div>
    

    Метод Fancybox inline и подразумевает то, что в модальное окно выводится контент, который находится на этой же странице ). Он найдет блок с id="form" (ведь он прописан в href у ссылки) и откроет его содержимое в модальном окне - то есть Вашу форму заявки.

    А то, что передавалось у Вас GET-запросом на отдельную страницу (которая открывалась в модальном окне), уже не нужно — форма заявки-то теперь находится на самой странице товара и можно все прописать напрямую:

    <input type="hidden" name="mod" value="[[*pagetitle]]"/>
    <input type="hidden" name="mod2" value="[[*id]]"/>
    <input type="hidden" name="field" value="" id="field"/>
    ..............................
    

    И Вам нужно только вытащить какую радиокнопку нажал посетитель, а это делает JS-скрипт. Результат своей работы он вписывает в третье скрытое поле Вашей формы — field. Соответственно, в шаблоне письма так и прописывайте:

    Вариант расцветки: [[+field]]
    

    написал в Общие вопросы Читать далее
  • R
    rpa

    Вместо многоточия — код Вашей формы заявки. Отдельной страницы не нужно — все на странице товара.
    display:none — скрытие блока с этой формой. Она откроется по клику на ссылке с классом various или какой назначите (см. документацию fancybox).

    Скрытые поля mod и mod2 — это Ваши поля в форме, которые автоматом заполняются заголовком страницы и ее ID (у Вас сейчас они передаются в GET-запросе на отдельную страницу с формой). А поле field заполняется как раз при выборе той или иной радиокнопки.
    За это отвечает скрипт, который при изменении элемента с классом pro_val_on (это и есть Ваши радиокнопки) берёт его значение и прописывает в поле field отправляемой формы заявки.

    написал в Общие вопросы Читать далее
  • R
    rpa

    В Вашем случае удобнее инлайн.

    <a href="#form" class="various" ><button class='button silver large ' 
     >Заказать</button></a>
     
     <div style="display:none">
         <div id="form">
             <form>
                  <input type="hidden" name="mod" value="[[*pagetitle]]"/>
                  <input type="hidden" name="mod2" value="[[*id]]"/>
                  <input type="hidden" name="field" value="" id="field"/>
                  ..............................
             </form>
         </div>
     </div>
    

    ну и скрипт:

    <script>
    $(document).ready(function(){ 
       $(".pro_val_one").change(function(){
           $("#field").val($(this).val());
       });
    });
    </script>
    

    написал в Общие вопросы Читать далее
  • R
    rpa

    @ufabooks То есть у Вас в action формы прописан адрес целевой страницы, на которую нужно передать значения?
    Тогда там просто сниппетом вытащите:

    return $_REQUEST['fieldname'];
    

    Или у Вас сама форма открывается в модальном окне по ссылке? Тогда прямо у ссылки укажите параметр:

    <a href="[[~123? &fieldname=`***`]]">...</a>
    

    А на странице с формой выводите снова через тот же сниппет, или, если стоит pdoTools, то тегом:

    [[!#REQUEST.fieldname]]
    

    написал в Общие вопросы Читать далее