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



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

Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.