0 Пользователей и 1 Гость просматривают эту тему.
  • 33 Ответов
  • 24030 Просмотров
*

rnr

  • Новичок
  • 6
  • 0 / 0
Задачка такая - товар заводится в базу с долларовой ценой, а отображаться пользователю должна рублевая цена. Причем, курс может:
1. менятся ручками
2. в идеале, из инета подставлялся бы текущий курс ЦБ

К сожаленю, в ПХП - деревянный как папа Буратино :( , но пытаюсь разобраться.

Буду признателен, за ссылку как на готовые решения, так и за подсказку, какие файлы копать.

Чтение архивов форума ясности в вопрос не внесли :(
« Последнее редактирование: 14.05.2009, 22:07:22 от beagler »
*

ButuzOFF

  • Захожу иногда
  • 144
  • 22 / 2
*

rnr

  • Новичок
  • 6
  • 0 / 0
Оно. Только ясности пока не внесено.  >:(
Плохо быть деревянным, особенно сверху  :(
*

ButuzOFF

  • Захожу иногда
  • 144
  • 22 / 2
Ну извини меня этот вопрос пока не трогает ,а то решали бы вместе ^-^
Единственное что могу сказать глянь те файлы которые автор в аттаче прицепил
И попробуй сделать по аналогии в папке administrator/component/com_virtumart/ps_currency.php и ps_product.php
Обрати внимание на класс (class) Ну или просто замени (авось проканает)
Попробуй написать автору в личку может ответит (а может и готовое решение даст)
P.S Я кстати тоже "спец" в php и html ;D
*

rnr

  • Новичок
  • 6
  • 0 / 0
Я час потратил, что бы хотя бы найти где эти файлы лежат  ;D
Так что спасибо за помощь, буду ковырять!
*

ivashka

  • Новичок
  • 6
  • 0 / 0
Оно или обшибся? ^-^
http://ru-mambo.ru/smf/index.php/topic,11897.0.html

слишком старый там хак... на новых версиях не работает.

Кто как решил вопрос??? срочно надо
*

ivashka

  • Новичок
  • 6
  • 0 / 0
отсюда:
http://virtuemart.net/index.php?option=com_smf&Itemid=71&topic=15464.90

Цитировать
Okay, let's do this right - for the benefit of everyone...

First, you need the class file "class_xe_curr_conv.php" uploaded to your classes folder, and the Flag images uploaded to "/components/com_virtuemart/shop_image/flags/" folder. (See the files attached at the bottom of this post   )

Then in shop.browse.php...

Top section should look like this:

/* load important class files */
require_once (CLASSPATH."ps_product.php");
$ps_product = new ps_product;
require_once (CLASSPATH."ps_product_category.php");
$ps_product_category = new ps_product_category;
require_once (CLASSPATH."ps_reviews.php");

require_once( CLASSPATH.'class_xe_curr_conv.php' );
$curr = new CURRENCYCONVERTER();

then where the price is called:

   
/** Price: xx.xx EUR ***/
if (_SHOW_PRICES == '1' && $auth['show_prices']) {
$img_path = $mosConfig_live_site . "/components/com_virtuemart/shop_image/flags/";
$product_price = $ps_product->show_price( $db_browse->f("product_id") );
$price = $ps_product->get_price( $db_browse->f("product_id") );
//echo $price['product_price'];
if( !empty( $price['product_price'] ) || $price['product_price']!="0.00") {
$CAD = "Price in <img src=\"" . $img_path . "CAD.gif\" alt=\"Canadian Dollars\">";
//number_format($curr->convert($amt,$to,$from), 2)
$USD = "$ " . number_format($curr->convert( $price['product_price'], 'USD', 'CAD' ), 2) . " <img src=\"" . $img_path . "USD.gif\" alt=\"US Dollars\">";
$GBP = "&pound; " . number_format($curr->convert( $price['product_price'], 'GBP', 'CAD' ), 2) . " <img src=\"" . $img_path . "GBP.gif\" alt=\"British Pounds\">";
} else {
$CAD = "";
$USD = "";
$GBP = "";
} else {
$product_price = "";
}
then the template replacements:
$product_cell = str_replace( "{product_price}", $product_price, $product_cell );
$product_cell = str_replace( "{CAD}", $CAD, $product_cell );
$product_cell = str_replace( "{USD}", $USD, $product_cell );
$product_cell = str_replace( "{GBP}", $GBP, $product_cell );

Now, for shop.product_details.php:

require_once( CLASSPATH.'class_xe_curr_conv.php' );
$curr = new CURRENCYCONVERTER();

just after the other class files are called, then the price section again:

/** PRODUCT PRICE **/
if (_SHOW_PRICES == '1') { /** Change - Begin */
$img_path = $mosConfig_live_site . "/components/com_virtuemart/shop_image/flags/";
$product_price = $ps_product->show_price( $product_id );
$price = $ps_product->get_price( $product_id );
if( empty( $price['product_price'] ) || $price['product_price']=="0.00") {
   
$CAD = "";
$USD = "";
$GBP = "";
} else {
$CAD = "Price in <img src=\"" . $img_path . "CAD.gif\" alt=\"Canadian Dollars\">";
$USD = "$ " . number_format($curr->convert( $price['product_price'], 'USD', 'CAD' ), 2) . " <img src=\"" . $img_path . "USD.gif\" alt=\"US Dollars\">";
$GBP = "&pound; " . number_format($curr->convert( $price['product_price'], 'GBP', 'CAD' ), 2) . " <img src=\"" . $img_path . "GBP.gif\" alt=\"British Pounds\">";
   
// added link to XE.com here, comment out or remove if you dont want, remember to comment out or remove
// the {$conv} template replacement if you take out the link
$conv = "<span class=\"smalldark\">Conversion by<br><a href=\"http://www.xe.com\" class=\"smalldark\" target=\"_blank\">XE.com</a></span>";
}
} else {
$product_price = "";
}

I add a little link to XE.com here (the $conv = "" part - you can leave it in or take it out) - next, the template replacement section:

$template = str_replace( "{product_price}", $product_price, $template );
$template = str_replace( "{CAD}", $CAD, $template );
$template = str_replace( "{USD}", $USD, $template );
$template = str_replace( "{GBP}", $GBP, $template );
// comment out or remove the next line if you dont want the XE.com link
$template = str_replace( "{conv}", $conv, $template );

That's it!


Кто в PHP гуру???
помогите переделать хак, так чтобы он работал с USD, RUB, EUR и курс брал не из интернета а  из  поля currency_rate, добавленного в таблицу *_vm_currency ручками, содержащее значение обменного курса каждой валюты по отношению к валюте по умолчанию.

[вложение удалено Администратором]
*

inc!

  • Осваиваюсь на форуме
  • 32
  • 7 / 1
Действительно очень нужно.

Урра! У меня получился самописный хак! Щас буду писать как это делать. Так как 2 дня потратил на это. Думаю многим очень понадобиться как и мне.

Задача и описание ситуации:
При возделывании магазина на Джумле 1.0.12 + Virtuemart RE 1.0.12 досталась база товаров цена которых в базе была в долларах. Так как Виртумарт одновалютный и не позволяет конвертировать валюту при выводе товаров на сайте в рублях, то пришлось залезть в /administrator/components/com_virtuemart/classes/ps_product.php и в function show_price изменить строку
Код
$base_price = $base_price_info["product_price"];
на
Код
// Расчёт базовой цены по курсу 25руб за 1$
// $base_price = ($base_price_info["product_price"])*25;
Но это было тупое умножение цены товара на 25 и не позволяла клиенту менять курс по своему умотрению без моей помощи. Так что нужно было сделать чё нить другое, более полезное и удобное. Не вздумайте вставлять вышеописанный код, дочитайте до конца…))
Нужно было найти хак или модуль по конвертации с возможностью изменения курса на каждую валюту отдельно. Чего я так и не нашёл ни на одном из ворумов.

Итак, как я уже сказал искал 2 дня этот хак на форуме http://forum.virtuemart.ru, а так же на этом форуме. Но ничего не нашёл ни по поиску ни по другим параметрам. Набрёл вот на эту тему с хорошей ссылкой на http://ru-mambo.ru/smf/index.php/topic,11897.0.html.
Возникла идея доделать и немного отредактировать то что нужно многим из нас. Далее пошагово:
1)    Заходим в БД магазина и в таблице jos_vm_currency создаём дополнительное поле currency_curs (я назвал его currency_curs, SB назвал свой «currency_rate», то так как я русский человек то слово «курс(curs)» мне болиже чем «рэйт(rate)»), с типом данных «decimal(11,2), значение по умолчанию 1 ибо если будет 0, то цена превратиться в 0, если неправильно будет выбрана валюта отображения товара на сайте.
2)    Далее нам нужно поле формы в админке для редактирования стоимости каждой из валют.
    Заходим в админке: в компонент магазина -> Настройки -> Валюта –> Список валют. Выбираем валюту нажатием на её ссылку. Видим 2 поля формы: Название и код валюты, которые беруться из вышеописанной базы. Нам нужно добавить 3-е поле ввода для редактирования курса этой валюты.
/administrator/components/com_virtuemart/html/admin.curr_form.php – ищем HTML+PHP код :   
 
Код
   <tr> 
      <td width="24%" align="right"><?php echo $VM_LANG->_PHPSHOP_CURRENCY_LIST_CODE ?>:</td>
      <td width="76%">
        <input type="text" class="inputbox" name="currency_code" value="<?php $db->sp("currency_code") ?>" />
      </td>
    </tr>
Добавляем под ним новую строку таблицы:
Код
    <tr> 
      <td width="24%" align="right">Курс в рублях:</td>
      <td width="76%">
        <input type="text" class="inputbox" name="currency_curs" value="<?php $db->sp("currency_curs") ?>" />
      </td>
    </tr>
Лично мне было влом в лэнгвиче добавлять новую переменную, и тупо написал «Курс в рублях:». Кому надо можете поставить свой текст по личному желанию.
3)   Теперь нужно сделать так чтоб новая строка формы «Курс в рублях» брала значения из БД и если надо то редактировала, при апдэйте или создании новой валюты. Короче делаем её функциональной:
/administrator/components/com_virtuemart/classes/ps_currency.php – ищем заветный код со словами Инсерт и Апдэйт.))
function add – в этой функции добавляем обработчик нового поля в таблице «Куренси» нашей БД. Заменяем похожее на это:
Код
    $q = "INSERT INTO #__{vm}_currency (currency_name, currency_curs, currency_code)";
    $q .= " VALUES ('";
    $q .= $d["currency_name"] . "','";
    $q .= $d["currency_curs"] . "','";
    $q .= $d["currency_code"] . "')";
В функции function update делаем тоже самое:
Код
    $q = "UPDATE #__{vm}_currency set ";
    $q .= "currency_name='" . $d["currency_name"];
    $q .= "',currency_curs='" . $d["currency_curs"]."' ";
    $q .= ",currency_code='" . $d["currency_code"]."' ";
    $q .= "WHERE currency_id='".$d["currency_id"]."'";
Заливаем файлы на сервер и обновляем станицу в админке. Вау! Круто! Теперь у нас на каждую валюту свой рублёвый множитель.
4)   Теперь нужно заставить этот множитель работать. Исходник кода я взял у SB «3. В классе ps_product добавляется расчет курса в соответствии с валютой товара и магазина. (функции get_retail_price и get_price).» на форуме мамбы, и внёс некоторые корректировки по перемене имён переменных на свои.
/administrator/components/com_virtuemart/classes/ps_product.php – ищем функцию function get_retail_price.
Над функцией по аналогии с предложенным SB вставляем новую функцию:
 
Код
 /**************************************************************************
   ** name: get_cur_rate($price_info, $vendor_id)
   ** created by: sb
   ** modify by: XDX
   ** description: get currency curs!!!
   ** parameters:
   ** returns:
   ***************************************************************************/
 
 function get_curs_rate($price_info, $vendor_id) {
    $db = new ps_DB;
    // Get the vendor id for this product.

    $q = "SELECT vendor_currency FROM #__{vm}_vendor WHERE vendor_id='$vendor_id'";
    $db->setQuery($q); $db->query();
    $db->next_record();
    $vendor_currency = $db->f("vendor_currency");
   

   
    if ($price_info["product_currency"] !== $vendor_currency)
      {
       $price_info_product_currency = $price_info["product_currency"];
       $q = "SELECT currency_curs FROM #__{vm}_currency WHERE currency_code = '$price_info_product_currency' ";
       $db->setQuery($q); $db->query();
       $db->next_record();

       $currency_curs = $db->f("currency_curs");

       //error_log ($currency_curs, 3, "my-errors.log");
       if($currency_curs)
        {
         return $currency_curs;

        }
      }
    return 1;
  }
Далее в функциях get_retail_price и get_price вставляем нужные части кода предложенного SB. Я не буду подробно описывать, что и после какой строки вставлять, просто скопирую сюда сразу код этих функций благо они идут одна за другой:
Код
	/**
* Function to get the "pure" undiscounted and untaxed price
* of product $product_id. Used by the administration section.
*
* @param int $product_id
* @return array The product price information
*/
function get_retail_price($product_id) {

$db = new ps_DB;
        $curs = 0;
// Get the vendor id for this product.
$q = "SELECT vendor_id FROM #__{vm}_product WHERE product_id='$product_id'";
$db->setQuery($q); $db->query();
$db->next_record();
$vendor_id = $db->f("vendor_id");

// Get the default shopper group id for this product and user
$q = "SELECT shopper_group_id FROM #__{vm}_shopper_group WHERE `vendor_id`='$vendor_id' AND `default`='1'";
$db->setQuery($q); $db->query();
$db->next_record();
$default_shopper_group_id = $db->f("shopper_group_id");

$q = "SELECT product_price,product_currency FROM #__{vm}_product_price WHERE product_id='$product_id' AND ";
$q .= "shopper_group_id='$default_shopper_group_id'";
$db->setQuery($q); $db->query();
if ($db->next_record()) {
$price_info["product_price"]= $db->f("product_price");
$price_info["product_currency"]=$db->f("product_currency");
}
else {
$price_info["product_price"]= "";
$price_info["product_currency"] = $_SESSION['vendor_currency'];
}
        $curs = $this->get_curs_rate($price_info, $vendor_id);
        if (($cur)&&(!$original_price))
          $price_info["product_price"]=$price_info["product_price"] * $curs;
return $price_info;
}

/**
* Get the price of product $product_id for the shopper group associated
* with $auth['user_id'] - including shopper group discounts
*
* @param int $product_id
* @param boolean $check_multiple_prices Check if the product has more than one price for that shopper group?
* @return array The product price information
*/
function get_price($product_id, $check_multiple_prices=false) {
$auth = $_SESSION['auth'];
$cart = $_SESSION['cart'];

if( empty( $GLOBALS['product_info'][$product_id]['price'] )
|| !empty($GLOBALS['product_info'][$product_id]['price']["product_has_multiple_prices"])
|| $check_multiple_prices) {
$db = new ps_DB;

if( empty( $_SESSION['product_sess'][$product_id]['vendor_id'] )) {

// Get the vendor id for this product.
$q = "SELECT vendor_id FROM #__{vm}_product WHERE product_id='$product_id'";
$db->setQuery($q); $db->query();
$db->next_record();
$_SESSION['product_sess'][$product_id]['vendor_id'] = $vendor_id = $db->f("vendor_id");
}
else {
$vendor_id = $_SESSION['product_sess'][$product_id]['vendor_id'];
}

$shopper_group_id = $auth["shopper_group_id"];
$shopper_group_discount = $auth["shopper_group_discount"];

if( empty($GLOBALS['vendor_info'][$vendor_id]['default_shopper_group_id']) ) {
// Get the default shopper group id for this vendor
$q = "SELECT shopper_group_id,shopper_group_discount FROM #__{vm}_shopper_group WHERE ";
$q .= "vendor_id='$vendor_id' AND `default`='1'";
$db->setQuery($q); $db->query();
$db->next_record();
$GLOBALS['vendor_info'][$vendor_id]['default_shopper_group_id'] = $default_shopper_group_id = $db->f("shopper_group_id");
$GLOBALS['vendor_info'][$vendor_id]['default_shopper_group_discount']= $default_shopper_group_discount = $db->f("shopper_group_discount");
}
else {
$default_shopper_group_id = $GLOBALS['vendor_info'][$vendor_id]['default_shopper_group_id'];
$default_shopper_group_discount = $GLOBALS['vendor_info'][$vendor_id]['default_shopper_group_discount'];
}
// Get the product_parent_id for this product/item
$product_parent_id = $this->get_field($product_id, "product_parent_id");

$price_info = Array();
if( !$check_multiple_prices ) {
/* Added for Volume based prices */
// This is an important decision: we add up all product quantities with the same product_id,
// regardless to attributes. This gives "real" volume based discount, because our simple attributes
// depend on one and the same product_id
$quantity = 0;
for ($i=0;$i<$cart["idx"];$i++) {
if ($cart[$i]["product_id"] == $product_id) {
$quantity  += $cart[$i]["quantity"];
}
}

$volume_quantity_sql = " AND (('$quantity' >= price_quantity_start AND '$quantity' <= price_quantity_end)
                                OR (price_quantity_end='0') OR ('$quantity' > price_quantity_end)) ORDER BY price_quantity_end DESC";
/* End Addition */
}
else {
$volume_quantity_sql = " ORDER BY price_quantity_start";
}

// Getting prices
//
// If the shopper group has a price then show it, otherwise
// show the default price.
if( !empty($shopper_group_id) ) {
$q = "SELECT product_price, product_price_id, product_currency FROM #__{vm}_product_price WHERE product_id='$product_id' AND ";
$q .= "shopper_group_id='$shopper_group_id' $volume_quantity_sql";
$db->setQuery($q); $db->query();
if ($db->next_record()) {
$price_info["product_price"]= $db->f("product_price");
if( $check_multiple_prices ) {
$price_info["product_base_price"]= $db->f("product_price");
$price_info["product_has_multiple_prices"] = $db->num_rows() > 1;
}
$price_info["product_price_id"]=$db->f("product_price_id");
$price_info["product_currency"]=$db->f("product_currency");
$price_info["item"]=true;

      $curs = $this->get_curs_rate($price_info, $vendor_id);
      if ($curs)
      $price_info["product_price"]=$price_info["product_price"] * $curs;

$GLOBALS['product_info'][$product_id]['price'] = $price_info;
return $GLOBALS['product_info'][$product_id]['price'];
}
}
// Get default price
$q = "SELECT product_price, product_price_id, product_currency FROM #__{vm}_product_price WHERE product_id='$product_id' AND ";
$q .= "shopper_group_id='$default_shopper_group_id' $volume_quantity_sql";
$db->setQuery($q); $db->query();
if ($db->next_record()) {
$price_info["product_price"]=$db->f("product_price") * ((100 - $shopper_group_discount)/100);
if( $check_multiple_prices ) {
$price_info["product_base_price"]= $price_info["product_price"];
$price_info["product_has_multiple_prices"] = $db->num_rows() > 1;
}
$price_info["product_price_id"]=$db->f("product_price_id");
$price_info["product_currency"] = $db->f("product_currency");
$price_info["item"] = true;

      $curs = $this->get_curs_rate($price_info, $vendor_id);
      if ($curs)
      $price_info["product_price"]=$price_info["product_price"] * $curs;

$GLOBALS['product_info'][$product_id]['price'] = $price_info;
return $GLOBALS['product_info'][$product_id]['price'];
}

// Maybe its an item with no price, check again with product_parent_id
if( !empty($shopper_group_id) ) {
$q = "SELECT product_price, product_price_id, product_currency FROM #__{vm}_product_price WHERE product_id='$product_parent_id' AND ";
$q .= "shopper_group_id='$shopper_group_id' $volume_quantity_sql";
$db->setQuery($q); $db->query();
if ($db->next_record()) {
$price_info["product_price"]=$db->f("product_price");
if( $check_multiple_prices ) {
$price_info["product_base_price"]= $db->f("product_price");
$price_info["product_has_multiple_prices"] = $db->num_rows() > 1;
}
$price_info["product_price_id"]=$db->f("product_price_id");
$price_info["product_currency"] = $db->f("product_currency");

      $curs = $this->get_curs_rate($price_info, $vendor_id);
      if ($curs)
      $price_info["product_price"]=$price_info["product_price"] * $curs;

$GLOBALS['product_info'][$product_id]['price'] = $price_info;
return $GLOBALS['product_info'][$product_id]['price'];
}
}
$q = "SELECT product_price, product_price_id, product_currency FROM #__{vm}_product_price WHERE product_id='$product_parent_id' AND ";
$q .= "shopper_group_id='$default_shopper_group_id' $volume_quantity_sql";
$db->setQuery($q); $db->query();
if ($db->next_record()) {
$price_info["product_price"]=$db->f("product_price") * ((100 - $shopper_group_discount)/100);
if( $check_multiple_prices ) {
$price_info["product_base_price"]= $price_info["product_price"];
$price_info["product_has_multiple_prices"] = $db->num_rows() > 1;
}
$price_info["product_price_id"]=$db->f("product_price_id");
$price_info["product_currency"] = $db->f("product_currency");

      $curs = $this->get_curs_rate($price_info, $vendor_id);
      if ($curs)
      $price_info["product_price"]=$price_info["product_price"] * $curs;

$GLOBALS['product_info'][$product_id]['price'] = $price_info;
return $GLOBALS['product_info'][$product_id]['price'];
}
// No price found
$GLOBALS['product_info'][$product_id]['price'] = false;
return $GLOBALS['product_info'][$product_id]['price'];
}
else {
return $GLOBALS['product_info'][$product_id]['price'];
}
}
Честно говоря не проверял получившиеся функции на чистоту и всевозможные багги, просто переименовал переменные на свои. Если кто найдёт ошибки тот молодец, я ему буду очень благодарен.

Теперь мы имеем достойный калькулятор валют в нашем магазине. И клиент не будет парить вам мозг по изменению курса валюты.
Спасибо за внимание. Доработка приветствуется!)))
« Последнее редактирование: 02.02.2008, 22:14:47 от XDX »
*

-L-

  • Осваиваюсь на форуме
  • 31
  • 1 / 0
Блин админка вирта развалилась вся после последнего изменения, у мну вирт 13
*

-L-

  • Осваиваюсь на форуме
  • 31
  • 1 / 0
Нашел гадость, поправил, спасибо огромное то что надо!
*

-L-

  • Осваиваюсь на форуме
  • 31
  • 1 / 0
последнее, как бы еще эту переменную, тобишь курс вывести в карточке товара? типа 1 уе сегодня 35 р

А зачем? По современному закону всё должно быть в рублях. Внутри цены могут храниться УЕ а выводиться в рублях. Пользователю не обязательно знать какой у вас внутренний курс.
Ну а по существу если уж так прям необходимо, то наверняка придётся писать свой модуль или прикрепить тот который уже написан кем либо ещё и переделать его маленько под себя.
*

KorSaa

  • Новичок
  • 3
  • 0 / 0
А как сделать чтобы еще и для нескольких цен так выводилось?
т.е. на данный момент получается вот так:
Продукт1
Цена: 941,05 руб.
 Количество    Цена
1 - 1          34,22 руб.
2 - 9          24,78 руб.

т.е. для цены по умолчанию пересчитывает по курсу, а для таблицы с ценами в зависимости от кол-ва не считает по курсу. Но если положить товар в корзину то , в корзине отображает правельную цену.
Помогите пожалуйста.
« Последнее редактирование: 18.11.2008, 17:22:10 от KorSaa »
*

KorSaa

  • Новичок
  • 3
  • 0 / 0
Никто не знает ответ? :(
« Последнее редактирование: 18.11.2008, 17:22:17 от KorSaa »
*

jarosstar

  • Новичок
  • 9
  • 3 / 0
К VM 1.1 вот такой есть модуль - выбор валюты. Русский. Оно?

[вложение удалено Администратором]
*

TAX

  • Захожу иногда
  • 154
  • 10 / 0
Мультивалютность для Virtuemart 1.0.x. Версия 2.1
http://forum.virtuemart.ru/index.php?topic=3081.0
*

laked

  • Новичок
  • 5
  • 0 / 0
БРАВО!!!! СПАСИБО!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Вы просто спасли меня своим хаком!!!!!!!!!!!!!!!!!!! Я весь инет вспахала, вы меня спасли!!!!!! Очень-очень-очень нужный хак, работает супер и без галюцинаций!!!!!
 :-*
*

Gremlin

  • Захожу иногда
  • 293
  • 11 / 0
последнее, как бы еще эту переменную, тобишь курс вывести в карточке товара? типа 1 уе сегодня 35 р
Нашел гадость, поправил, спасибо огромное то что надо!
А что за гадость? У меня тоже 1.0.15 + 1.0.15, но пока хак не делал и очень хочется что-бы все прошло без последствий ;)
*

Gremlin

  • Захожу иногда
  • 293
  • 11 / 0
Вот нашел хак: http://forum.virtuemart.ru/viewtopic.php?f=6&t=450. Тока есть косячки :(... Придется еще дорабатывать модуль доставки и корзины. И еще не проверил как оплата работает...

Вот нашел хак: http://forum.virtuemart.ru/viewtopic.php?f=6&t=450. Тока есть косячки :(... Придется еще дорабатывать модуль доставки и корзины. И еще не проверил как оплата работает...
Может кто подскажет как сделать что-бы етот хак не делил начальную цену на курс, а умножал??
*

ipdesign

  • Осваиваюсь на форуме
  • 30
  • 1 / 0
Я правильно понял, мануал XDX будет работать и на VirtueMart 1.1.2
*

ipdesign

  • Осваиваюсь на форуме
  • 30
  • 1 / 0
Ребята подскажите пожалуйста что именно нужно сделать с пунктом №3? не пойму куда его вставлять? что именно заменять надо в этих двух функциях? Никак у меня не получается....Пожалуйста! В идеале бы полностью файл ps_currency.php посмотреть бы...

Цитировать
3)   Теперь нужно сделать так чтоб новая строка формы «Курс в рублях» брала значения из БД и если надо то редактировала, при апдэйте или создании новой валюты. Короче делаем её функциональной:
/administrator/components/com_VirtueMart/classes/ps_currency.php – ищем заветный код со словами Инсерт и Апдэйт.))
function add – в этой функции добавляем обработчик нового поля в таблице «Куренси» нашей БД. Заменяем похожее на это:
Код:

    $q = "INSERT INTO #__{vm}_currency (currency_name, currency_curs, currency_code)";
    $q .= " VALUES ('";
    $q .= $d["currency_name"] . "','";
    $q .= $d["currency_curs"] . "','";
    $q .= $d["currency_code"] . "')";

В функции function update делаем тоже самое:
Код:

    $q = "UPDATE #__{vm}_currency set ";
    $q .= "currency_name='" . $d["currency_name"];
    $q .= "',currency_curs='" . $d["currency_curs"]."' ";
    $q .= ",currency_code='" . $d["currency_code"]."' ";
    $q .= "WHERE currency_id='".$d["currency_id"]."'";

Заливаем файлы на сервер и обновляем станицу в админке. Вау! Круто! Теперь у нас на каждую валюту свой рублёвый множитель.

Задача и описание ситуации:
При возделывании магазина на ДJoomla 1.0.12 + VirtueMart RE 1.0.12 досталась база товаров цена которых в базе была в долларах. Так как Виртумарт одновалютный и не позволяет конвертировать валюту при выводе товаров на сайте в рублях, то пришлось залезть в /administrator/components/com_VirtueMart/classes/ps_product.php и в function show_price изменить строку
Код
$base_price = $base_price_info["product_price"];
на
Код
// Расчёт базовой цены по курсу 25руб за 1$
// $base_price = ($base_price_info["product_price"])*25;
Но это было тупое умножение цены товара на 25 и не позволяла клиенту менять курс по своему умотрению без моей помощи. Так что нужно было сделать чё нить другое, более полезное и удобное. Не вздумайте вставлять вышеописанный код, дочитайте до конца…))
Нужно было найти хак или модуль по конвертации с возможностью изменения курса на каждую валюту отдельно. Чего я так и не нашёл ни на одном из ворумов.

Сделал так и все получилось. только когда добавляешь товар в корзину появляется цена в ЕВРО, а не в рублях. Как исправить?

Нашел гадость, поправил, спасибо огромное то что надо!
А что за гадость, у меня тож VirtueMart 1.1.3, но что то не могу найти что не так???
*

Волька

  • Осваиваюсь на форуме
  • 36
  • 2 / 0
Ребята подскажите пожалуйста что именно нужно сделать с пунктом №3? не пойму куда его вставлять? что именно заменять надо в этих двух функциях? Никак у меня не получается....Пожалуйста! В идеале бы полностью файл ps_currency.php посмотреть бы...


Актуален ещё вопрос?
У меня всё получилось - могу поделиться скромным опытом!  yes!
А вообще - БРАВО XDX  :D
*

Волька

  • Осваиваюсь на форуме
  • 36
  • 2 / 0
 !
Хак прекрасный.
Но выскочил недочёт.
Если в списке свойств добавить разные цены в зависимости от свойства, то при покупке цена указывается в рублях без пересчёта по курсу, т.е. в этом случае получается, что курс = 1.  >:(

Пример: Базовую цену указываем в ЕВРО (пусть будет "5"). В списке дополнительный свойств указываем для синего цвета "7". Курс ЕВРО вводим 45,00.
При совершении покупки покупатель видит пересчитанную в рубли базовую цену (225,00 руб.), но если хочет купить товар синего цвета, то цена указана неправильно - 7 руб. (не умножается на курс).

Помогите решить! Где копать? !
« Последнее редактирование: 19.08.2009, 17:29:44 от Волька »
*

livsi

  • Осваиваюсь на форуме
  • 12
  • 1 / 0
Стандартным местом конвертации валют в VirtueMart 1.1.3 является файл конвертации /administrator/components/com_virtuemart/classes/currency/convertECB.php

Именно на него есть поле выбора в админке: Настройки->Вкладка Общие настройки -> Подраздел Дополнительные настройки -> селект Выберите модуль конвертора валют. Так что и менять логичнее именно в нем а не в ps_currency.php.

Скрипт для парсинга берем на сайте ЦБ (http://www.cbr.ru/scripts/Root.asp?Prtid=SXML) -- usd_cbr_php.zip, и переделываем по образцу конвертера валют от convertECB.php (This class uses the currency rates provided by an XML file from the European Central Bank)

Сам сейчас над этим работаю, напишу - залью для сообщества.

Если кто то задачку быстрее решит или уже решал - отпишитесь.

Есть и коммерческое (совсем не дорогое) решение, сам не пробовал, но в ходе поисков нашел: http://www.safegadget.ru/shop/vm_curr_converter.html. Стоит 150.00 руб.
« Последнее редактирование: 19.08.2009, 20:31:17 от livsi »
*

Волька

  • Осваиваюсь на форуме
  • 36
  • 2 / 0
Стандартным местом конвертации валют в VirtueMart 1.1.3 является файл конвертации /administrator/components/com_virtuemart/classes/currency/convertECB.php

Именно на него есть поле выбора в админке: Настройки->Вкладка Общие настройки -> Подраздел Дополнительные настройки -> селект Выберите модуль конвертора валют. Так что и менять логичнее именно в нем а не в ps_currency.php.

Скрипт для парсинга берем на сайте ЦБ (http://www.cbr.ru/scripts/Root.asp?Prtid=SXML) -- usd_cbr_php.zip, и переделываем по образцу конвертера валют от convertECB.php (This class uses the currency rates provided by an XML file from the European Central Bank)

Сам сейчас над этим работаю, напишу - залью для сообщества.

Если кто то задачку быстрее решит или уже решал - отпишитесь.

Есть и коммерческое (совсем не дорогое) решение, сам не пробовал, но в ходе поисков нашел: http://www.safegadget.ru/shop/vm_curr_converter.html. Стоит 150.00 руб.

Спасибо огромное за ответ!
Проблема в том, что у меня стоит версия VirtueMart семейства 1.0 и файла convertECB.php просто не существует.
Как быть?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Сравнения товара в VM 1.1.X

Автор Bear

Ответов: 464
Просмотров: 77367
Последний ответ 17.06.2016, 10:44:50
от uralmas
[Решено] Невидимая регистрация ( Покупка без регистрации ) V1.1.3

Автор urodoff

Ответов: 319
Просмотров: 105255
Последний ответ 27.10.2014, 15:27:02
от gaalferov
[Решено] Отобразить кол-во товаров из всех подкатегорий V1.1.3

Автор bazic

Ответов: 19
Просмотров: 12510
Последний ответ 18.09.2014, 06:39:33
от fila61
[Решено] Добавление Watermark к фото товара V1.0.15 V1.1.3

Автор mickymouse

Ответов: 52
Просмотров: 21267
Последний ответ 13.06.2013, 01:04:46
от richman
[Решено] Как изменить ,товаров в наличии 1 на "есть в наличии" V1.0.15 V1.1.3

Автор ButuzOFF

Ответов: 93
Просмотров: 39067
Последний ответ 17.05.2013, 21:10:44
от sa1981