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


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

 

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

  • Если на Formit повесить хук на отправку данных (в конце списка хуков) в платежную систему и в этом хуке (сниппете) пытаться читать значения shk.id, shk.price, то они содержат значения предыдущего заказа.

    Всё в соответствии с документацией, так и задумано.

    Тоже самое, если вызывать отправку данных через плагин и событие OnSHKSaveOrder.

    А зачем в плагине читать значение плейсхолдера, если там есть переменная $order_id?

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

    Добрый день, коллеги.
    Использую MODx Rev 2.7.1, Shopkeeper 3.2.7.
    Вопрос следующий. Страница оформления заказа, вызываю FormIt, затем [[!$shopOrderFormCart]]. В форме заполняются все необходимые поля, для того чтобы передать в платежную систему. Если на Formit повесить хук на отправку данных (в конце списка хуков) в платежную систему и в этом хуке (сниппете) пытаться читать значения shk.id, shk.price, то они содержат значения предыдущего заказа. Тоже самое, если вызывать отправку данных через плагин и событие OnSHKSaveOrder. Пробовал из скрипта обновлять страницу, не помогает. Актуальная информация появляется в плейсхолдерах только если перенаправлять из страницы оформления заказа на другую html страницу и там читать эти плейсхолдеры. Как получить актуальные значения без пересылки на дополнительную страницу?
    Спасибо.

    Читать далее
  • Читать далее
  • А где скачать это чудо компонент?

    Читать далее