我需要在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();
答案 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();
步骤更少。