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


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

 

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

  • Z

    Спасибо, действительно проще создать отдельно.

    Читать далее
  • Но проблема в том, что эта старая цена "дублируется" в плесхолдер "Дополнительных услуг" - [[+addit_data]].

    Можно не использовать [[+addit_data]], а выводить параметры по-отдельности.

    Цитата из документации:

    [[+shk_любой доп.параметр]] - любой доп. параметр, выбранный при добавлении товара в корзину (из [[+addit_data]]), например [[+shk_param1]].
    Если параметры сделаны в виде чекбоксов, то чтобы вывести отдельно каждый из них, нужно добавлять индекс (номер от нуля) для параметров следующих за первым.
    Пример: [[+shk_param1]], [[+shk_param1_1]], [[+shk_param1_2]] ...
    [[+shk_любой доп.параметр_price]] - цена доп.параметра. Пример: [[+shk_param1_price]].

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

    Доброго времени суток. Не могу разобраться, как передать данные migx-поля в корзину в плейсхолдер без "дублирования" в [[+addit_data]]
    Суть в чем: У меня есть 2 цены у товара (со скидкой и без скидки) Форма для отправки в корзину:

    <form action="[[~[[*resource_id]]? &scheme=`abs`]][[*alias]].html" method="post"> <input type="hidden" name="shk-id" value="[[*id]]" /> <input type="hidden" name="shk-name" value="[[*pagetitle]]" /> <input type="hidden" name="price_old__[[*id]]__add" value="[[*price_old]]" /> <input type="hidden" name="shk-count" value="1" /> <div class="product-price"> Цена: <span class="shk-price">[[!*price:shk_curr_rate:num_format]]</span> Старая цена - <span class="shk-price-old">[[+price_old]]</span> [[!+shk_currency]] </div> <div class="padding-lr-30"> <h5>Дополнительные услуги</h5> [[*param1]] </div> <div class="product-price"> <button class="btn btn-lg btn-primary" type="submit" class="shk-but">В корзину</button> </div> </form>

    Данные со "старой ценой" в корзину попадают нормально и выводится в нужном месте в плейсхолдере:
    [[+shk_price_old]]
    Но проблема в том, что эта старая цена "дублируется" в плесхолдер "Дополнительных услуг" - [[+addit_data]]. Как сделать чтобы старая цена не выводилась в [[+addit_data]]? Или может я как то не правильно передаю MIGX-параметр в корзину ? Заранее спасибо.

    Читать далее
  • Фотографии, как я понял, это второй вопрос. Я по нему пока ничего не отвечал и не просил информации. Это не отменяет того, что в вашем конфиге есть ошибка, о которой я писал выше. Не нужно задавать разные вопросы в одной теме, чтобы не было путаницы.
    http://forum.modx-shopkeeper.ru/topic/15/рекомендации-по-оформлению-темы-с-вопросом

    Читать далее