Пользовательское поле VirtueMart 2.6.6 (переменная корзины) не отображается в деталях заказа
Я запрограммировал плагин для настраиваемого поля для Virtuemart 2.6.6, который показывает некоторые параметры на странице продукта, например, "размер", и этот параметр также является переменной корзины.
Огромная помощь была в этой статье:
https://www.spiralscripts.co.uk/Joomla-Tips/custom-plugin-fields-in-virtuemart-2-2.html
И, конечно же, форум stackru и пользовательские плагины 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 были сохранены значения: что-то вроде:
{ "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, она не была найдена, поэтому это означает, что она не запущена (?)
Если бы кто-нибудь мог мне помочь или отправить честную документацию, было бы очень хорошо. Спасибо!
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.'" />
поэтому атрибут name должен быть всегда:
- customPlugin [ '$ ViewData[0]-.>virtuemart_customfield_id.'][' $ это -..>_ имя'] [любой]
Правильное использование функции 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;
}
Теперь, когда я печатаю _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
)
)
)
... и теперь я рад, что я могу двигаться дальше в моем проекте:)