Не работает переключение валюты.

Тема в разделе "OpenCart", создана пользователем karavan, 10 янв 2015.

  1. karavan

    karavan

    Регистрация:
    4 дек 2014
    Сообщения:
    8
    Симпатии:
    1
    Версия Opencart 2.0.1.1
    В магазине есть три валюты (р., $, €), при попытке переключить происходит загрузка корневой страницы, даже если находился где-то в категориях или товаре, но валюта остается неизменной.
    А так-же она не меняется после смены дефолтной для магазина, только через чистку кукисов.
    Подскажите куда копать.
    P.S.: В логах тихо.
     
  2. karavan

    karavan

    Регистрация:
    4 дек 2014
    Сообщения:
    8
    Симпатии:
    1
    Провел эксперимент.
    В соседней директории развернул оригинальный (без каких-либо изменений) opencart 2.0.1.1, заменил только файлы config.php, соответственно web-сервер переключил на новую директорию.
    В браузере вычистил кукисы, но проблема продолжила иметь место быть.

    P.S.: Возможно, что следующая инфа будет полезна для наведения меня на цель.
    Веб-сервером является связка nginx + php-fpm5.3.
    Пул php-fpm, обрабатывающий сайт, в чруте.
     
    Последнее редактирование: 10 янв 2015
  3. Bnopen

    Bnopen Команда форума

    Регистрация:
    3 мар 2013
    Сообщения:
    1.156
    Симпатии:
    514
    karavan, не может быть, чтобы в логах было пусто. Они точно пишутся?
     
  4. karavan

    karavan

    Регистрация:
    4 дек 2014
    Сообщения:
    8
    Симпатии:
    1
    Bnopen, да, причем пишутся двумя независимыми регистраторами - пул php-fpm пишет к себе, а ядро опенкарта к себе.
    Если ни у кого мыслей нет, то буду ковырять настройки php.ini, возможно там чего перекрутил.
     
  5. karavan

    karavan

    Регистрация:
    4 дек 2014
    Сообщения:
    8
    Симпатии:
    1
    Более-менее стало проясняться после вывода phpinfo().
    Обнаружено следующее:
    При первом входе на страницу магазина (или после чистки печенек) переменной $_COOKIE["currency"] присваивается значение равное валюте указанной в настройках локализации магазина.
    Далее, вне зависимости от желания переключиться на другую валюту, установленной валютой всегда будет та, которую браузер достанет из куки.
    Задачей для меня соит следующее: умолчательной валютой для магазина должен быть доллар, тк. почти весь товар закупается за зеленую бумагу, для некоторых товаров умолчательной валютой должен быть евро, но дефолтной валютой для покупателей необходим рубль, т.к. покупатели исключительно из России.
    Поисковики оказались немногословны на этот счет, удалось найти всего одно решение:
    а именно заменить в system/library/currency.php начальный код
    PHP:
    if (isset($this->request->get['currency']) && (array_key_exists($this->request->get['currency'], $this->currencies))) {
                            
    $this->set($this->request->get['currency']);
                    } elseif ((isset(
    $this->session->data['currency'])) && (array_key_exists($this->session->data['currency'], $this->currencies))) {
                            
    $this->set($this->session->data['currency']);
                    } elseif ((isset(
    $this->request->cookie['currency'])) && (array_key_exists($this->request->cookie['currency'], $this->currencies))) {
                            
    $this->set($this->request->cookie['currency']);
                    } else {
                            
    $this->set($this->config->get('config_currency'));
                    }
    на следующий фрагмент
    PHP:
    if (isset($this->request->get['currency']) && (array_key_exists($this->request->get['currency'], $this->currencies))) {
         
    $this->set($this->request->get['currency']);
       } elseif ((isset(
    $this->session->data['currency'])) && (array_key_exists($this->session->data['currency'], $this->currencies))) {
        
    $this->set($this->session->data['currency']);
       } elseif ((isset(
    $this->request->cookie['currency'])) && (array_key_exists($this->request->cookie['currency'], $this->currencies))) {
        
    $this->set($this->request->cookie['currency']);
       } else {
        if (
    $this->has('RUB')) {
                 
    $this->set('RUB');
        } else {
                 
    $this->set($this->config->get('config_currency'));
        }
       }
    Но этот финт не смог помочь в переопределении $_COOKIE["currency"], переключение валют все так-же не работает.
    А так-же обнаружил еще один баг, при добавлении товара указывается только стоимость без значения валюты (она берется из дефолтной магазина). И в случае вышеупомянутого указания валюты отличной от дефолтной магазина с помощью замены кода, стоимость товара не пересчитывается относительно курса, происходит только смена значка валюты. Был товар 335$, после чистки печенек стал 335р.

    Вроде бы как уже есть все вводные для решения задачи, но я еще слабо ориентируюсь в PHP, и возможно для кого-то очевидный ответ для меня все еще в тумане.
    Прошу помощи.
    --- Добавлено, 16 янв 2015 ---
    P.S.: Строка http://site.ru/&currency=RUB работает без проблем
    --- Добавлено, 16 янв 2015 ---
    Моя невнимательность всему виной, после смены дефолтной валюты в настройках магазина, постоянно забываю обновить курс валют в локализациях. Вот бы это начало работать автоматически.
    --- Добавлено, 16 янв 2015 ---
    Наконец-то я добрался до файлика отвечающего за вывод меню переключения валют.
    Что-то не могу воткнуть... Где в нем описываются ссылки на действие "выбор валюты"?
    PHP:
    <?php if (count($currencies) > 1) { ?>
    <div class="pull-left">
    <form action="<?php echo $action?>" method="post" enctype="multipart/form-data" id="currency">
      <div class="btn-group">
        <button class="btn btn-link dropdown-toggle" data-toggle="dropdown">
        <?php foreach ($currencies as $currency) { ?>
        <?php if ($currency['symbol_left'] && $currency['code'] == $code) { ?>
        <strong><?php echo $currency['symbol_left']; ?></strong>
        <?php } elseif ($currency['symbol_right'] && $currency['code'] == $code) { ?>
        <strong><?php echo $currency['symbol_right']; ?></strong>
        <?php ?>
        <?php ?>
        <span class="hidden-xs hidden-sm hidden-md"><?php echo $text_currency?></span> <i class="fa fa-caret-down"></i></button>
        <ul class="dropdown-menu">
          <?php foreach ($currencies as $currency) { ?>
          <?php if ($currency['symbol_left']) { ?>
          <li><button class="currency-select btn btn-link btn-block" type="button" name="<?php echo $currency['code']; ?>"><?php echo $currency['symbol_left']; ?>
          <?php } else { ?>
          <li><button class="currency-select btn btn-link btn-block" type="button" name="<?php echo $currency['code']; ?>"><?php echo $currency['symbol_right']; ?
          <?
    php ?>
          <?php ?>
        </ul>
      </div>
      <input type="hidden" name="code" value="" />
      <input type="hidden" name="redirect" value="<?php echo $redirect?>" />
    </form>
    </div>
    <?php ?>
     
  6. karavan

    karavan

    Регистрация:
    4 дек 2014
    Сообщения:
    8
    Симпатии:
    1
    Тему можно закрыть.
    Всему виной были лишние строчки в конфиге nginx, случайно попали из конфига вордпресс.