Эта проблема впервые появилась, когда на странице истории заказов (* / 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;
}
После установки идентификатора веб-сайта загружается объект клиента в зависимости от $ this-> getId ().
Почему атрибут id объекта сеанса клиента не всегда действителен? Может кто-нибудь поделиться своими знаниями, пожалуйста. Большое спасибо.