Удаление синонимов для одного типа материалов.

Главные вкладки

Аватар пользователя MasterDzen MasterDzen 10 декабря 2012 в 13:07

на сайте есть тип материалов, у него уже пара-тройка сотен материалов.
хочется поменять им синонимы.

вот тут: http://site/admin/config/search/path/patterns
я уже поменял шаблон для синонимов новых материалов,
вопрос: как поменять синоним для остальных?!

есть вариант:
удалить все синонимы на сайте: http://site/admin/config/search/path/delete_bulk
создать синонимы заново: http://site/admin/config/search/path/update_bulk
но тогда удалятся синонимы материалов и других типов, которые возможно были переопределены пользователями или редакторами...

есть еще вариант:
удалить строчки из таблицы url_alias, который принадлежат нужным материалам.

вопрос: если я выберу 2-й путь, достаточно ли будет просто удалить строчки из таблицы и запустить апдейт синонимов (http://site/admin/config/search/path/update_bulk)?

Комментарии

Аватар пользователя MasterDzen MasterDzen 10 декабря 2012 в 18:02

пока что, в коде модуля (http://site/admin/config/search/path/delete_bulk) делается так:

        db_delete('url_alias')
          ->execute();
        drupal_set_message(t('All of your path aliases have been deleted.'));

так что,... раз советов нету.. буду просто удалять строчки.

судя по туду, удалялку планируют достаточно гибкой Smile

function pathauto_admin_delete() {
  /* TODO:
   1) all - DONE
   2) all node aliases - DONE
   4) all user aliases - DONE
   5) all taxonomy aliases - DONE
   6) by node type
   7) by taxonomy vocabulary
   8) no longer existing aliases (see http://drupal.org/node/128366 )
   9) where src like 'pattern' - DON'T DO
   10) where dst like 'pattern' - DON'T DO
  */

....скип....
}
Аватар пользователя goodboy goodboy 10 декабря 2012 в 18:38

Самому интересно узнать решение. Часто бывает что ошибся в шаблоне синонимов и нужно переделать, а удаляются и сделанные вручную синонимы. Вот если бы внести признак что синоним сгенерирован из шаблона, было бы проще.

Аватар пользователя MasterDzen MasterDzen 11 декабря 2012 в 9:45

сделал так:

.....
  $query = db_select('node', 'n');
  $query -> fields('n', array('nid', 'title'));
  $query -> condition('n.type', 'my_type', '=');
  $query -> condition('n.status', 1, '=');

  $query -> innerJoin('url_alias', 'alias', "CONCAT('node/', n.nid) = alias.source");
  $query -> fields('alias', array('pid', 'source', 'alias'));

  $result = $query -> execute();
  while ($record = $result -> fetchAssoc()) {
    $output_ht .= 'RewriteRule ^' . $record['alias'] . '/?$ http://site/node/' . $record['nid'] . ' [R=301,L]' . "\r\n";
    db_delete('url_alias') -> condition('pid', $record['pid'], '=') -> execute();
  }
.....

алиасы удалил,
насоздавал правил для htaccess'а, чтобы поисковики не потеряли ссылки,
счас еще xml-sitemap обновлю и всё..

Аватар пользователя Antoniy Antoniy 11 декабря 2012 в 13:08

"MasterDzen" wrote:
насоздавал правил для htaccess'а, чтобы поисковики не потеряли ссылки

Каких правил? Редирект со старых алиасов на новые?

Аватар пользователя MasterDzen MasterDzen 11 декабря 2012 в 14:30

да, вывел список строк, который потом записал в файл .htaccess сайта.
чтобы когда пользователи переходят по сохранённым синонимам из поиска яндекса,
они приходили на нужную страницу.
да и яндекс со временем обновит свою выдачу.

Аватар пользователя Antoniy Antoniy 11 декабря 2012 в 14:50

"MasterDzen" wrote:
чтобы когда пользователи переходят по сохранённым синонимам из поиска яндекса,
они приходили на нужную страницу

Ага. Для этого есть модуль Redirect, можно настроить автоматический редирект со старых синонимов на новые. Но при массовой смене даже не знаю, схватит он сразу множество редиректов...