2011-01-17 4 views
1

У меня есть функция внутри помощника в Magento, которая возвращает, соответствует ли атрибут клиента одному или нет.Сессия клиента различна в разных частях сайта Magento

Вот мой класс Helper

class Nie_Nie_Helper_Data extends Mage_Core_Helper_Abstract { 
    public function isNieAdmin() { 
     if(Mage::getSingleton('customer/session')->getCustomer()->getNieAdmin() == 1) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
} 

Теперь, когда я называю эту функцию из класса, который простирается Mage_Core_Block_Template, все, кажется, работает хорошо. Однако, когда я пытаюсь использовать это внутри одного из моих контроллеров, он не работает. Фактически, когда я делаю Mage::getSingleton('customer/session')->getCustomer()->debug(), единственная переменная, которая возвращается, - это site_id.

Кто-нибудь знает, что я должен сделать, чтобы заставить это работать?

ответ

2

ОК, похоже, мне пришлось самому загрузить сеанс. Я должен был выполнить следующие функции:

Mage::getSingleton('core/session', array('name' => 'frontend')); 

Надеюсь, это поможет.

2

Во время контроллера объекты сеанса еще не инициализированы (хотя переменная сеанса должна быть), поэтому она возвращает пустую модель. Я предполагаю, что website_id намеренно установлен в создании объекта клиента, который будет действовать по умолчанию.

Вы можете получить доступ к $_SESSION['customer'], чтобы найти то, что вам нужно, но это грязно. Альтернативой будет делать то, что вы хотите, в случае, которое происходит позже.

Надеюсь, что кто-то может найти лучший ответ, чем мой.

+0

Это так странно. Хотя я не над тем, чтобы делать что-то грязным способом, мне показалось странным, что сеанс недоступен в контроллере. Я чувствую, что Varien должен это исправить. –

+1

Переменная $ _SESSION такая же, как и в случае, если я занимался теми же данными, что и Синглтон Magento. –

Смежные вопросы