всё еще актуально, с каждым часом актуальнее), подскажите кто нибудь.
тестировал на VirtueMart 2.0.22c, но и на VirtueMart 2.0.18a работает
Чтобы вывести доп. цену в категории товаров надо:
0. Создать группу покупателей либо воспользоваться одной из существующих, указывая ее при вводе новой цены.
1. в файле сайт\templates\ваш_шалон\html\com_virtuemart\category\default.php, скопированном из сайт\components\com_virtuemart\views\category\tmpl\
в районе 290-й строки после строки
echo $this->currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $product->prices);
добавить строку
echo $this->currency->createPriceDiv ('wholesale_price', 'COM_VIRTUEMART_PRODUCT_WHOLESALESPRICE', $product->prices);
Вместо wholesale_price можете использовать здесь и далее другие метки - я добавлял оптовую цену просто.
2. В языковых файлах используемых языков например en-GB.com_virtuemart.ini, ru-RU.com_virtuemart.ini, добавить соответственно константы:
COM_VIRTUEMART_PRODUCT_WHOLESALESPRICE="Wholesales price: "
COM_VIRTUEMART_PRODUCT_WHOLESALESPRICE="Опт: "
3. В сайт\administrator\components\com_virtuemart\helpers\calculationh.php в функции getProductPrices перед последним return добавляем
$this->_db->setQuery('SELECT * FROM #__virtuemart_product_prices WHERE `virtuemart_product_id`="' . $product->virtuemart_product_id . '" AND `virtuemart_shoppergroup_id`="3"');
$row = $this->_db->loadAssoc();
if ($row) {
if (!empty($row['product_price'])) {
$this->productPrices["wholesale_price"]=$row['product_price'];
} else {
$app = Jfactory::getApplication();
$app->enqueueMessage('cost Price empty, if child, everything okey, this is just a dev note');
return false;
}
}
где `virtuemart_shoppergroup_id`="3"' меняем на на id той группы покупателей, которым назначается вторая выводимая цена. по умолчанию у вас новая группа покупателей будет иметь 3, если других не добавляли после создания мага
4. Если возникает ошибка со словами, что есть ошибка в SQL запросе SELECT `virtuemart_currency_id`,CONCAT_WS(" ",`currency_name`,`currency_symbol`) as currency_txt FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id` IN ('.$vendor_currency['all_currencies'].') and (`virtuemart_vendor_id` = "'.$vendorId.'" OR `shared`="1") AND published = "1" ORDER BY `ordering`,`currency_name`'
, то в файле сайт\modules\mod_virtuemart_currencies\mod_virtuemart_currencies.php
надо на 49 строке в запросе
$q = 'SELECT `virtuemart_currency_id`,CONCAT_WS(" ",`currency_name`,`currency_symbol`) as currency_txt
FROM `#__virtuemart_currencies` WHERE `virtuemart_currency_id` IN ('.$vendor_currency['all_currencies'].') and (`virtuemart_vendor_id` = "'.$vendorId.'" OR `shared`="1") AND published = "1" ORDER BY `ordering`,`currency_name`';
поменять `virtuemart_currency_id` = 131 - если у вас только рубли. иначе используйте синтаксис `virtuemart_currency_id` IN(ххх, ххх, ...) чтобы перечислить несколько id используемых валют
5. Добавляем доп. цену в карточку товара: в сайт\templates\шаблон\html\com_virtuemart\productdetails\default_showprices.php, скопированном из соответствующего места (сайт\components\com_virtuemart\views\productdetails\tmpl\default_showprices.php) вставить после
echo $this->currency->createPriceDiv ('salesPrice', 'COM_VIRTUEMART_PRODUCT_SALESPRICE', $this->product->prices);
или до(куда вам надо) строку
echo $this->currency->createPriceDiv ('wholesale_price', 'COM_VIRTUEMART_PRODUCT_WHOLESALESPRICE', $this->product->prices);
Вроде все верно. Успехов