Последние темы


Shopkeper3 не работает плагин

  • Здравствуйте!
    Не могу заставить работать этот плагин на shopkeeper 3.2.5.
    Создаю, вешаю на OnSHKgetProductPrice, а в ответ тишина. При включении плагина в корзине всегда 0 руб.
    Подскажите что нужно исправить? Спасибо.

    $rate = 63; //тут курс
    $output = 0;
    $price_tv_name = 'price'; //Имя TV цены
       $p_id = isset($purchaseArray['shk-id']) && is_numeric($purchaseArray['shk-id']) ? $purchaseArray['shk-id'] : 0;
       if($p_id){
           $price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
           $price_usd = $price_tv->renderOutput($p_id);
       $output = $price_usd*$rate;
       }
    $modx->event->_output = '';
    $modx->event->output($output);
    
    return '';
    
  • А если $purchaseArray['shk-id'] заменить на $purchaseArray['id'] ?

    Но лучше ID товара брать так:

    $p_id = $modx->getOption( 'id', $scriptProperties, 0 );
    
  • @Andchir Фантастика, оно работает в таком виде! Спасибо, очень выручили.

     <?php
    $output->name == "OnSHKgetProductPrice";
    $rate = 60; //тут курс
    $output = 0;
    $price_tv_name = 'price'; //Имя TV цены
    $p_id = $modx->getOption( 'id', $scriptProperties, 0 );
    if($p_id){
    $price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
    $price_usd = $price_tv->renderOutput($p_id);
    $output = $price_usd*$rate;
    }
    $modx->event->_output = '';
    $modx->event->output($output);
    return '';
    

    Кстати это решение для тех кто вносит цену товара в валюте и делает пересчет по курсу. Потому что плагин мультивалютности получается привязан к сессии и пересчет по курсу происходит не скоро, а укоротить сессию не вариант, слишком часто выкидывает из админки и быстро слетает товар в корзине. Во фронте не стал заморачиваться, сделал на phx. Единственное конечно не хватает мозгов доделать это:

     <?php
    $output->name == "OnSHKgetProductPrice";
    $rate = (Здесь присвоить значение из TV поля kurs ресурса с ID №41 например) ; //тут курс
    $output = 0;
    $price_tv_name = 'price'; //Имя TV цены
    

    Как можно забрать значение? Я так понимаю можно также:

    $price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
    

    Но как забрать из конкретного ресурса?

  • Пока получилось забирать только из системных настроек, но хотелось бы из TV

    <?php
    $output->name == "OnSHKgetProductPrice";
    $output = 0;
    $price_tv_name = 'price'; //Имя TV цены
    $p_id = $modx->getOption( 'id', $scriptProperties, 0 );
    if($p_id){
    $price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
    $price_usd = $price_tv->renderOutput($p_id);
    $rate = $modx->getOption('kurs', '', 1);//Параметр в настройках системы со значением курса
    $output = $price_usd*$rate;
    }
    $modx->event->_output = '';
    $modx->event->output($output);
    return '';
    

    Попробую прикрутить его к плагину CurrencyRate

  • Ну а вот мой кривенький, но рабочий плагин, родившийся наконец-то. Позволяет задавать цену товара в двух валютах (соответственно в карточке товара создаем 2 разных TV для цен, один из них заполняем. Если заполняется валютное поле, то пересчитает по курсу). Лишен инерционного эффекта плагина мультивалютности. Может кому пригодицца. Огромная благодарность @Andchir за помощь.

    <?php
    $output->name == "OnSHKgetProductPrice";
    $output = 0;
    $price_tv_name = 'price'; //Имя TV цены в долларах или евро
    $price_tv_namex = 'price2'; //Имя TV цены в рублях
    $p_id = $modx->getOption( 'id', $scriptProperties, 0 );
    if($p_id){
    $price_tv = $modx->getObject('modTemplateVar',array('name'=>$price_tv_name));
    $price_tvx = $modx->getObject('modTemplateVar',array('name'=>$price_tv_namex));
    $price_usdx = $price_tvx->renderOutput($p_id);
    $price_usd = $price_tv->renderOutput($p_id);
    $rate = $modx->getOption('kurs', '', 1);//Параметр в настройках системы со значением курса там где шестеренка справа сверху
    if($price_usd > 1){$output = $price_usd*$rate;}//Если заполнено поле Цена в евро то кидает в корзину по курсу
    else {
    $output = $price_usdx;//Если поле TV евро не заполнено то возьмет и выведет цену из TV цены в рублях
    }
    }
    
    $modx->event->_output = '';
    $modx->event->output($output);
    return '';
    

    Во фронте вывод реализуйте как хотите, я использовал PHX модификаторы modx

 

Последние комментарии

  • Что нового в Shopkeeper 4.0.3:

    Исправлено некорректное определение языка по умолчанию В настройках в админке скрываются пароли. Добавлена возможность загружать картинки для категорий. shopkeeper.js - добавлена функция updateProductsPrice() для поддержки текстовых полей для цены. Twig-функции contentList() и includeContent() вынесены в отдельный класс. Добавлено событие "order.before_create". Сортировка всех полей типа контента перетаскиванием. Автоматическое сохранение сортировки полей при сохранении типа контента (не нужно нажимать на отдельную кнопку). В интерфейсе админа добавлено поле поиска для списка Composer-пакетов.

    Скачать можно на главной странице https://modx-shopkeeper.ru/

    Читать далее
  • Вот этот плагин:
    0_1550334109280_screenshot_022.png

    Вроде по умолчанию он выключен. Надо включить. Но плагин работает только на редактирование товаров, при удалении он делалать ничего не будет. Только что проверил кнопку, всё работает корректно, фильтры удаляются и добавляются, когда нужно. Но нужно очищать корзину после удаления товаров (возможно баг).

    Читать далее
  • J

    @Andchir Если нажимаю кнопочку "Обновить значения", то в фильтрах появляются как раз те самые удаленные значения фильтра.. Потом приходится Ручками выбирать эти удаленные значения.
    вот так выглядит Управление фильтрами когда удаляешь ручками: https://yadi.sk/i/_zw64CGkZ_sAYg
    А вот так выглядит когда просто нажимаешь "Обновить значения": https://yadi.sk/i/7WFbXC6xV5sQAw (красным выделено, то что приходится постоянно удалять

    Читать далее
  • J

    Участник @Jokerit написал в TagManager2 отображает в фильтре удаленные значения TV-полей:

    tmRefresh

    Так и не смог найти как включить

    Читать далее