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


shopkeeper3 - интреесная проблема с плагином на OnSHKgetProductPrice

  • shopkeeper3
    modx 2.7.1-pl

    Плагин выдает цену 0, как только добавляю строку (ровно до этой строки, работает правильно):

    $pricing_json = $doc->getTVValue('pricing');

    в данном поле содержится JSON строка (поле MIGX) - саму строку получает без ошибок (пробовал выводить в лог) и цена в $output тоже высчитывается, но в корзине получаю 0 (хотя должен получить $output).

    Возможно работа плагина как-то ограниченна по времени?

    В логах все чисто (debug shopkeepr`a - включал)

    Куда копать?

    $e = &$modx->Event;
    $output = "";
    
    if ($e->name == 'OnSHKgetProductPrice') {
    
        if (isset($price)) {
    
            $doc = $modx->getObject('modResource', 2);
            $pricing_json = $doc->getTVValue('pricing');    
            
            $discount = 5; 
            $output = round($price * (1-$discount/100), 2);
        }
    
        $e->output($output);
    }
    
    
  • @KVAnton
    Пока сделал получение TV так, вроде работает:

        $tvr = $modx->getObject(
            'modTemplateVarResource', array(
            'tmplvarid' => 32,
            'contentid' => 2
            )
        );
    

    по времени занимает 0,00047898292541504

    Но все равно интересно почему не работало изначально и с чем это связанно (хотелось бы знать о что споткнулся, и в чем дело - для будущих решений)
    Может даже кинуть ссылку на фрагмент кода в исходниках, если это что-то задуманное изначально (самому ни чего интересного не удалось найти)

  • В первом варианте вы получаете значение TV в переменной $pricing_json но потом никак это значение не используете. Но скидка 5% должна считаться. Проверьте, может ещё какой-то плагин есть на этом же событии.

  • @Andchir ну это стерильный пример, я пробовал выводить эти значения в лог. плагин отрабатывает корректно, в т.ч. высчитывает цену - но такое чувство, что его ответ просто игнорируется, а если поместить $pricing_json = $doc->getTVValue('pricing'); еще до проверки имени события, то и $e->name уже не содержит OnSHKgetProductPrice а там событие об обновлении какого-то TV (проверил, OnTVOutputRenderList). вот этот фрагмент:

    $e = &$modx->Event;
    $output = "";
    
    $doc = $modx->getObject('modResource', 2);
    $pricing_json = $doc->getTVValue('pricing');
    $modx->log(1, print_r($e->name, true));
    
    if ($e->name == 'OnSHKgetProductPrice') {
    
    

    Именно на это событие не должно быть других плагинов - сам я больше не создавал и не устанавливал ни каких доп.пакетов для SHK, кроме платежки platron (у которой нет плагинов)

  • $e = &$modx->Event;
    

    Не помню такую конструкцию. Лучше значение в плагине возвращать так:

    $modx->event->output($output);
    

    и в конце кода на всякий случай так:

    return '';
    

    То, что пишите в return 'Тут какое-то сообщение'; будет в логе ошибок (для отладки и т.п.).

    https://docs.modx.com/revolution/2.x/developing-in-modx/basic-development/plugins

 

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

  • K

    Участник @Andchir написал в Название товара в теме письма:

    $_SESSION['shk_order']

    да, спасибо - все получилось

    Читать далее
  • Можете написать сниппет, который будет выводить название товара, и использовать его в параметре сниппета FormIt так же как сейчас используется плейсхолдер [[++site_name]].
    Товары находятся в сессии $_SESSION['shk_order'].

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

    Shopkeeper3

    Можно ли как-то в теме письма (которое приходит администратору) указать Fullname и Название купленного продукта?
    Т.е. вместо этого: В интернет-магазине "[[++site_name]]" сделан новый заказ
    Получить, например: Иванов Иван купил Чайник

    На сайте нет корзины (которая отображается пользователю) и пользователь может купить только один товар за один заказ.

    Моя фантазия пока не может придумать, как это сделать (может какой-то плагин написать?)..

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

    @Andchir все работает!
    Спасибо!

    Читать далее