Эта проблема впервые появилась в осознании, поскольку страница истории заказов (* / sales / order / history /) в интерфейсе не отображала ничего, кроме короткого сообщения: вы не указали никаких заказов.
После некоторой отладки выясняется, что проблема заключается в этой функции:
Mage::getSingleton('customer/session')
Он не возвращает объект сеанса, содержащий информацию текущего клиента, кроме идентификатора веб-сайта, поэтому коллекция заказов возвращает пустой результат после фильтрации на идентификаторе клиента.
В Stack Overflow есть столбец, в котором обсуждается аналогичная проблема: сеанс клиента отличается в разных частях веб-сайта Magento . Но он не дал хорошего объяснения.
И что сбивает с толку, так это то, что в моем случае функция работает хорошо в некоторых частях, но не в других. Например, я вставил
<?php echo var_export(Mage::getSingleton('customer/session')->getCustomerId(), true) ?>
в шаблон списка продуктов каталога и отображает идентификатор клиента после входа в систему. Но та же строка возвращает Null на странице истории заказов.
Я нашел эти коды в app / code / core / Mage / Customer / Model / Session.php
public function getCustomer() { ... $customer = Mage::getModel('customer/customer') ->setWebsiteId(Mage::app()->getStore()->getWebsiteId()); if ($this->getId()) { $customer->load($this->getId()); } $this->setCustomer($customer); return $this->_customer; }
наpublic function getCustomer() { ... $customer = Mage::getModel('customer/customer') ->setWebsiteId(Mage::app()->getStore()->getWebsiteId()); if ($this->getId()) { $customer->load($this->getId()); } $this->setCustomer($customer); return $this->_customer; }
После установки идентификатора сайта он загружает объект клиента в зависимости от $ this-> getId ().
Почему атрибут «id» объекта сеанса клиента не всегда действителен? Может кто-то поделиться своими знаниями, пожалуйста. Большое спасибо.