Бывает, зайдешь на сайт, и видишь там вот такое: ?
Ладно если это 5-10 документов. А если это 160, как в моем случае? Бывает и больше. Вот опять лень меня победила и я решил написать скрипт, который делает выборку таких конфликтных документов и исправляет им УРЛы автоматом.
Принимайте скрипт:
ini_set('display_errors', 1);
$modx->setLogLevel(3);
$modx->setLogTarget('HTML');
$table = $modx->getTableName("modResource");
$q = $modx->newQuery("modResource");
$alias = $q->getAlias();
$q->select(array(
"{$alias}.*",
));
$q->query['from']['tables'][] = array(
"table" => "(select count(*) as total, uri from {$table} as c group by c.uri)",
"alias" => "t1",
);
$q->where(array(
"{$alias}.alias:!=" => "",
"{$alias}.uri:!=" => "",
"{$alias}.uri = t1.uri",
"t1.total > 1",
));
foreach($modx->getIterator("modResource", $q) as $doc){
$i = 10;
while($doc->isDuplicateAlias() AND $i > 0){
$i--;
preg_match("/(.*?)\-?(\d*)$/u", $doc->alias, $match);
$doc->alias = "{$match[1]}-{$match[2]}" . rand(1,9);
}
if($doc->isDirty('alias')){
$doc->save();
}
}
print "\n End";
P.S. По поводу написания таких составных запросов я писал здесь.