我尝试在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。是的,我知道我无法对核心文件进行更改。感谢。
答案 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文件中对此进行编码。请扩展现有的核心课程。