以编程方式删除核心url重写条目

c6ubokkw  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(303)

我需要添加重定向为30个网址在3个商店。为此,我创建了一个脚本,使用它我可以添加url,但脚本的问题是,如果请求路径已经存在,我必须删除条目并插入新条目。为此,我使用了下面的代码,它不会删除已经存在的条目(对于这个条目,is\u system=>1)。谁能帮我解决这个问题。

$rewrite_collection = Mage::getModel('core/url_rewrite')->getCollection();
$rewrite_collection->addFieldToFilter('request_path', array('eq' => 
$request_path));
$rewrite_collection->addFieldToFilter('store_id', array('eq' => 1));
$rewrite_collection_count = $rewrite_collection->count();
if($rewrite_collection_count < 0){
    foreach ($rewrite_collection->getItems() as $rewrite){
        $rewrite->delete();
    }
}

Mage::getModel('core/url_rewrite')
    ->setStoreId(1)
    ->setIsSystem(0)
    ->setOptions('RP')
    ->setIdPath($id_path)
    ->setRequestPath($request_path)
    ->setTargetPath($target_path)
    ->save();
pieyvz9o

pieyvz9o1#

if($rewrite_collection_count < 0){

以上代码,只检查计数是否小于零。
请将代码更改为

if($rewrite_collection_count > 0){
    foreach ($rewrite_collection->getItems() as $rewrite){
        $rewrite->delete();
    }
}
eufgjt7s

eufgjt7s2#

请允许我将一些ineteresting元素带到可接受的答案中,您将能够使用这些元素进行将来的所有删除/保存操作:

$transaction = Mage::getResourceModel('core/transaction');
foreach ($rewrite_collection->getItems() as $rewrite){
    $transaction->addObject($rewrite);
}
$transaction->delete(); //or $transaction->save() when you need

这允许您删除/保存您提供给要在一个sql事务中保存/删除的事务对象的所有对象,并在发生错误时回滚(如果在保存其中一个模型期间引发异常,则自动执行)。
另外,试着养成这样称呼你的收藏的习惯:

$rewrite_collection = Mage::getResourceModel('core/url_rewrite_collection');

而不是:

$rewrite_collection = Mage::getModel('core/url_rewrite')->getCollection();

少走几步。

相关问题