Bidang khusus VirtueMart 2.6.6 (variabel keranjang) tidak ditampilkan dalam detail pesanan

Saya memprogram plugin bidang khusus untuk Virtuemart 2.6.6, yang menampilkan beberapa parameter pada halaman produk misalnya "ukuran", dan parameter tersebut juga merupakan variabel keranjang.

Artikel ini sangat membantu:

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

Dan tentu saja forum stackoverflow dan plugin kustom VM default pabrik.

Semuanya berfungsi (ukurannya ditampilkan di tampilan detail produk, dan di keranjang, saat Anda menambahkan produk ke dalamnya) tetapi satu hal:

  • setelah mengirim pesanan parameternya belum ditampilkan di detail pesanan, jadi saya tidak tahu ukuran produk yang dibeli.

Saya menempatkan fungsi-fungsi berikut ke dalam plugin saya, tetapi tidak menyelesaikan masalah saya:

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);
}

Ke dalam tabel database bernama #__virtuemart_order_items disimpan nilai: seperti:

{"357":"5"}

tapi seharusnya seperti ini:

{"357":"ukuran M"}

Saya melihat bahwa fungsi kuncinya adalah GetPluginInCart($product), dan ketika saya mencetak $product->param dalam fungsi itu saya mendapatkan output ini, ketika saya melalui proses checkout:

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

    )

)

tetapi setelah saya menyelesaikan pesanan dan masuk ke detail pesanan, $product->param memiliki nilai ini:

Array
(
[357] => 5
)
  • Jadi menurut saya, sebelum saya menyelesaikan pesanan, saya harus menangani parameter produk yang dipilih dan mengubahnya menjadi bentuk yang benar, tetapi saya tidak tahu caranya.

Di situs berikut https://dev.virtuemart.net/projects/virtuemart/wiki/Product_Plugins

Saya menemukan fungsi:

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

return $param;

tetapi ketika saya mencari string "plgVmOnViewCartOrder" di seluruh instalasi kebajikanmart, tidak ditemukan, jadi berarti tidak diluncurkan (?)

Jika ada yang bisa membantu saya atau mengirimkan dokumentasi yang adil akan sangat baik. Terima kasih!


person Gregory    schedule 30.07.2014    source sumber


Jawaban (1)


Saya pikir, saya memecahkan masalah saya, yaitu:

dalam fungsi plgVmOnDisplayProductVariantFE Saya melakukan kesalahan, saya tidak menggunakan perender tata letak, yang menghasilkan objek $viewData dengan variabel virtuemart_customfield_id.

Kemudian di tata letak plugin Anda, nama kolom masukan harus sebagai berikut:

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

jadi atribut name harus selalu:

  • customPlugin['.$viewData[0]->virtuemart_customfield_id.']['.$this->_name.'][terserah]

Penggunaan fungsi plgVmOnDisplayProductVariantFE yang tepat adalah dengan menggunakan ekspresi:

  • $grup->tampilan .= $ini->renderByLayout('default',array($field,&$idx,&$group )

Berikut seluruh fungsi dengan ekspresi yang tepat:

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;
  }

Sekarang ketika saya print_r -ing $product->param dalam fungsi GetPluginInCart($product), saya mendapatkan ini:

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

    )

)

...dan sekarang aku senang, aku bisa melanjutkan proyekku :)

person Gregory    schedule 31.07.2014