Друпал - усугубляем бардак с алиасами
lexa - 09/Янв/2010 11:16
У меня исторически имеет место бардак с именами URL: все они порождены из заголовков записей, но
- В большинстве случаев дефис заменен подчеркиванием (и в заголовок данной записи специально добавлен дефис, чтобы проверить).
- В некоторых случаях дефис оставлен дефисом, это привет MovableType, настроенного по умолчанию из лета 2008 года.
- В некоторых случаях дефис вовсе скушали, какая-то версия MT заменяла конструкцию ' - ' не на '___' и не на '_-_', а на '__'.
Проблема лечится вот таким вот SQL-оператором (regexp_replace() - чисто постгресовское, MySQL-аналог найдите сами. Это только для nodes, с таксономией в моем случае проблем нет совсем.
insert into url_alias(src,language,dst) select src,language,regexp_replace(dst,'-','_','g') from url_alias where src like 'node%' and dst like '%-%';
my $sel = $db->prepare("select * from url_alias where src like 'node%' and dst like '%-%'");
my $ins = $db->prepare("insert into url_alias(src,dst,language) values(?,?,?)");
$sel->execute;
my $cnt=0;
while (my $d = $sel->fetchrow_hashref)
{
my $dst2 = $d->{dst};
$dst2=~s/-/_/g;
$cnt+=$ins->execute($d->{src},$dst2,$d->{language});
$dst2=~s/___/__/g;
$cnt+=$ins->execute($d->{src},$dst2,$d->{language});
}
my $ins = $db->prepare("insert into url_alias(src,dst,language) values(?,?,?)");
$sel->execute;
my $cnt=0;
while (my $d = $sel->fetchrow_hashref)
{
my $dst2 = $d->{dst};
$dst2=~s/-/_/g;
$cnt+=$ins->execute($d->{src},$dst2,$d->{language});
$dst2=~s/___/__/g;
$cnt+=$ins->execute($d->{src},$dst2,$d->{language});
}
В скрипте нету транзакций, поэтому он имеет право ругаться на дублирующий алиас (и не добавлять).