[Решено] Своя валюта для каждой группы покупателей

Тема в разделе "OpenCart", создана пользователем zek24, 2 авг 2013.

  1. zek24

    zek24

    Регистрация:
    10 ноя 2012
    Сообщения:
    162
    Симпатии:
    23
    Привет, ОК1551+
    В магазине каждому покупателю, в зависимости от группы, требуется отображать стоимость в соответствующей валюте.
    group1 - euro
    group2 - usd
    group3 - rub
    default и unreg - uah
    Счет так же должен формироваться в "валюте группы".
    Все что смог - это настроить вывод всех валют для всех групп, но это не то...
    Подскажите, куда копать
     
  2. BartyHan

    BartyHan

    Регистрация:
    22 мар 2013
    Сообщения:
    11
    Симпатии:
    8
    Необходимо проверять к какой группе принадлежит пользователь, вроде функция $this->customer->getCustomerGroupId(); это с успехом делает, а функция $this->currency->set('КОД_ВАЛЮТЫ'); спокойно выставляет нужную Вам валюту.
    Необходимо просмотреть system/library/customer.php и system/library/currency.php и добавить эти самые проверки.
     
    zek24 нравится это.
  3. zek24

    zek24

    Регистрация:
    10 ноя 2012
    Сообщения:
    162
    Симпатии:
    23
    Подскажи, если не сложно, подробнее.
    Вчера изменил фунцию
    PHP:
       public function getId($currency '') {
        if(
    $this->customer->getCustomerGroupId() <= 1){

            
    $this->currency->set(1);

        }
          }
    где группа 1 - это просто зарегистрировавшиеся. Им, как и незарегистрировавшимся отдаем цены в валюте 1. Для остальных групп валюта 2.
    И поначалу работало. Для групп 2-5 - было в УЕ (2), для незарегиных в грн(1), но для просто зарегистрировавшихся (группа1) то же выдавало УЕ, хотя подразумевались грн.
    Начал экспериментировать и пришел к тому, что теперь всем показывает в валюте по умолчанию (УЕ).
    Подскажи,если не сложно, куда вставить код?
     
  4. kur1977

    kur1977

    Регистрация:
    11 фев 2013
    Сообщения:
    123
    Симпатии:
    59
    $this->currency->set(1); - Неверно. Функции нужно передать строку, содержащую буквенный код валюты
     
    zek24 нравится это.
  5. zek24

    zek24

    Регистрация:
    10 ноя 2012
    Сообщения:
    162
    Симпатии:
    23
    То, что что-то неверно видно и так))
    Интересует как верно...
    ООП только начал изучать - не скоро сам дойду.
     
  6. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    например так
    PHP:
    $this->currency->set('USD');
    ето для доларов
     
    zek24 нравится это.
  7. zek24

    zek24

    Регистрация:
    10 ноя 2012
    Сообщения:
    162
    Симпатии:
    23
    теперь понял, подумал что нужно использовать ID и на этом зациклился (хотя вчера, вроде как, вставлял цифру и работало)...
    Но все равно, код
    PHP:
    if($this->customer->getCustomerGroupId() <= 1){
     
            
    $this->currency->set("UAH");
     
        }
    побывал в разных методах, но так и не сработало.
    Можете подсказать, в какой метод это всунуть? (создать новый? заменить содержимое другого метода?)
     
  8. nix

    nix php, MySQL, UNIX, MikroTik ROSAPI

    Регистрация:
    16 янв 2013
    Сообщения:
    1.000
    Симпатии:
    889
    смотри system/library/currency.php
     
  9. zek24

    zek24

    Регистрация:
    10 ноя 2012
    Сообщения:
    162
    Симпатии:
    23
    Я про currency.php и писал, когда говорил, что вставлял код в разные методы - не помогает.
    Я и заменял и добавлял код к стандартным методам... Все никак.

    P.S. Все больше похоже на галлюцинацию вчерашнее удачное изменение валюты. Пропал аппетит, сон уже не тот. Заканчивается спиртное и сигареты. СОС
     
  10. kur1977

    kur1977

    Регистрация:
    11 фев 2013
    Сообщения:
    123
    Симпатии:
    59
    system\library\currency.php

    внутри метода _construct замени строку
    PHP:
    $this->set($this->config->get('config_currency'));
    на
    PHP:
    $this->customer$registry->get('customer');
    if(
    $this->customer->getCustomerGroupId() <= 1){
     
            
    $this->currency->set("UAH");
     
        }else{
    $this->set($this->config->get('config_currency'));
    }
    после этого почисть куки и проверяй
     
  11. zek24

    zek24

    Регистрация:
    10 ноя 2012
    Сообщения:
    162
    Симпатии:
    23
    выдает ошибку
    Notice: Undefined property: Currency::$currency in E:\OpenServer\domains\open.tt\system\library\currency.php on line 36
    Fatal error: Call to a member function set() on a non-object in E:\OpenServer\domains\open.tt\system\library\currency.php on line 36
    36строка - $this->currency->set("UAH");
     
  12. Baco

    Baco Антихронофаг Команда форума

    Регистрация:
    9 окт 2012
    Сообщения:
    648
    Симпатии:
    327
    $this->set("UAH");
     
    zek24 нравится это.
  13. zek24

    zek24

    Регистрация:
    10 ноя 2012
    Сообщения:
    162
    Симпатии:
    23
    ошибки уже нет, но все равно не работает.
    Если раньше у всех отображалась цена в USD (стоит по умолчанию), то сейчас заходил незарегистрированным, из default группы, из групп с ID 2,3 - у всех цены в UAH.
    Пробовал заменить
    PHP:
    else{
    $this->set($this->config->get('config_currency'));
    }
    на
    else{
    $this->set("USD");
    }
    не помогает
    сейчас заменено
    PHP:
     $this->set($this->config->get('config_currency'));

    на
    PHP:
     $this->customer$registry->get('customer');
    if(
    $this->customer->getCustomerGroupId() <= 1){
            
    $this->set("UAH");
       }else{
    $this->set($this->config->get('config_currency'));}
     
  14. kur1977

    kur1977

    Регистрация:
    11 фев 2013
    Сообщения:
    123
    Симпатии:
    59
    при тестировании не забывай чистить кукисы браузера. Иначе никаких изменений не увидишь!!!
     
  15. zek24

    zek24

    Регистрация:
    10 ноя 2012
    Сообщения:
    162
    Симпатии:
    23
    все чистится: куки(история), кеш вкмод, систем_кеш
     
  16. kur1977

    kur1977

    Регистрация:
    11 фев 2013
    Сообщения:
    123
    Симпатии:
    59
    Ну тогда так:
    В этом же файле
    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->customer$registry->get('customer');
    if(
    $this->customer->getCustomerGroupId() <= 1){
            
    $this->set("UAH");
       }else{
          
    $this->set($this->session->data['currency']);
    }
        } elseif ((isset(
    $this->request->cookie['currency'])) && (array_key_exists($this->request->cookie['currency'], $this->currencies))) {
     
    $this->customer$registry->get('customer');
    if(
    $this->customer->getCustomerGroupId() <= 1){
            
    $this->set("UAH");
       }else{
          
    $this->set($this->request->cookie['currency']);
    }
        } else {
     
    $this->customer$registry->get('customer');
    if(
    $this->customer->getCustomerGroupId() <= 1){
            
    $this->set("UAH");
       }else{
          
    $this->set($this->config->get('config_currency'));
    }
        }

    Я надеюсь валюта "Гривна" у тебя заведена в админке?
     
    zek24 нравится это.
  17. zek24

    zek24

    Регистрация:
    10 ноя 2012
    Сообщения:
    162
    Симпатии:
    23
    На сайте все в ГРН осталось.
    В админке ошибка - Fatal error: Call to a member function getCustomerGroupId() on a non-object in E:\OpenServer\domains\open.tt\system\library\currency.php on line 30
    На сайте сейчас, для простоты эксперимента оставил две валюты грн и уе
    [​IMG] currency_id title code symbol_left symbol_right decimal_place value status date_modified
    [​IMG] [​IMG] [​IMG] 2 US Dollar USD $ 2 1.00000000 1
    [​IMG] [​IMG] [​IMG] 1 Гривня UAH грн 2 8.12800026 1
    И пример покупателей
    [​IMG] customer_id store_id firstname lastname email telephone fax password salt cart wishlist newsletter address_id customer_group_id ip status approved token date_added
    [​IMG] [​IMG] [​IMG] 1 0 c1 c1 [email protected] 1111111 admin 12ab8b3dcdc45aa00b2cb5f1d946d1822b8b1554 49fbe23c8 a:0:{} 0 0 2 127.0.0.1 1 1 2013-07-31 09:34:17
    [​IMG] [​IMG] [​IMG] 2 0 c2 c2 [email protected] 2222222 admin 158e3f30ca241fcb9dfa5eacfb6e6b35e13e68bb 89fc3ad24 a:0:{} 0 0 3 127.0.0.1 1 0 2013-07-31 09:35:07
    [​IMG] [​IMG] [​IMG] 3 0 c3 c3 [email protected] 333333 admin 293fab2e23d7d88d836ede1787886e4163e8fa08 932504229 a:1:{i:28;i:1;} 0 0 4 127.0.0.1 1 0 2013-07-31 09:35:31
    [​IMG] [​IMG] [​IMG] 5 0 d1 d1 [email protected] 0000000 admin ccdcff5791c8d2b65d758bb360fffab9a5452baf 40e3bd46f a:0:{} 0 0 1 127.0.0.1 1 1 2013-08-02 15:58:20
    d1 - default (id=1)
    остальные с1 = id2, c2=id3...
     
  18. zek24

    zek24

    Регистрация:
    10 ноя 2012
    Сообщения:
    162
    Симпатии:
    23
    чувствую решение где-то близко.
    Уже начал плотно изучать ООП, но сам дойду, боюсь, не скоро.
    Еще уточню: валюта по умолчанию USD, выбор валют на сайте будет отключен (display:none либо убран из кода вообще).
    Давайте дожмем.
    ----------------------------
    Удалось решить смену валюты заменой
    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->customer$registry->get('customer');
    if(
    $this->customer->getCustomerGroupId() <= 1){
            
    $this->set("UAH");
      }else{
        [
    B]  $this->set("USD");[/B]
    }
        } elseif ((isset(
    $this->request->cookie['currency'])) && (array_key_exists($this->request->cookie['currency'], $this->currencies))) {
    $this->customer$registry->get('customer');
    if(
    $this->customer->getCustomerGroupId() <= 1){
            
    $this->set("UAH");
      }else{
          [
    B]$this->set("USD");[/B]
    }
        } else {
    $this->customer$registry->get('customer');
    if(
    $this->customer->getCustomerGroupId() <= 1){
            
    $this->set("UAH");
      }else{
         [
    B$this->set("USD");[/B]
    }
        }
    Уже радость переполняет)
    Но ошибка
    Код:
    Fatal error: Call to a member function getCustomerGroupId() on a non-object in E:\OpenServer\domains\open.tt\system\library\currency.php on line 30
    
    (30) if($this->customer->getCustomerGroupId() <= 1){
    так и не пропала в адмнике и не дает в ней работать...
     
  19. kur1977

    kur1977

    Регистрация:
    11 фев 2013
    Сообщения:
    123
    Симпатии:
    59
    Везде
    PHP:
    $this->customer->getCustomerGroupId() <= 1
    замени на
    PHP:
    $this->customer&&$this->customer->getCustomerGroupId() <= 1
     
    zek24 нравится это.
  20. zek24

    zek24

    Регистрация:
    10 ноя 2012
    Сообщения:
    162
    Симпатии:
    23
    Благодарствую, проблема решена.
    Дальше по аналогии уже пройдусь по остальным группам и валютам!
    Всем спасибо.