Мне нужно добавить редирект для 30 урлов в 3 магазинах. Для этого я создал сценарий, используя который, я могу добавить 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();






if ($rewrite_collection_count < 0){
В приведенном выше коде только проверьте, что счетчик меньше нуля.
Пожалуйста, измените код как
if ($rewrite_collection_count > 0){
foreach ($rewrite_collection->getItems() as $rewrite){
$rewrite->delete();
}
}
Позвольте мне внести в принятый ответ несколько неинтересных элементов, которые вы сможете использовать для всех будущих операций удаления / сохранения:
$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();
Меньше шагов.