Skip to Content

Друпал - усугубляем бардак с алиасами

У меня исторически имеет место бардак с именами URL: все они порождены из заголовков записей, но

  • В большинстве случаев дефис заменен подчеркиванием (и в заголовок данной записи специально добавлен дефис, чтобы проверить).
  • В некоторых случаях дефис оставлен дефисом, это привет MovableType, настроенного по умолчанию из лета 2008 года.
  • В некоторых случаях дефис вовсе скушали, какая-то версия MT заменяла конструкцию ' - ' не на '___' и не на '_-_', а на '__'.
Причем, как выяснилось по логам, есть внешние ссылки на разные представления одного и того же, уж не знаю откуда они взялись.

Проблема лечится вот таким вот SQL-оператором (regexp_replace() - чисто постгресовское, MySQL-аналог найдите сами. Это только для nodes, с таксономией в моем случае проблем нет совсем.

  1.  insert into url_alias(src,language,dst) select src,language,regexp_replace(dst,'-','_','g') from url_alias where src like 'node%' and dst like '%-%';
Ну, точнее, надо конечно писать скрипт такого примерно вида (это Perl+DBI), потому что вышеприведенный оператор сломается, если какой-то алиас из добавляемых уже есть:
  1. my $sel = $db->prepare("select * from url_alias where src like 'node%' and dst like '%-%'");
  2. my $ins = $db->prepare("insert into url_alias(src,dst,language) values(?,?,?)");
  3. $sel->execute;
  4. my $cnt=0;
  5. while (my $d = $sel->fetchrow_hashref)
  6.   {
  7.     my $dst2 = $d->{dst};
  8.     $dst2=~s/-/_/g;
  9.     $cnt+=$ins->execute($d->{src},$dst2,$d->{language});
  10.     $dst2=~s/___/__/g;
  11.     $cnt+=$ins->execute($d->{src},$dst2,$d->{language});
  12.   }
Вторая замена - это подавление трех подчеркиваний.

В скрипте нету транзакций, поэтому он имеет право ругаться на дублирующий алиас (и не добавлять).

Comments

Post new comment

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <s> <i> <b> <blockquote>
  • Lines and paragraphs break automatically.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <ruby>. The supported tag styles are: <foo>, [foo].
  • Images can be added to this post.

More information about formatting options

CAPTCHA Image CAPTCHA
Enter the characters shown in the image.