gpt4 book ai didi

php - 如何按键刷新Magento缓存?

转载 作者:可可西里 更新时间:2023-11-01 00:47:09 25 4
gpt4 key购买 nike

我想在 Magento 时刷新我的扩展缓存集合数据 集合数据文件。 COLLECTION_DATA 缓存已刷新,并且还针对其他事件清理此缓存。

我有一个自定义类,主要部分是:

$this->_usecache = Mage::app()->useCache('collections');
if ($this->_usecache){
$cache = Mage::app()->getCache();
$key = "mycategory".$this->_config['rootid'];
$this->tmpAllItems = $cache->load($key);
} else {
$this->tmpAllItems = false;
}
if ($this->tmpAllItems === false){
$this->tmpAllItems = array();
$model = Mage::getModel('catalog/category');
$categories = $model->getCategories($this->_config['rootid'], 0, true, false, true);
$k = array_keys($categories->getNodes());
$parent = $categories[$k[0]]->getParent();
$this -> treeToFlat($parent);
if ($this->_usecache)
{
$cache->save(serialize($this->tmpAllItems),
$key,
array(Mage_Catalog_Model_Category::CACHE_TAG,
Mage_Core_Model_App::CACHE_TAG)
);
} else {
$this->tmpAllItems = unserialize($this->tmpAllItems);
}
return $this->tmpAllItems;

因此,我的目标是在清理 Mage_Catalog_Model_Category::CACHE_TAG 时也刷新/清理此缓存。这怎么可能?

更新#1

当我用过

$cache = Mage::app()->getCacheInstance();

代替

$cache = Mage::app()->getCache();

清洁开始工作。当我有一个类别时,列表会刷新,但如果什么都没发生,它就会保留在缓存中。也有人可以解释为什么这种变化可能吗?

解决方案

...
$cache->save(serialize($this->tmpAllItems),$key,array('my_cache_tag'));
....

然后清除:

    $cache = Mage::app()->getCache();
foreach($cache->getTags() as $tag){
if(strpos($tag, 'my_cache_tag')){
$ids = $cache->getIdsMatchingAnyTags(array($tag));
foreach($ids as $id){
$cache->remove($id);
}
}
}

最佳答案

我找到了这个问题的解决方案,我在管理面板中单击刷新缓存时使用观察器您可以在 my blog 查看详情

第 1 步:在管理面板中单击刷新时使用事件创建观察者:

    <events>
<adminhtml_cache_refresh_type>
<observers>
<yournamespace_yourextenstion_model_observer>
<type>singleton</type>
<class>YourNameSpace_YourExtenstion_Model_Observer</class>
<method>adminhtml_cache_refresh_type</method>
</yournamespace_yourextenstion_model_observer>
</observers>
</adminhtml_cache_refresh_type>
</events

现在,我们可以创建文件名为:Observer.php 遵循以下路径:YourNameSpace/YourExtenstion/Model/Observer.php 并将此代码添加到 Observer.php

这是observer.php文件的内容

class YourNameSpace_YourExtenstion_Model_Observer
{
public function adminhtml_cache_refresh_type($observer)
{
$request = Mage::app()--->getRequest()->getPost('types');
if(in_array('ee_content', $request))
{
$cache = Mage::app()->getCache();
$tags = $cache->getTags();
$ee_content = '';
foreach($tags as $tag)
{
if(strpos($tag, 'ee_content'))
{
$ee_content = $tag;
}
}
if($ee_content !='')
{


$ids = $cache->getIdsMatchingAnyTags(array($ee_content));
foreach($ids as $id)
{
$cache->remove($id);
}
}

}
}
}

关于php - 如何按键刷新Magento缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15656933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com