Пользовательское поле VirtueMart 2.6.6 (переменная корзины) не отображается в деталях заказа

Я запрограммировал плагин настраиваемого поля для Virtuemart 2.6.6, который показывает некоторые параметры на странице продукта, например «размер», и этот параметр также является переменной корзины.

Огромную помощь оказала эта статья:

https://www.spiralscripts.co.uk/Joomla-Tips/custom-plugin-fields-in-virtuemart-2-2.html

И, конечно же, форум stackoverflow и заводские пользовательские плагины для виртуальных машин по умолчанию.

Все работает (размер отображается в подробностях о товаре и в корзине при добавлении товара в нее), но одно но:

  • после отправки заказа параметр не отображался в деталях заказа, поэтому я не знаю, какой размер был куплен.

Я поместил в свой плагин следующие функции, но не решил свою проблему:

function plgVmOnViewCart($product, $row, &$html) 
{
    if (empty($product->productCustom->custom_element) or $product->productCustom->custom_element != $this->_name) return '';
if (!$plgParam = $this->GetPluginInCart($product)) return false ;
    $html  .= '<div class="parameterek_attributes">';

    foreach ($plgParam as $attributes) {
        foreach ($attributes as $k => $attribute) {
            if ($k =='child_id') continue;
    if ($k == 'custom_param_default3') $name = 'Veľkosť'; else $name = '';
            $html .='<span class="parameterek_attribute"> '.$name.': '.JText::_($attribute).' </span>';
        }
    }       

    $html.='</div>';
return true;
}

/**
 *
 * shopper order display BackEnd
 */
function plgVmDisplayInOrderBE($item, $row,&$html) 
{
    if (empty($item->productCustom->custom_element) or $item->productCustom->custom_element != $this->_name) return '';
    if(!empty($productCustom)){
        $item->productCustom = $productCustom;
    }

$this->plgVmOnViewCart($item, $row,$html);
}

/**
 *
 * shopper order display FrontEnd
 */
function plgVmDisplayInOrderFE($item, $row,&$html) 
{
    if (empty($item->productCustom->custom_element) or $item->productCustom->custom_element != $this->_name) return '';
$this->plgVmOnViewCart($item, $row,$html);
}

В таблицу базы данных под названием #__virtuemart_order_items были сохранены значения: что-то вроде:

{"357":"5"}

но должно быть что-то вроде:

{"357":"размер M"}

Я вижу, что ключевой функцией является GetPluginInCart($product), и когда я распечатал параметр $product->в этой функции, я получил этот вывод, когда я прохожу процесс оформления заказа:

Array
(
[0] => Array
    (
        [parameterek] => Array
            (
                [custom_param_default3] => L
            )

    )

)

но после того, как я закончу заказ и перейду к деталям заказа, $product->param имеет это значение:

Array
(
[357] => 5
)
  • Поэтому я думаю, прежде чем я закончу заказ, я должен как-то обработать выбранный параметр продукта и преобразовать его в правильный вид, но я не знаю, как это сделать.

На следующем сайте https://dev.virtuemart.net/projects/virtuemart/wiki/Product_Plugins

Я нашел функцию:

plgVmOnViewCartOrder($product, $param,$productCustom, $row) 
handel $param before adding it in the order  

return $param;

но когда я искал строку "plgVmOnViewCartOrder" во всей установке Virtuemart, он не был найден, значит, он не запущен (?)

Если бы кто-нибудь мог помочь мне или отправить честную документацию, было бы очень хорошо. Спасибо!


person Gregory    schedule 30.07.2014    source источник


Ответы (1)


Думаю, я решил свою проблему, что было:

в функции plgVmOnDisplayProductVariantFE я ошибся, я не использовал рендерер макета, который генерирует объект $viewData с переменной virtuemart_customfield_id.

Затем в макете вашего плагина имя поля ввода должно быть следующим:

<input 
  class="parameterekInput" 
  type="radio" 
  id="plugin_param['.$viewData[0]->virtuemart_customfield_id.']['.$this->_name.']['.$c.']" 
  name="customPlugin['.$viewData[0]->virtuemart_customfield_id.']['.$this->_name.'][custom_param_default3]" 
  value="'.$size.'" />

поэтому атрибут имени всегда должен быть:

  • customPlugin['.$viewData[0]->virtuemart_customfield_id.']['.$this->_name.'][независимо]

Правильное использование функции plgVmOnDisplayProductVariantFE заключается в использовании выражения:

  • $group->display .= $this->renderByLayout('default',массив($field,&$idx,&$group )

Здесь вся функция с правильным выражением:

function plgVmOnDisplayProductVariantFE ($field, &$idx, &$group) {
    if ($field->custom_element != $this->_name) return '';

    $this->getCustomParams($field);

        $this->getPluginCustomData($field, $field->virtuemart_product_id);

        $group->display .= $this->renderByLayout('default',array($field,&$idx,&$group ) );

    return true;
  }

Теперь, когда я print_r -ing $product->param в функции GetPluginInCart($product), я получаю следующее:

Array
(
[273] => Array  //previously the key was Zero, now it is 273, value of virtuemart_customfield_id
    (
        [parameterek] => Array
            (
                [custom_param_default3] => L
            )

    )

)

...и теперь я рад, что могу двигаться дальше в своем проекте :)

person Gregory    schedule 31.07.2014