以编程方式删除magento的core_url_rewrite条目

时间:2018-06-26 08:59:29

标签: php mysql magento

我需要在3个商店中为30个网址添加重定向。为此,我创建了一个脚本,可以使用它添加URL,但是脚本的问题是,如果请求路径已经存在,则必须删除条目并插入新的条目。我为此使用了以下代码,它不会删除已经存在的条目(此条目的is_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();

2 个答案:

答案 0 :(得分:1)

if($rewrite_collection_count < 0){

上面的代码,仅检查计数是否小于零。

请将代码更改为

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

答案 1 :(得分:0)

允许我将一些有趣的元素引入已接受的答案中,以便将来用于所有删除/保存操作:

$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();

步骤更少。