Удалить запись core_url_rewrite программно magento - PullRequest
0 голосов
/ 26 июня 2018

Мне нужно добавить редирект на 30 URL в 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();

Ответы [ 2 ]

0 голосов
/ 27 июня 2018

Позвольте мне добавить некоторые интересные элементы к принятому ответу, которые вы сможете использовать для всех ваших будущих операций удаления / сохранения:

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

Меньше шагов.

0 голосов
/ 26 июня 2018
if($rewrite_collection_count < 0){

Приведенный выше код, только проверьте, что счетчик меньше нуля.

Пожалуйста, измените код на

if($rewrite_collection_count > 0){
    foreach ($rewrite_collection->getItems() as $rewrite){
        $rewrite->delete();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...