Привет, ОК1551+ В магазине каждому покупателю, в зависимости от группы, требуется отображать стоимость в соответствующей валюте. group1 - euro group2 - usd group3 - rub default и unreg - uah Счет так же должен формироваться в "валюте группы". Все что смог - это настроить вывод всех валют для всех групп, но это не то... Подскажите, куда копать
Необходимо проверять к какой группе принадлежит пользователь, вроде функция $this->customer->getCustomerGroupId(); это с успехом делает, а функция $this->currency->set('КОД_ВАЛЮТЫ'); спокойно выставляет нужную Вам валюту. Необходимо просмотреть system/library/customer.php и system/library/currency.php и добавить эти самые проверки.
Подскажи, если не сложно, подробнее. Вчера изменил фунцию PHP: public function getId($currency = '') { if($this->customer->getCustomerGroupId() <= 1){ $this->currency->set(1); } } где группа 1 - это просто зарегистрировавшиеся. Им, как и незарегистрировавшимся отдаем цены в валюте 1. Для остальных групп валюта 2. И поначалу работало. Для групп 2-5 - было в УЕ (2), для незарегиных в грн(1), но для просто зарегистрировавшихся (группа1) то же выдавало УЕ, хотя подразумевались грн. Начал экспериментировать и пришел к тому, что теперь всем показывает в валюте по умолчанию (УЕ). Подскажи,если не сложно, куда вставить код?
То, что что-то неверно видно и так)) Интересует как верно... ООП только начал изучать - не скоро сам дойду.
теперь понял, подумал что нужно использовать ID и на этом зациклился (хотя вчера, вроде как, вставлял цифру и работало)... Но все равно, код PHP: if($this->customer->getCustomerGroupId() <= 1){ $this->currency->set("UAH"); } побывал в разных методах, но так и не сработало. Можете подсказать, в какой метод это всунуть? (создать новый? заменить содержимое другого метода?)
Я про currency.php и писал, когда говорил, что вставлял код в разные методы - не помогает. Я и заменял и добавлял код к стандартным методам... Все никак. P.S. Все больше похоже на галлюцинацию вчерашнее удачное изменение валюты. Пропал аппетит, сон уже не тот. Заканчивается спиртное и сигареты. СОС
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'));} после этого почисть куки и проверяй
выдает ошибку 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");
ошибки уже нет, но все равно не работает. Если раньше у всех отображалась цена в 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'));}
Ну тогда так: В этом же файле 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'));} } Я надеюсь валюта "Гривна" у тебя заведена в админке?
На сайте все в ГРН осталось. В админке ошибка - 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 На сайте сейчас, для простоты эксперимента оставил две валюты грн и уе currency_id title code symbol_left symbol_right decimal_place value status date_modified 2 US Dollar USD $ 2 1.00000000 1 1 Гривня UAH грн 2 8.12800026 1 И пример покупателей 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 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 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 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 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...
чувствую решение где-то близко. Уже начал плотно изучать ООП, но сам дойду, боюсь, не скоро. Еще уточню: валюта по умолчанию 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){ так и не пропала в адмнике и не дает в ней работать...
Везде PHP: $this->customer->getCustomerGroupId() <= 1 замени на PHP: $this->customer&&$this->customer->getCustomerGroupId() <= 1
Благодарствую, проблема решена. Дальше по аналогии уже пройдусь по остальным группам и валютам! Всем спасибо.