И где решение? (если, конечно, готовы помочь)
Зачем? Можете здесь оставить ваше решение, никому не придется беспокоить вас по пустякам.
Выкладывать сырое решение сразу не хотел... немного доработал и протестил.. Теперь можно и выложить. )))
Сразу скажу, что хак основан на примере приведенном neGODnic
здесь.
Идем в файл administrator/components/com_virtuemart/helpers/calculationh.php
в конце функции getProductPrices меняем строки
$this->productPrices = array_merge($prices,$this->productPrices);
return $this->productPrices;
}
на
$this->productPrices = array_merge($prices,$this->productPrices);
//добавляем модель для получения списка всех групп покупателей в массив
$shopperModel = VmModel::getModel ('shoppergroup');
$shoppergroups = $shopperModel->getShopperGroups (TRUE, TRUE);
//обходим массив групп покупателей
foreach ($shoppergroups as $sh) {
$this->_db->setQuery('SELECT * FROM #__virtuemart_product_prices WHERE `virtuemart_product_id`="' . $product->virtuemart_product_id . '" AND `virtuemart_shoppergroup_id`=' .$sh->virtuemart_shoppergroup_id); //запрос цены для текущей группы
$row = $this->_db->loadAssoc();
if ($row) {
if (!empty($row['product_price'])) {
if ($sh->virtuemart_shoppergroup_id != $this->_shopperGroupId[0]) { //если покупатель не принадлежит данной группе массива
$this->productPrices["_wholesale shoppergroup-".$sh->virtuemart_shoppergroup_id]=$row['product_price']; //сохраняем в переменную
} else { //покупатель в текущей группе массива - цена не будет выводиться, чтобы избежать двойного показа одной и той же цены
$this->productPrices["_wholesale shoppergroup-".$sh->virtuemart_shoppergroup_id] = 0;
}
} else {
$app = Jfactory::getApplication();
$app->enqueueMessage('cost Price empty, if child, everything okey, this is just a dev note');
return false;
}
} else $this->productPrices["_wholesale shoppergroup-".$sh->virtuemart_shoppergroup_id] = 0; //если цена в карточке товара для группы отсутствует (без этого выводится ошибка)
}
return $this->productPrices;
}
в начале файла components/com_virtuemart/sublayouts/prices.php после строк
defined ('_JEXEC') or die('Restricted access');
$product = $viewData['product'];
$currency = $viewData['currency'];
добавляем модель для получения списка всех групп покупателей
$shopperModel = VmModel::getModel ('shoppergroup');
$shoppergroups = $shopperModel->getShopperGroups (TRUE, TRUE);
Затем, в этом же файле, в нужном месте добавляем строки
foreach ($shoppergroups as $sh) { //обходим полученный массив групп покупателей и выводим цену каждой группы(если она не равна нулю)
echo $currency->createPriceDiv ('_wholesale shoppergroup-'.$sh->virtuemart_shoppergroup_id, vmText::_('COM_VIRTUEMART_CART_PRICE').' '.$sh->shopper_group_name, $product->prices);
}
В выводе цен, заголовком цены используется языковая переменная COM_VIRTUEMART_CART_PRICE (Цена) совместно с названием группы в ВиртуеМарте.
Например, группа покупателей в ВМ называется "ОПТ", то заголовок цены будет выглядеть как "Цена ОПТ"
Так же используются классы Price_wholesale и shoppergroup-[id-группы] (shoppergroup-1, shoppergroup-2 и т.д.), что позволит гибко настроить стили отображения дополнительных цен.
Теперь
для neGODnic решение этой задачи
............
Так вот задача чтобы каждая группа видела цены предыдущей. Розница только свои, мелкий опт - розницу и свои, опт - розницу, мелк опт и свои.
............
в изменениях файла administrator/components/com_virtuemart/helpers/calculationh.php, приведенных выше, в строке
if ($sh->virtuemart_shoppergroup_id != $this->_shopperGroupId[0]) { //если покупатель не принадлежит данной группе массива
Меняем условие проверки с "неравно" (!=) на "меньше" (<) и получаем
if ($sh->virtuemart_shoppergroup_id < $this->_shopperGroupId[0]) { //если покупатель принадлежит группе c id больше, чем id группы из массива массива
Важно:
id групп от гости до vip должны быть по возрастанию...
Иначе, если, к примеру, группа vip будет иметь id меньше чем у группы опт, то покупатели группы опт будут видеть цены группы vip. а покупатели группы vip не увидят цены группы опт...