VirtueMart 2.6.6自定义字段(购物车变量)未显示在订单详细信息中

时间:2014-07-30 21:23:37

标签: joomla2.5 custom-fields virtuemart

我为Virtuemart 2.6.6编写了一个自定义字段插件,它在产品页面上显示了一些参数,例如" size",该参数也是一个cart变量。

这篇文章给了我很大的帮助:

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

当然还有stackoverflow论坛和出厂默认的VM自定义插件。

一切正常(大小显示在产品详细信息视图中,并在购物车中,当您向其添加产品时)但有一件事:

  • 发送订单后,参数未显示在订单详情中,因此我不知道购买的产品尺寸。

我将以下功能放入我的插件中,但没有解决我的问题:

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的数据库表中保存了值:类似于:

{&#34; 357&#34;:&#34; 5&#34;}

但它应该是这样的:

{&#34; 357&#34;:&#34;尺寸M&#34;}

我看到关键功能是 GetPluginInCart($ product),当我在该功能中打印出$ product-&gt; param时,我有了这个输出,当我走的时候通过结帐流程:

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

    )

)

但在我完成订单并进入订单详细信息后,$ product-&gt; 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;

但是当我搜索字符串&#34; plgVmOnViewCartOrder&#34;在整个virtmart安装中,没有找到,所以这意味着它没有启动(?)

如果有人可以帮助我或发送公平的文件会非常好。谢谢!

1 个答案:

答案 0 :(得分:0)

我想,我解决了我的问题,原因是:

在函数 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.'" />

所以name属性应始终为:

  • customPlugin [&#39; $计算机[0] - &GT; virtuemart_customfield_id&#39;] [。&#39; $这 - &GT; _name&#39;] [任何]

plgVmOnDisplayProductVariantFE函数的正确用法是使用表达式:

  • $ group-&gt; display。= $ this-&gt; renderByLayout(&#39;默认&#39;,数组($ field,&amp; $ idx,&amp; $ 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;
  }

现在当我在函数 GetPluginInCart($ product)中print_r -ing $ product-&gt; param时,我明白了:

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

    )

)

......现在我很高兴,我可以继续我的项目:)