2012-03-16 46 views
0

我需要獲取配置變量並將其更改爲僅會話 我有此Observer,並且設法通過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

看起來你正在嘗試做某種狀態持久性。這不是在Magento框架中這樣做的方法。你能評論/編輯你想完成的事情嗎? – benmarks 2012-03-16 02:52:01

+0

你確定你的觀察者是在佈局加載之前調用的嗎? – Zyava 2012-03-18 00:34:39

回答

0

@Ben這正是我想要完成的。爲了保持這種僞狀態持久性,我最後做了什麼,是用我需要檢查的值加載個人會話變量。我認爲有一種方法可以保持會話後端配置變量的可訪問性,並最終隨時更改其值,就像對象自然工作一樣。 我的意思是,保持會話中的管理員信息。我找不到辦法做到這一點,所以我不得不去個人會議變量選項。順便說一句,它現在就像魅力一樣。感謝您的評論傢伙。

1

實際上有一個簡單的方法來做到這一點。

假設我在數據庫中將值'my/config/key'設置爲1

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

然後訪問該值將返回0直到腳本執行結束:

一些事件之後,我的價值這種方式設置爲0

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

然而,在價值該數據庫仍然是1

我沒有在會話中使用解決方案,因爲我需要它來影響XML佈局中的ifconfig。