Карта ПВЗ на странице способов доставки Есть решение

Господа, только не спешите кидать грязными тряпками :)

Помогите, пожалуйста разобраться, как вывести произвольный HTML код (к примеру карту ПВЗ) в нужном месте на страницу /checkout/shipping из плагина доставки?

Следуя инструкциям, делаю два метода (оба в основном классе плагина):

1. Описываю HTML код контрола:

     public static function getMapControl($name, $params = array())
     {
        waHtmlControl::addNamespace($params, $name);
        $control = '<div id="my-control">';
        $control .= ........ ;
        $control .= '</div>';
        $control .= <<<JS
<script type='text/javascript'>
..........
</script>
JS;
        return $control;
     }

2. регистрирую и, вроде бы, добавляю во view:

public function execute()
    {
        $plugin_id='moipvz';
        $namespace = 'shipping_'.$plugin_id;

        $params=array();
        $params['id'] = $plugin_id;
        $params['namespace'] = $namespace;
        $params['title_wrapper'] = '%s';
        $params['description_wrapper'] = '<br><span class="hint">%s</span>';
        $params['control_wrapper'] = '<div class="name">%s</div><div class="value">%s %s</div>';
        $params['name'] = 'moipvzymap';
        $params['title'] = 'Какой-то тайтл';
        $params['description'] = 'Какое-то описание';
        
        $myCallback=array('moipvzShipping', 'getMapControl'); //Основной класс плагина: 'moipvzShipping'
        waHtmlControl::registerControl('Moipvzymap', $myCallback);
        wa()->getView()->assign('moipvzymap', waHtmlControl::getControl('Moipvzymap', 'moipvzymap', $params));       
    }   

в итоге ошибок нет, стоимость рассчитывается правильно, но и карты нигде нет, даже тегов, от врапперов нет в HTML коде страницы.

Пробовал принудительно вызывать execute() из функции calculate(), пробовал создавать для нее экшен в отдельных файлах:
/moipvz/lib/actions/moipvzFrontendShipping.action.php (class moipvzFrontendShippingAction extends waViewAction)

с экшенами перебрал 3 или 4 варианта именования и безрезультатно.

Может есть где чуть более развернутое описание такой задачи с чуть более полными примерами?

Заранее большое спасибо за помощь!

1 ответ

  • 1
    Роман 12 марта 2017 03:07 # Решение

    Кажется, нашел решение.

    нужно вызывать через customFields(waOrder $order) вместо execute().

    Во тут, еще в лохматом 2013 поднимался этот вопрос
    http://old.webasyst.ru/forum/viewtopic.php?id=2003...

    Тем не менее, если кто-то захочет поделиться более кошерным решением - милости прошу :)

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите