Joomla 1.5 Типа компонент для изменения курсов валют

Тема в разделе "Магазины, электронная коммерция", создана пользователем icydrago, 16.10.2009.

  1. Offline

    icydrago Недавно здесь

    Регистрация:
    15.10.2009
    Сообщения:
    9
    Симпатии:
    1
    Пол:
    Мужской
    1. изменил строку 29 в файле /administrator/components/com_virtuemart/classes/currency/convertECB.php на:
    Код (PHP):
    1. var $document_address = 'http://<ваш_сайт>/administrator/components/com_currency/currency.xml';


    2. добавил в конец файла /administrator/components/com_virtuemart/
    html/admin.curr_list.php строку:
    Код (PHP):
    1. <br /><br /><a href="index.php?option=com_currency">Управление курсами валют</a>


    3. в директории /administrator/components/com_currency/ создал следующие файлы:
    index.html
    currency.xml
    Код (PHP):
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">
    3.     <gesmes:subject>Reference rates</gesmes:subject>
    4.     <gesmes:Sender>
    5.         <gesmes:name>European Central Bank</gesmes:name>
    6.     </gesmes:Sender>
    7.     <Cube>
    8.         <Cube time='2111-11-11'>
    9.             <Cube currency='USD' rate='1.51'/>
    10.             <Cube currency='EUR' rate='1'/>
    11.             <Cube currency='BYR' rate='4150'/>
    12.         </Cube>
    13.     </Cube>
    14. </gesmes:Envelope>

    admin.currency.php
    Код (PHP):
    1. <?
    2. defined( '_JEXEC' ) or die( 'Restricted access' );
    3. switch ( JRequest::getCmd('task'))
    4. {
    5.     case 'setrates' :
    6.  
    7.     $newcontent = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
    8. <gesmes:Envelope xmlns:gesmes=\"\" xmlns=\"\">
    9.     <gesmes:subject>Reference rates</gesmes:subject>
    10.     <gesmes:Sender>
    11.         <gesmes:name>European Central Bank</gesmes:name>
    12.     </gesmes:Sender>
    13.     <Cube>
    14.         <Cube time='2009-06-01'>
    15.             <Cube currency='EUR' rate='".$_POST["eur_rate"]."'/>
    16.             <Cube currency='USD' rate='".$_POST["usd_rate"]."'/>
    17.             <Cube currency='BYR' rate='".$_POST["byr_rate"]."'/>
    18.         </Cube>
    19.     </Cube>
    20. </gesmes:Envelope>";
    21.     $filename = "components/com_currency/currency.xml";
    22.     if (is_writable($filename)) {
    23.         if (!$handle = fopen($filename, 'w+')) {
    24.              echo "Не могу открыть файл ($filename)";
    25.              exit;
    26.         }
    27.         if (fwrite($handle, $newcontent) === FALSE) {
    28.             echo "Не могу произвести запись в файл ($filename)";
    29.             exit;
    30.         }
    31.        fclose($handle);
    32.     } else {
    33.         echo "Файл $filename недоступен для записи"; exit;
    34.     }
    35.     @unlink ("../cache/daily.xml");
    36.     echo "<script language=\"JavaScript\" type=\"text/javascript\">
    37.          location.replace('index.php?pshop_mode=admin&page=admin.curr_list&option=com_virtuemart');
    38. </script>";
    39.     break;
    40.     default :
    41.     // загрузка XML документа
    42.     $dom = new DomDocument();
    43.     $dom->load('http://<ваш_сайт>/administrator/components/com_currency/currency.xml');
    44.     $items = $dom->getElementsByTagName("Cube");
    45.     foreach ($items as $node)
    46.     {
    47.       $_currency = $node->getAttribute("currency");
    48.       $_rate = $node->getAttribute("rate");
    49.       if($_currency == "USD")                           // загрузка курса доллара
    50.       {
    51.         $usd_rate = $_rate;
    52.       }
    53.       if($_currency == "EUR")                           // загрузка курса евро
    54.       {
    55.         $eur_rate = $_rate;
    56.       }
    57.       if($_currency == "BYR")                           // загрузка курса евро
    58.       {
    59.         $byr_rate = $_rate;
    60.       }
    61.     }
    62. ?>
    63. <form action="index.php?option=com_currency&task=setrates" method="post">
    64.     <table>
    65.         <tr>
    66.         <tr>
    67.             <td>Евро (EUR)</td>
    68.             <td><input name="eur_rate" value="<?php echo $eur_rate; ?>"/></td>
    69.         </tr>
    70.             <td>Американский доллар (USD)</td>
    71.             <td><input name="usd_rate" value="<?php echo $usd_rate; ?>"/></td>
    72.         </tr>
    73.         <tr>
    74.             <td>Белорусский рубль (BYR)</td>
    75.             <td><input name="byr_rate" value="<?php echo $byr_rate; ?>"/></td>
    76.         </tr>
    77.         <tr>
    78.             <td colspan="2">
    79.                 <input type="submit" value="Установить курсы"/>
    80.             </td>
    81.         </tr>
    82.     </table>
    83. </form>
    84. <?
    85.         break;
    86. }



    Установив mod_virtuemart_currencies_1.1.3.j15.zip Теперь работает переключение валюты, изменение валюты в админке. При чём вроде хорошо работает.

    Гуру, подскажите, нормально ли с точки зрения безопасности это сделано?
     
    varakuta нравится это.
  2.  
  3. Offline

    icydrago Недавно здесь

    Регистрация:
    15.10.2009
    Сообщения:
    9
    Симпатии:
    1
    Пол:
    Мужской
    Вот переписал файлик admin.currency.php.
    Теперь оно берёт все валюты из базы данных ВМ. Можно использовать с любой валютой! и в код не надо лезть!
    В файлик currency.xml не нужно обязательно прописывать имеющиеся валюты, оно само пропишет.
    Содержимое admin.currency.php
    Код (PHP):
    1. <?
    2. defined( '_JEXEC' ) or die( 'Restricted access' );
    3. switch ( JRequest::getCmd('task'))
    4. {
    5.     case 'setrates' :
    6.  
    7.     $newcontent = '<?xml version="1.0" encoding="UTF-8"?>
    8. <gesmes:Envelope xmlns:gesmes="" xmlns="">
    9.     <gesmes:subject>Reference rates</gesmes:subject>
    10.     <gesmes:Sender>
    11.         <gesmes:name>European Central Bank</gesmes:name>
    12.     </gesmes:Sender>
    13.     <Cube>
    14.         <Cube time=\'2009-06-01\'>
    15. ';
    16.         foreach ($_POST["rates"] as $_curency => $_rate)
    17.         {
    18.             $newcontent.="<Cube currency='".$_curency."' rate='".$_rate."'/>
    19. ";
    20.  
    21.         }
    22.         $newcontent.="</Cube>
    23.     </Cube>
    24. </gesmes:Envelope>";
    25.     $filename = "components/com_currency/currency.xml";
    26.     if (is_writable($filename)) {
    27.         if (!$handle = fopen($filename, 'w+')) {
    28.              echo "Не могу открыть файл ($filename)";
    29.              exit;
    30.         }
    31.         if (fwrite($handle, $newcontent) === FALSE) {
    32.             echo "Не могу произвести запись в файл ($filename)";
    33.             exit;
    34.         }
    35.        fclose($handle);
    36.     } else {
    37.         echo "Файл $filename недоступен для записи"; exit;
    38.     }
    39.     @unlink ("../cache/daily.xml");
    40.     echo "<script language=\"JavaScript\" type=\"text/javascript\">
    41.          location.replace('index.php?pshop_mode=admin&page=admin.curr_list&option=com_virtuemart');
    42. </script>";
    43.     break;
    44.     default :
    45.     // загрузка XML документа
    46.     $dom = new DomDocument();
    47.     $dom->load('http://<ВАШ_САЙТ>/joomla/administrator/components/com_currency/currency.xml');
    48.     $items = $dom->getElementsByTagName("Cube");
    49.     foreach ($items as $node)
    50.     {
    51.       $_currency = $node->getAttribute("currency");
    52.       $_rate = $node->getAttribute("rate");
    53.       if ($_currency)
    54.       {
    55.         $_rates[$_currency]=$_rate;
    56.       }
    57.     }
    58.     // Load the virtuemart main parse code
    59.     require_once( JPATH_SITE.'/components/com_virtuemart/virtuemart_parser.php' );
    60.     $db = new ps_DB();
    61.     $db->query( 'SELECT currency_id, currency_code, currency_name FROM `#__{vm}_currency` ORDER BY `currency_name`' );
    62.     while( $db->next_record())
    63.     {
    64.         $db_currencies[$db->f('currency_code')] = $db->f('currency_name');
    65.     }
    66.     echo '<form action="index.php?option=com_currency&task=setrates" method="post">
    67.    <table>
    68.    <tr>
    69.         <td>Название валюты</td>
    70.         <td>Код</td>
    71.         <td>Курс</td>
    72.    </tr>';
    73.     foreach ($db_currencies as $db_code => $db_currencyname)
    74.     {
    75.         echo'<tr>
    76.             <td>'.$db_currencyname.'</td>
    77.             <td>'.$db_code.'</td>
    78.             <td><input name="rates['.$db_code.']" value="'.$_rates[$db_code].'"/></td>
    79.        </tr>';
    80.     }
    81.     echo '<tr>
    82.            <td colspan="3">
    83.                <input type="submit" value="Установить курсы"/>
    84.            </td>
    85.        </tr>
    86.    </table>
    87. </form>';
    88.  
    89.         break;
    90. }
     
  4. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 356
    Симпатии:
    370
    Пол:
    Мужской
    Т.е. это для ручного ввода курсов?
     
  5. Offline

    icydrago Недавно здесь

    Регистрация:
    15.10.2009
    Сообщения:
    9
    Симпатии:
    1
    Пол:
    Мужской
    Угу. Сначала забиваешь в сам ВМ валюты, а потом появляется таблица, где вводишь курсы к этим валютам.
    Исправил 1 строчку. Теперь не надо править файл admin.currency.php перед заливкой на сервер:
    Код (PHP):
    1. <?
    2. defined( '_JEXEC' ) or die( 'Restricted access' );
    3. switch ( JRequest::getCmd('task'))
    4. {
    5.     case 'setrates' :
    6.  
    7.     $newcontent = '<?xml version="1.0" encoding="UTF-8"?>
    8. <gesmes:Envelope xmlns:gesmes="" xmlns="">
    9.     <gesmes:subject>Reference rates</gesmes:subject>
    10.     <gesmes:Sender>
    11.         <gesmes:name>European Central Bank</gesmes:name>
    12.     </gesmes:Sender>
    13.     <Cube>
    14.         <Cube time=\'2009-06-01\'>
    15. ';
    16.         foreach ($_POST["rates"] as $_curency => $_rate)
    17.         {
    18.             $newcontent.="<Cube currency='".$_curency."' rate='".$_rate."'/>
    19. ";
    20.  
    21.         }
    22.         $newcontent.="</Cube>
    23.     </Cube>
    24. </gesmes:Envelope>";
    25.     $filename = "components/com_currency/currency.xml";
    26.     if (is_writable($filename)) {
    27.         if (!$handle = fopen($filename, 'w+')) {
    28.              echo "Не могу открыть файл ($filename)";
    29.              exit;
    30.         }
    31.         if (fwrite($handle, $newcontent) === FALSE) {
    32.             echo "Не могу произвести запись в файл ($filename)";
    33.             exit;
    34.         }
    35.        fclose($handle);
    36.     } else {
    37.         echo "Файл $filename недоступен для записи"; exit;
    38.     }
    39.     @unlink ("../cache/daily.xml");
    40.     echo "<script language=\"JavaScript\" type=\"text/javascript\">
    41.          location.replace('index.php?pshop_mode=admin&page=admin.curr_list&option=com_virtuemart');
    42. </script>";
    43.     break;
    44.     default :
    45.     // загрузка XML документа
    46.     $dom = new DomDocument();
    47.     $dom->load(JPATH_SITE.'/administrator/components/com_currency/currency.xml');
    48.     $items = $dom->getElementsByTagName("Cube");
    49.     foreach ($items as $node)
    50.     {
    51.       $_currency = $node->getAttribute("currency");
    52.       $_rate = $node->getAttribute("rate");
    53.       if ($_currency)
    54.       {
    55.         $_rates[$_currency]=$_rate;
    56.       }
    57.     }
    58.     // Load the virtuemart main parse code
    59.     require_once( JPATH_SITE.'/components/com_virtuemart/virtuemart_parser.php' );
    60.     $db = new ps_DB();
    61.     $db->query( 'SELECT currency_id, currency_code, currency_name FROM `#__{vm}_currency` ORDER BY `currency_name`' );
    62.     while( $db->next_record())
    63.     {
    64.         $db_currencies[$db->f('currency_code')] = $db->f('currency_name');
    65.     }
    66.     echo '<form action="index.php?option=com_currency&task=setrates" method="post">
    67.    <table>
    68.    <tr>
    69.         <td>Название валюты</td>
    70.         <td>Код</td>
    71.         <td>Курс</td>
    72.    </tr>';
    73.     foreach ($db_currencies as $db_code => $db_currencyname)
    74.     {
    75.         echo'<tr>
    76.             <td>'.$db_currencyname.'</td>
    77.             <td>'.$db_code.'</td>
    78.             <td><input name="rates['.$db_code.']" value="'.$_rates[$db_code].'"/></td>
    79.        </tr>';
    80.     }
    81.     echo '<tr>
    82.            <td colspan="3">
    83.                <input type="submit" value="Установить курсы"/>
    84.            </td>
    85.        </tr>
    86.    </table>
    87. </form>';
    88.  
    89.         break;
    90. }
     
  6. Offline

    Sanya_R Недавно здесь

    Регистрация:
    30.10.2009
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    Спасибо за рабочее решение проблемы!!! [!]
    P.S. Для простых обывателей можно выкладывать уже отредактированные файлы для замены с указанием в каких папках менять.
     
    Последнее редактирование: 30.10.2009
  7. Offline

    icydrago Недавно здесь

    Регистрация:
    15.10.2009
    Сообщения:
    9
    Симпатии:
    1
    Пол:
    Мужской
    Пожалуйста! Сам с такой проблемой столкнулся =)
    Ну просто лень было слегка... Да и так не сложно сделать =)
     
  8. Offline

    dima2000 Недавно здесь

    Регистрация:
    11.03.2009
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    Огромное спасибо, сколько времени ищу такое решение и ничего, а тут случайно наткнулся на этот топик и чудо , все просто и понятно и главное работает !!!! [!] Респект вообщем человеку !
     
  9. Offline

    dima2000 Недавно здесь

    Регистрация:
    11.03.2009
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    Обнаружил одну досадную ошибку, при оформлении покупки неправильно считает стоимость доставки. Как бы поправить, а то из-за этого пришлось пока отключить столь нужный модуль.
     
  10. Offline

    icydrago Недавно здесь

    Регистрация:
    15.10.2009
    Сообщения:
    9
    Симпатии:
    1
    Пол:
    Мужской
    Ну я доставкой не пользуюсь, поэтому и не проверял. Вообще, вышеописанныфй скрипт только подставляет вместо курсов валют какого-то банка, курсы валют введённые вручную. Поэтому надо искать ошибку в самом модуле доставки. Возможно, поможет установка последней версии виртуемарта, если у вас не последняя. Могу попытаться посмотреть, в чём дело. Опишите подробнее проблему.
     
  11. Offline

    dima2000 Недавно здесь

    Регистрация:
    11.03.2009
    Сообщения:
    11
    Симпатии:
    0
    Пол:
    Мужской
    попробую расписать подробно
    Virt обновил до 1.1.4 (самая последняя)
    Модуль доставки включен только Standard Shipping Module
    В тарифах доставки стоят 2 варианта (доставка курьером - 2 уе) и забирают сами 0 уе.
    При покупке все хорошо, только когда в корзине считает доставку, ее пересчитывает непонятно вообще по какому курсу.

    Flash MP3\MP4 iRiver E-150 8GB Black 11191 284 280 руб 284 280 руб
    Промежуточный итог : 284 280 руб
    Стоимость доставки и плата за отгрузку : 15 235 200 руб
    Налог на стоимость заказа : 0 руб
    Итого: 15 519 480 руб

    Вот о чем я вообще говорю
     
  12. Offline

    icydrago Недавно здесь

    Регистрация:
    15.10.2009
    Сообщения:
    9
    Симпатии:
    1
    Пол:
    Мужской
    Хм... действительно странно =) Весёлая сумма =)
    Ну я чуть позже посмотрю. Я сейчас очень занят в последнее время...
     
  13. Offline

    dsnicron Недавно здесь

    Регистрация:
    19.02.2010
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    Доброго времени суток! Я надеюсь что Вы еще помните решение этой задачки, и прошу Вас помочь в решении такого вопроса: Сделал все как описано выше, все работает кроме одного: забиваю курсы, но они отображаются некорректно. Основная валюта гривна, если поменять на евро, сумма не меняеться, на доллар и рубль, суммы тоже неправильные. У меня Joomla 1.5.15 + VM 1.1.4
    Я просто уже запутался где что есть(
    Благодарю!!!
     
  14. Offline

    icydrago Недавно здесь

    Регистрация:
    15.10.2009
    Сообщения:
    9
    Симпатии:
    1
    Пол:
    Мужской
    Не могу дать точного ответа, но думаю это из-за курсов. У основной валюты должен стоять коэффициент 1. У всех остальных - относительно основной валюты. Основная валюта устанавливается в настройках.
     
  15. Offline

    BoBaNNNN Недавно здесь

    Регистрация:
    14.08.2009
    Сообщения:
    3
    Симпатии:
    0
    Пол:
    Мужской
    Хороший модуль, спасибо.
    Но со стоимостью доставки проблемы((
    почему то не конвертирует стоимость доставки.
    У меня доставка указана в долларах, 2$
    При выборе бел. рубля доставка стоимость доставки становится =2 рубля
     
    Последнее редактирование: 25.05.2010
  16. Offline

    BoBaNNNN Недавно здесь

    Регистрация:
    14.08.2009
    Сообщения:
    3
    Симпатии:
    0
    Пол:
    Мужской
    разобрался с ошибкой. Сам модифицировал модуль доставки, и забыл уже про это....
    Вопрос вот в чём. Можно ли сделать, что бы для разных валют было разное Количество разрядов и Десятичный разделитель?
    так, к долларам мне нужно 2 разряда, а к бел. рублям - 0.
     
  17. Offline

    terr Недавно здесь

    Регистрация:
    11.03.2009
    Сообщения:
    52
    Симпатии:
    0
    Пол:
    Мужской
    Автор хака памагииии
    все зделал как у тебя написано в админке когда заходиш в меню курс валют , выдает

    Код (CODE):
    1. Warning: DOMDocument::load() [domdocument.load]: xmlns:gesmes: Empty XML namespace is not allowed in /home/u8910/new.tehnoural.ru/www/administrator/components/com_currency/currency.xml, line: 2 in /home/u8910/new.tehnoural.ru/www/administrator/components/com_currency/admin.currency.php on line 47
    2.  
    3. Warning: DOMDocument::load() [domdocument.load]: Namespace prefix gesmes on Envelope is not defined in /home/u8910/new.tehnoural.ru/www/administrator/components/com_currency/currency.xml, line: 2 in /home/u8910/new.tehnoural.ru/www/administrator/components/com_currency/admin.currency.php on line 47
    4.  
    5. Warning: DOMDocument::load() [domdocument.load]: Namespace prefix gesmes on subject is not defined in /home/u8910/new.tehnoural.ru/www/administrator/components/com_currency/currency.xml, line: 3 in /home/u8910/new.tehnoural.ru/www/administrator/components/com_currency/admin.currency.php on line 47
    6.  
    7. Warning: DOMDocument::load() [domdocument.load]: Namespace prefix gesmes on Sender is not defined in /home/u8910/new.tehnoural.ru/www/administrator/components/com_currency/currency.xml, line: 4 in /home/u8910/new.tehnoural.ru/www/administrator/components/com_currency/admin.currency.php on line 47
    8.  
    9. Warning: DOMDocument::load() [domdocument.load]: Namespace prefix gesmes on name is not defined in /home/u8910/new.tehnoural.ru/www/administrator/components/com_currency/currency.xml, line: 5 in /home/u8910/new.tehnoural.ru/www/administrator/components/com_currency/admin.currency.php on line 47


    На сайте пишет

    Что я сделал не так????

    Index.html пустой веть идет или туда что то писать нада?

    добавил в компонент
    Код (CODE):
    1. <gesmes:Envelope xmlns:gesmes="http://www.gesmes.org/xml/2002-08-01" xmlns="http://www.ecb.int/vocabulary/2002-08-01/eurofxref">


    Ошибки ушли

    Поставил 1 евро стоит 42.98 но на сайте попрежнему ничего не конвертируется и пишется ошибка

    Есть ктонить?
     
    Последнее редактирование: 09.11.2010
  18. Offline

    MixaJI Недавно здесь

    Регистрация:
    25.06.2010
    Сообщения:
    3
    Симпатии:
    0
    Пол:
    Мужской
    У меня поле при нажатии на кнопку Сохранить курсы видает:
    Файл _http://moysayt/eurofxref-daily.xml недоступен для записи,
    даже пробовал на файл eurofxref-daily.xml ставить атрибут 0777
    результат тот же, в чём грабли? хелп
     
    Последнее редактирование: 16.11.2010
  19. Offline

    MixaJI Недавно здесь

    Регистрация:
    25.06.2010
    Сообщения:
    3
    Симпатии:
    0
    Пол:
    Мужской
    Есть тут кто жывой, подскажыте в каком направлении копать а то уже голову сломал :'(
     
  20. Offline

    Speede Недавно здесь

    Регистрация:
    26.11.2010
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    MixaJI, а почему у вас файл лежит в http://moysayt/eurofxref-daily.xml ? на сколькоя понимаю он должен лежать по адресу /administrator/components/com_currency/ или я не прав?
     
  21. Offline

    icydrago Недавно здесь

    Регистрация:
    15.10.2009
    Сообщения:
    9
    Симпатии:
    1
    Пол:
    Мужской
    Кстати, да. Если путь не меняли в скрипте.
     

Поделиться этой страницей

Загрузка...