如何仅在会话期间更改配置变量

时间:2012-03-16 01:49:44

标签: configuration store config magento

我需要获取配置变量并仅为会话更改它 我有这个观察者,我已经设法通过setNode更改变量。如果在下一行中我使用getNode()验证其值,则值已正确更改。 但是后来在其他视图中我检查Mage :: getStoreConfig('oi_options / messages / active')并且它似乎再次为0。如你所见,我把cleanCache()和reinit()。我试过他们两个,每一个都是孤立的。 另外,我在xml布局中使用了一些ifconfig语句来检查这个变量,以便确定是否显示几个块而且它也不起作用。 有什么建议吗?

class Oi_Vendedor_Model_Observer {

const RETAILER = 3;

public function checkVendedor(Varien_Event_Observer $observer) {
    $customerGroup = Mage::getSingleton('customer/session')->getCustomerGroupId();

    if(($customerGroup == self::RETAILER) && (Mage::getStoreConfig('oi_options/messages/active') == 0))
    {
        Mage::getConfig()->setNode('default/oi_options/messages/active',1);
        Mage::getConfig()->cleanCache();
        Mage::getConfig()->reinit();
    } 
    return $this;
}

}

提前致谢

2 个答案:

答案 0 :(得分:1)

实际上有一种简单的方法可以做到。

假设我在数据库中将值'my/config/key'设置为1

在某些事件之后,我以这种方式将值设置为0

Mage::app()->getStore()->setConfig('my/config/key', 0);

然后访问此值将返回0,直到脚本执行结束:

Mage::getStoreConfig('my/config/key'); //return 0

但是,数据库中的值仍为1

我没有在会话中使用该解决方案,因为我需要它来影响XML布局中的ifconfig。

答案 1 :(得分:0)

@Ben这正是我想要完成的。为了保持这种伪状态持久性,我最终做的是加载一个具有我需要检查的值的个人会话变量。我认为有一种方法可以保持后端配置变量可以从会话中访问,并最终动态地改变它们的值,就像对象自然起作用一样。 我的意思是,也要在会话中保留管理员信息。我找不到办法,所以我不得不去个人会话变量选项。 顺便说一句,它现在就像魅力一样。感谢您的评论。