Magento的。注册变量不起作用

时间:2013-06-04 13:48:44

标签: magento global-variables

我尝试在magento中注册全局变量,但它不起作用。 在/app/code/core/Mage/Checkout/controllers/CartController.php我注册变量:

Mage::register('g_addressType', $addressType);

$mylog = print_r(Mage::registry('g_addressType'), true);
Mage::log("address_type1:".$mylog, null, 'mygento.log');

$this->_redirect('checkout/onepage/');

在/app/code/core/Mage/Checkout/Block/Onepage.php我尝试获取此变量:

$mylog = print_r(Mage::registry('g_addressType'), true);
Mage::log("address_type2:".$mylog, null, 'mygento.log');
return Mage::registry('g_addressType');

但它不起作用。我得到这个日志:

2013-06-04T13:38:45+00:00 DEBUG (7): address_type1:private
2013-06-04T13:38:51+00:00 DEBUG (7): address_type2:

错误在哪里?我使用magento 1.7。是的,我知道我无法对核心文件进行更改。感谢。

1 个答案:

答案 0 :(得分:2)

这不起作用,因为Magento注册表在页面加载时不是持久的。从CartController(/ checkout / cart /)更改为OnepageController(/ checkout / onepage /)意味着重新加载页面,这样就不会在两者之间保留g_addressType。

更好的办法是使用这样的会话:

CartController.php中的

Mage::getSingleton('checkout/session')->setGAddressType($addressType)

然后

OnepageController.php中的

Mage::getSingleton('checkout/session')->getGAddressType()

最后提醒:请确保不要在Core Magento文件中对此进行编码。请扩展现有的核心课程。