【问题标题】:How to change config variables during the session only如何仅在会话期间更改配置变量
【发布时间】:2012-04-01 14:42:25
【问题描述】:

我需要获取一个配置变量并仅为会话更改它 我有这个观察者,并且我设法通过 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;
}

}

提前致谢

【问题讨论】:

  • 您似乎正在尝试进行某种状态持久性。这不是在 Magento 框架中执行此操作的方法。你能评论/编辑你想要完成的事情吗?
  • 您确定在加载布局之前调用了您的观察者吗?

标签: configuration store config magento


【解决方案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。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-31
      • 2012-12-14
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 2012-02-29
      相关资源
      最近更新 更多