Решение, пользовательское.
файл /plugins/autoalias2/inc/autoalias2.functions.php
меняем его содержимое на
<?php
/**
* AutoAlias functions for generating URL-friendly aliases from page titles
*
* @package AutoAlias
* @copyright (c) Cotonti Team
* @license https://github.com/Cotonti/Cotonti/blob/master/License.txt
* @version 2.0.0
* @author Cotonti Team
*/
// Проверяем, определена ли константа COT_CODE, иначе прерываем выполнение
defined('COT_CODE') or die('Wrong URL');
// Подключаем основной файл модуля page для работы с его функциями
require_once cot_incfile('page', 'module');
/**
* Converts a page title into a URL-friendly alias
*
* @param string $title The page title to convert
* @param int $id Page ID, used for prepending to alias if configured
* @param bool $duplicate Indicates if a duplicate alias was detected
* @return string The generated alias
*/
function autoalias2_convert($title, $id = 0, $duplicate = false)
{
// Объявляем глобальные переменные для конфигурации и таблиц транслитерации
global $cfg, $cot_translit, $cot_translit_custom;
// Проверяем, включена ли транслитерация и существует ли файл translit
if ($cfg['plugin']['autoalias2']['translit'] && file_exists(cot_langfile('translit', 'core'))) {
// Подключаем файл транслитерации для текущего языка
include cot_langfile('translit', 'core');
// Если определён пользовательский массив транслитерации, используем его
if (is_array($cot_translit_custom)) {
// Применяем пользовательскую транслитерацию через strtr
$title = strtr($title, $cot_translit_custom);
// Если есть стандартный массив транслитерации
} elseif (is_array($cot_translit)) {
// Принудительно приводим строку к UTF-8 для корректной обработки
$title = mb_convert_encoding($title, 'UTF-8', mb_detect_encoding($title));
// Применяем базовую транслитерацию через iconv для обработки нестандартных символов
$title = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $title);
// Дополнительно применяем замены из $cot_translit для украинских символов
foreach ($cot_translit as $key => $val) {
// Заменяем каждый символ или последовательность на соответствующий транслит
$title = str_replace($key, $val, $title);
}
}
}
// Удаляем все символы, кроме букв, цифр, дефиса, подчеркивания и пробела
$title = preg_replace('#[^\p{L}0-9\-_ ]#u', '', $title);
// Заменяем пробелы на разделитель, указанный в конфигурации
$title = str_replace(' ', $cfg['plugin']['autoalias2']['sep'], $title);
// Приводим строку к нижнему регистру, если включена опция lowercase
if ($cfg['plugin']['autoalias2']['lowercase']) {
$title = mb_strtolower($title);
}
// Если включено добавление ID в начало и ID не пустой
if ($cfg['plugin']['autoalias2']['prepend_id'] && !empty($id)) {
// Добавляем ID в начало алиаса с разделителем
$title = $id . $cfg['plugin']['autoalias2']['sep'] . $title;
// Если обнаружен дубликат алиаса
} elseif ($duplicate) {
// Проверяем настройку обработки дубликатов
switch ($cfg['plugin']['autoalias2']['on_duplicate']) {
case 'ID':
// Если ID не пустой, добавляем его в конец алиаса
if (!empty($id)) {
$title .= $cfg['plugin']['autoalias2']['sep'] . $id;
break;
}
default:
// В противном случае добавляем случайное число от 2 до 99
$title .= $cfg['plugin']['autoalias2']['sep'] . rand(2, 99);
break;
}
}
// Возвращаем итоговый алиас
return $title;
}
/**
* Updates the alias for a specific page in the database
*
* @param string $title Page title to convert
* @param int $id Page ID
* @return string The generated alias
*/
function autoalias2_update($title, $id)
{
// Объявляем глобальные переменные для конфигурации и базы данных
global $cfg, $db, $db_pages;
// Инициализируем флаг дубликата
$duplicate = false;
// Повторяем, пока есть дубликаты и не включено prepend_id
do {
// Генерируем алиас с учётом заголовка, ID и флага дубликата
$alias = autoalias2_convert($title, $id, $duplicate);
// Проверяем, существует ли такой алиас в базе для других страниц
if (!$cfg['plugin']['autoalias2']['prepend_id']
&& $db->query("SELECT COUNT(*) FROM $db_pages WHERE page_alias = '$alias' AND page_id != $id")->fetchColumn() > 0) {
// Если алиас занят, устанавливаем флаг дубликата
$duplicate = true;
} else {
// Обновляем алиас в базе данных для указанного page_id
$db->update($db_pages, array('page_alias' => $alias), "page_id = $id");
// Сбрасываем флаг дубликата
$duplicate = false;
}
} while ($duplicate && !$cfg['plugin']['autoalias2']['prepend_id']);
// Возвращаем итоговый алиас
return $alias;
}
2. должен быть файл по адресу: /lang/ua/translit.ua.lang.php
а нем код:
<?php
/**
* Таблиця транслітерації ГОСТ 7.79-2000 / ISO-9, система Б
* В порядку зменшення пріоритету при обробці
*/
global $cot_translit, $cot_translitb;
$cot_translit = array(
'ці' => 'ci',
'Ці' => 'Ci',
'ЦІ' => 'CI',
'це' => 'ce',
'Це' => 'Ce',
'ЦЕ' => 'CE',
'ци' => 'cy',
'Ци' => 'Cy',
'ЦИ' => 'CY',
'ц' => 'cz',
'Ц' => 'Cz',
'ч' => 'ch',
'Ч' => 'Ch',
'щ' => 'shh',
'Щ' => 'Shh',
'ш' => 'sh',
'Ш' => 'Sh',
'ж' => 'zh',
'Ж' => 'Zh',
'ї' => 'yi',
'Ї' => 'Yi',
'ю' => 'yu',
'Ю' => 'Yu',
'я' => 'ya',
'Я' => 'Ya',
'є' => 'ye',
'Є' => 'Ye',
'и' => 'y',
'И' => 'Y',
'ґ' => 'g',
'Ґ' => 'G',
'а' => 'a',
'А' => 'A',
'б' => 'b',
'Б' => 'B',
'в' => 'v',
'В' => 'V',
'г' => 'g',
'Г' => 'G',
'д' => 'd',
'Д' => 'D',
'е' => 'e',
'Е' => 'E',
'з' => 'z',
'З' => 'Z',
'і' => 'i',
'І' => 'I',
'й' => 'y',
'Й' => 'Y',
'к' => 'k',
'К' => 'K',
'л' => 'l',
'Л' => 'L',
'м' => 'm',
'М' => 'M',
'н' => 'n',
'Н' => 'N',
'о' => 'o',
'О' => 'O',
'п' => 'p',
'П' => 'P',
'р' => 'r',
'Р' => 'R',
'с' => 's',
'С' => 'S',
'т' => 't',
'Т' => 'T',
'у' => 'u',
'У' => 'U',
'ф' => 'f',
'Ф' => 'F',
'х' => 'x',
'Х' => 'X',
'ь' => '',
'№' => '#'
);
/**
* Зворотне перетворення
*/
$cot_translitb = array_flip($cot_translit);
/**
* Додаємо апостроф, оскільки він транслітерується тільки в один бік
*/
$cot_translit['’'] = 'y';
$cot_translit['\''] = 'y';