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


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

 

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

  • @Yiliy

    то есть без имени

    Видимо потому что у вас отключено, а в XML алиаса я не увидел

    //автоматически генерировать псевдоним (alias) при импорте //false - выключено; true - генерировать с переводом в транслит; 'notranslit' - генерировать без перевода в транслит. $cf_config['imp_autoalias'] = false;

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

    Проблема была оказывается в том, что оно не видело
    <Title>pagetitle</Title>
    Я поменял на
    <Title><item>pagetitle</item></Title>
    и все импортировалось успешно но теперь в каталогах вместо url ресурсов отображается /сайт/каталог/.html
    то есть без имени и после перехода на страницу товара появляется ошибка 403

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

    Поменялся дизайн.
    Новая корзина, всплывающие окна и прочие фишки сверстаны. Нужно переподключить, разобраться с возможным конфликтом JS.
    Что, где и как лежит -- покажу.

    Скайп mas_hate

    Читать далее
  • В $cf_config['imp_xml_structure'] должен быть XML, который в файле повторяется. Также нужно настроить
    параметр $cf_config['imp_xml_itemsparent_path']. Покажите полный файл, который импортируете.

    Читать далее