Вывод символа стоимости товара Virtuemart Joomla

260
13 октября 2017, 16:36

Использую Virtuemart на Joomla в качестве ознакомления с продукцией, без использования корзины. Нужно выводить цены в двух валютах, но без дублирования, т.е. валюта магазина в долларах, я добавляю товар с базисной ценой в рублях в выпадающем списке, на сайте должен вывести символ или символьное представление рубля, если в долларах, то ничего предпринимать не нужно (возможно добавиться еще одна валюта). Решение хочу сделать универсальное. По умолчанию Virtuemart конвертирует валюту в указанную в настройках магазина и выводит символ доллара. Вывод базовой цены сделал методом замены строки по пути:

каталог_joomla/templates/template/html/com_virtuemart/sublayouts/prices.php

//начальная строка
echo $currency->createPriceDiv ('salesPrice', '', $product->prices);
//новая строка
echo $currency->createPriceDiv ('salesPrice', '', $product->prices['costPrice']);

Как я понял, за данные валюты отвечает файл по пути:

каталог_Joomla/administrator/components/com_virtuemart/helpers/currencydisplay.php

В файле я изменил конструктор класса на

private function __construct ($productId = 0){

    if(empty($productId)) $productId = 5;
    $product_model = VmModel::getModel('product');
    $productCurrency = $product_model->getProductCurrency( $productId );
    if($productCurrency){
        $this->_productCurrency = $productCurrency->product_currency;
        $this->_productCurrency_numeric = $productCurrency->currency_numeric;
    }

и функцию getInstance на

static public function getInstance($currencyId=0, $productId=0){

    $h = $currencyId.'.'.$productId;
    if (!isset(self::$_instance[$h])) {
        self::$_instance[$h] = new CurrencyDisplay($productId);
        if(empty($currencyId)){
            $app = JFactory::getApplication();
            if($app->isSite()){
                self::$_instance[$h]->_currency_id = $app->getUserStateFromRequest( "virtuemart_currency_id", 'virtuemart_currency_id',vRequest::getInt('virtuemart_currency_id', 0));
            }
            if(empty(self::$_instance[$h]->_currency_id)){
                self::$_instance[$h]->_currency_id = self::$_instance[$h]->_productCurrency;
            }

        } else {
            self::$_instance[$h]->_currency_id = $currencyId;
        }

        $curM = VmModel::getModel('currency');
        $style = $curM->getData((int)self::$_instance[$h]->_currency_id);

в модели VM 'product' добавил запрос к базе данных

//Get Product Currency
static $_productCurrencies;
static function getProductCurrency ($_productId) {
    if(!isset(self::$_productCurrencies)){
        $db = JFactory::getDBO ();
        $q = 'SELECT *  FROM `#__virtuemart_currencies` AS c
        LEFT JOIN `#__virtuemart_product_prices` AS v ON  c.virtuemart_currency_id = v.product_currency
        WHERE v.virtuemart_product_id = "' . (int)$_productId . '"';
        $db->setQuery ($q);
        self::$_productCurrencies = $db->loadObject ();
    }
    return self::$_productCurrencies;
}

видимо изначально в конструкторе он не определяет $productId.

Помогите разобраться или быть может подскажите решение проблемы. Мне нужно иметь доступ не к валюте магазина, а именно к базисной валюте из которой происходит конвертация. Joomla 3.8, Virtuemart 3 версии.

READ ALSO
Выдает ошибку Trying to get property of non-object

Выдает ошибку Trying to get property of non-object

Делаю парсер цен и другой инфы с сайтаВот ссылка на всю эту инфу: https://loot

206
Как вывести только 1 нужное значение?

Как вывести только 1 нужное значение?

Делаю парсер цен с сайтаУже задавал вопрос, мне подсказали

170
Шаблон массива не работает с float/double

Шаблон массива не работает с float/double

ЗдравствуйтеВот задание:

248