Как сгенерировать алиас с помощью Translit?
Как использовать возможности пакета translit для генерации транслитерированных алиасов?
Дело в том, что мне пришлось перегенерировать все uri ресуросв (с разным class_key). Использовал советы отсюда и отсюда.
В итоге у меня получился такой скомбинированный вариант, который я запускаю в консоли:
Задача: хочу сам, ручками, используя возможности translit сгенерировать alias и записать ресурсам с пустыми алиасами. А после этого уже разбираться с uri.
Дело в том, что мне пришлось перегенерировать все uri ресуросв (с разным class_key). Использовал советы отсюда и отсюда.
В итоге у меня получился такой скомбинированный вариант, который я запускаю в консоли:
<?php
ini_set("display_errors",1);
error_reporting(E_ALL);
header("Content-Type: text/html; charset=utf-8");
// Подключаем
define('MODX_API_MODE', true);
require 'index.php';
// Включаем обработку ошибок
$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_INFO);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
$modx->exec("UPDATE modx_site_content SET uri='' WHERE alias=''");
$modx->exec("UPDATE modx_site_content SET uri = '' WHERE uri=alias");//удаляет uri равное alias
$modx->exec("UPDATE modx_site_content SET uri = '' WHERE alias = CONCAT(uri, '/')");//удаляет uri со слешем на конце равное alias
$modx->exec("UPDATE modx_site_content t1, (SELECT uri FROM modx_site_content GROUP BY uri HAVING COUNT(*) > 1)
t2 SET t1.uri = '' WHERE t2.uri = t1.uri AND uri_override = 0");//удаляет дубликаты uri на всякий пожарный
$modx->setLogLevel(1);
ini_set('max_execution_time', 7200);
ignore_user_abort(true);
$q = $modx->newQuery('modResource');
$q->andCondition(array(
'uri' => null,
'OR:uri:=' => '',
'OR:alias:=' => ''
));
$q->sortby('id');
$q->limit(3000);
$rows = $updated = 0;
$s = $q->prepare();
$s->execute();
foreach($modx->getCollection('modResource', $q) as $data){
$rows++;
$modx->error->reset();
$modx->runProcessor('resource/update', $data->toArray());
if($modx->error->hasError()){
print_r($modx->error->getErrors());
echo "\nНе обработана строка\n";
}
else {
$updated++;
echo "\nОБРАБОТАНО\n";
}
}
echo "\n==========================================\n";
echo "Всего найдено документов по условию: ". $modx->getCount('modResource', $q)."\n";
echo "\nОбработано строк: $rows\n";
echo "\nОбновлено: $updated\n\n\n";С помощью такого подхода получилось обновить у половины ресурсов, остальная половина упрямо даёт результат Обновлено: 0. Комбинировал результаты этого скрипта как только мог.Задача: хочу сам, ручками, используя возможности translit сгенерировать alias и записать ресурсам с пустыми алиасами. А после этого уже разбираться с uri.
Комментарии: 17
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Ресурсов довольно много, около 10 тысяч.
Как видно, вызывается функция filterPathSegment в то же классе, которая уже отвечает за обработку непосредственно. Вот она уже статическая и при желании ее можно использовать напрямую.
ни так
а вот так работает -)
Я выбрал только один ресурс по id чтобы понаблюдать как заполнится поле alias у него, наблюдаю в phpMyAdmin. Но после срабатывания кода и попытки запуска процессора обновления поле остаётся пустым, то есть обновление не произошло!
Вот изменённый код:
Результат выполнения кода:
Или записать alias напрямую, без процессоров?
Этот кусок кода успешно записал мне alias-ы:
но с URI пока не могу разобраться, что именно из тех строк что ты мне показал использовать…
github.com/modxcms/revolution/blob/0660b5955e1307dbaff8ab3c8750bad0b4d674ef/core/model/modx/modresource.class.php#L868-L923