[Помощь] VM2 - Редактирование фреймового всплывающего окна купленного товара

Откуда вообще $this-product ? когда либо $this-products , либо $product

Открываем файл components/com_virtuemart/views/cart/tmpl/padded.php
Смотрим кусок кода
PHP:
if($this->products){
    foreach($this->products as $product){
        echo '<h4>'.JText::sprintf('COM_VIRTUEMART_CART_PRODUCT_ADDED',$product->product_name,$product->quantity).'</h4>';
    }
}
Добавим перед echo '<h4>'... новую строку var_dump($product); и возрадуемся, увидев какие данные вернутся от товара!
А дальше выводим все что угодно!
Вот то, что выводится: NULL

но если прописать не var_dump($product); а var_dump($this->product);
то выводит много всякой информации:
Код:
["virtuemart_manufacturer_id"]=> array(0) { } ["mf_name"]=> string(0) "" ["mf_desc"]=> string(0) "" ["mf_url"]=> string(0) "" ["categories"]=> array(1) { [0]=> string(2) "16" } ["virtuemart_category_id"]=> string(2) "16" ["ordering"]=> string(1) "0" ["id"]=> string(3) "439" ["category_name"]=> string(29) "Плащи-дождевики" ["packaging"]=> int(0) ["box"]=> int(0) ["customfields"]=> array(0) { } ["customfieldsRelatedCategories"]=> array(0) { } ["customfieldsRelatedProducts"]=> array(0) { } ["customfieldsCart"]=> array(1) { [0]=> object(stdClass)#247 (11) { ["virtuemart_custom_id"]=> string(2) "75" ["custom_title"]=> string(13) "Размер:" ["show_title"]=> string(1) "1" ["custom_value"]=> string(0) "" ["custom_field_desc"]=> string(0) "" ["custom_tip"]=> string(0) "" ["field_type"]=> string(1) "V" ["virtuemart_customfield_id"]=> string(4) "1149" ["is_hidden"]=> string(1) "0" ["options"]=> array(2) { [1149]=> object(stdClass)#243 (9) { ["virtuemart_product_id"]=> string(3) "194" ["custom_params"]=> string(1) "0" ["custom_element"]=> string(1) "0" ["virtuemart_custom_id"]=> string(2) "75" ["virtuemart_customfield_id"]=> string(4) "1149" ["custom_value"]=> string(5) "48-50" ["custom_price"]=> NULL ["custom_param"]=> string(0) "" ["text"]=> string(6) "48-50 " } [1150]=> object(stdClass)#242 (9) { ["virtuemart_product_id"]=> string(3) "194" ["custom_params"]=> string(1) "0" ["custom_element"]=> string(1) "0" ["virtuemart_custom_id"]=> string(2) "75" ["virtuemart_customfield_id"]=> string(4) "1150" ["custom_value"]=> string(5) "50-52" ["custom_price"]=> NULL ["custom_param"]=> string(0) "" ["text"]=> string(6) "50-52 " } } ["display"]=> string(141) " " } } ["customsChilds"]=> array(0) { } ["orderable"]=> bool(true) ["product_template"]=> string(0) "" ["canonical"]=> string(103) "index.php?
выбрал этот кусок, потому что в нём как раз кастомные поля встречаются. Но как благодаря этому всё же вывести во всплывающее окно именно то значение из списка, которое выбрано в тот момент, когда нажимается кнопка добавить в корзину?
 
Последнее редактирование модератором:
Genk0, товарищ говорит о Virtuemart2, там немного по другому устроено
 
Genk0, товарищ говорит о Virtuemart2, там немного по другому устроено
Значит ему следовало бы указывать точные версии, я смотрел 2.6.х
Принцип почти такой же.

Я подразумеваю что в товаре был выбран размер 48-50, если так, то
Ищем в массиве customfieldsCart значение virtuemart_customfield_id
И выводим получившееся значение из options, оно как раз первое
 
Значит ему следовало бы указывать точные версии, я смотрел 2.6.х
Принцип почти такой же.

Я подразумеваю что в товаре был выбран размер 48-50, если так, то
Ищем в массиве customfieldsCart значение virtuemart_customfield_id
И выводим получившееся значение из options, оно как раз первое
Умоляю, скажите, как это сделать? Virtuemart 2.0.18
 
Genk0
В массиве передается почему-то всегда первый virtuemart_customfield_id из списка options
Можно попробовать например доставать из JSON который попадает в padded, но там с мусором


Upd: Я понял. Этот массив ($this->product->customfieldscart) содержит поля которые являются атрибутом корзины для этого товара, а не реально передаваемые в корзину параметры. Так же есть массив ($this->product->customfields) который содержит в себе остальные поля, не являющиеся атрибутом корзины.
Надо ковырять именно объект $cart, как предложено далее.

to RussianDozhdevik:


попробуйте взять за основу предложенный мной файл padded.php
вам нужно ковырять кусок кода, отвечающий за вывод товаров из переменной корзины:
PHP:
if(!class_exists('VirtueMartCart')) require(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php');
$cart = VirtueMartCart::getCart(false);

foreach ($cart->products as $product)
{
var_dump($product->customfields); // тут должны быть ваши кастомные поля для каждого продукта
}
На коленке проверил - вроде должно работать. Однако тесты показали что содержимое там появляется только после посещения страницы корзины.
 
Последнее редактирование:
Genk0
В массиве передается почему-то всегда первый virtuemart_customfield_id из списка options
Можно попробовать например доставать из JSON который попадает в padded, но там с мусором


Upd: Я понял. Этот массив ($this->product->customfieldscart) содержит поля которые являются атрибутом корзины для этого товара, а не реально передаваемые в корзину параметры. Так же есть массив ($this->product->customfields) который содержит в себе остальные поля, не являющиеся атрибутом корзины.
Надо ковырять именно объект $cart, как предложено далее.

to RussianDozhdevik:


попробуйте взять за основу предложенный мной файл padded.php
вам нужно ковырять кусок кода, отвечающий за вывод товаров из переменной корзины:
PHP:
if(!class_exists('VirtueMartCart')) require(JPATH_VM_SITE.DS.'helpers'.DS.'cart.php');
$cart = VirtueMartCart::getCart(false);

foreach ($cart->products as $product)
{
var_dump($product->customfields); // тут должны быть ваши кастомные поля для каждого продукта
}
На коленке проверил - вроде должно работать. Однако тесты показали что содержимое там появляется только после посещения страницы корзины.
К сожалению, это не решило задачу..
Мне удавалось вывести во всплывающее окно кастомные поля и даже без предварительного посещения корзины. Проблема в том, что отображались все значения из списка. А нужно показывать только тот размер товара, который сейчас выбран и добавляется в корзину. Во всплывающем окошке не нужен список товаров из корзины. Нужно, чтобы при нажатии кнопки Добавить в корзину появлялось окно, где будет только добавляемый товар(его название, артикул, фото - это выводится и количество, но не общее в корзине, а только то которое добавляется в данный момент и размер товара(либо цвет) - это вывести мне не удаётся). Можно ли это как то решить?
 
Хорошо, я спрошу по-другому. Все знают в Virtuemart 2 когда указываешь количество перед нажатием кнопки купить (или добавить в корзину) происходит какое-то ajax-обновление, то есть пересчёт без перезагрузки страницы. Так вот куда записывается это значение. Я указал количество товара, но ещё не нажал кнопку купить. Но Virtuemart уже знает ту цифру, которую я указал и когда я нажму купить, во всплывающем окне он её покажет. Где хранится эта цифра пока я не нажму кнопку купить(добавить в корзину)?
 
Джентльмены, опять возник вопрос по этому долбаному фреймовому окну для ВМ2. Куда нужно вставить счетчик, чтобы это окно само закрывалось, скажем, через 3 секунды?
 
скрипт таймера надо вставлять сюда components/com_virtuemart/views/cart/tmpl/padded.php.
или вот сюда, если у вас в шаблон перенесен этот файл (дабы избежать потери макета во время обновления ядра) templates/ваш_шаблон/html/com_virtuemart/cart/padded.php
 
скрипт таймера надо вставлять сюда components/com_virtuemart/views/cart/tmpl/padded.php.
или вот сюда, если у вас в шаблон перенесен этот файл (дабы избежать потери макета во время обновления ядра) templates/ваш_шаблон/html/com_virtuemart/cart/padded.php
Да про этот файлик я знаю, вот только вставка туда счетчика ничего не дает...
 
Назад
Сверху