Транслитерация ссылок (slug) на форуме, для версии 1.4.2

Sonkir

Проверенные
Сообщения
126
Реакции
213
Баллы
11,055
Недавно задумался над проблемой отображения крякозяблов в ссылках (заголовках тем), которые появляются во время их копирования и вставки в сообщениях на форуме/соцсетях, адресной строке браузера и т.д., когда в настройках админки Оптимизация для поисковых систем (SEO) добавляешь отображение заголовков тем в URL:

Главная > Настройки > [ищем в списке справа] Оптимизация для поисковых систем (SEO) > [ищем в списке справа опцию] Включать заголовок страницы в URL


Конечно, если отключить, то проблема решается, в ссылках содержится только id-номер.

URL: /threads/моя-тема.128/ будет URL такого вида: /threads/128/

Но всё таки, если хочется, чтобы в ссылках отображались текстовые названия на латинице /threads/teper-na-latinitce.id можно проводить транслитерацию с кириллицы на латиницу. Я решил этот вопрос модификацией файла Link.php добавив паттерн транслитерации:

library/XenForo/Link.php

Ищем:

PHP:
            $title = utf8_romanize(utf8_deaccent($title));
        }

После добавляем:

PHP:
# =================================================== Вставка транслитерации
         $aPattern = array (

            "Z" => "З" ,

            "z" => "з" ,

            "ZH" => "Ж" ,

            "zh" => "ж" ,

            "TC" => "Ц" ,

            "tc" => "ц" ,

            "CH" => "Ч" ,

            "ch" => "ч" ,

            "S" => "С" ,

            "s" => "с" ,

            "SH" => "Ш" ,

            "sh" => "ш" ,

            "SHCH" => "Щ" ,

            "shch" => "щ" ,

            "B" => "Б" ,

            "b" => "б" ,

            "V" => "В" ,

            "v" => "в" ,

            "G" => "Г" ,

            "g" => "г" ,

            "D" => "Д" ,

            "d" => "д" ,

            "Y" => "Ы" ,

            "y" => "ы" ,

            "I" => "И|Й|І" , // укр І

            "i" => "и|й|і" , // укр і

            "K" => "К" ,

            "k" => "к" ,

            "L" => "Л" ,

            "l" => "л" ,

            "M" => "М" ,

            "m" => "м" ,

            "N" => "Н" ,

            "n" => "н" ,

            "P" => "П" ,

            "p" => "п" ,

            "R" => "Р" ,

            "r" => "р" ,

            "T" => "Т" ,

            "t" => "т" ,

            "U" => "У" ,

            "u" => "у" ,

            "YU" => "Ю" ,

            "yu" => "ю" ,

            "F" => "ф" ,

            "f" => "Ф" ,

            "H" => "Х" ,

            "h" => "х" ,

            "A" => "А" ,

            "a" => "а" ,

            "YA" => "Я" ,

            "ya" => "я" ,

            "" => "Ь|Ъ" ,

            "" => "ь|ъ" ,

            "E" => "Е|Э" ,

            "e" => "е|э" ,

            "O" => "О" ,

            "o" => "о" ,

        );

        while(list( $key , $value ) = each ( $aPattern ))

        {

        $title = @ ereg_replace ( $value , $key , $title );

        }

# =================================================== Конец Вставка транслитерации

Перезаписанный файл заливаем на удалённый сервер и наслаждаемся.

library/XenForo/Link.php

Ссылки остаются рабочими даже тогда, когда заголовки тем уже в латинице, так как id остались прежними.

Есть уже готовый Link.php для версии форума 1.4.2
 

Вложения

  • Link.zip
    7 KB · Просмотры: 8
Последнее редактирование:
А оно не из коробки разве ?

Группы настроек: > Основная информация о форуме > Включить транслитерацию ссылок для заголовков
 
А оно не из коробки разве ?
Да, есть из коробки,...
А где посмотреть паттерн этого транслита из коробки, чтобы подправить? Там неправильная транслитерация. А вот ту, что я разместил - корректная, так как заимствована из общепринятых правил, а также моей практики общения.
 
Господи, какие велосипеды...
А где посмотреть паттерн этого транслита из коробки, чтобы подправить?
library/Lgpl/utf8.php
PHP:
  //russian cyrillic
  'а'=>'a','А'=>'A','б'=>'b','Б'=>'B','в'=>'v','В'=>'V','г'=>'g','Г'=>'G',
  'д'=>'d','Д'=>'D','е'=>'e','Е'=>'E','ё'=>'jo','Ё'=>'Jo','ж'=>'zh','Ж'=>'Zh',
  'з'=>'z','З'=>'Z','и'=>'i','И'=>'I','й'=>'j','Й'=>'J','к'=>'k','К'=>'K',
  'л'=>'l','Л'=>'L','м'=>'m','М'=>'M','н'=>'n','Н'=>'N','о'=>'o','О'=>'O',
  'п'=>'p','П'=>'P','р'=>'r','Р'=>'R','с'=>'s','С'=>'S','т'=>'t','Т'=>'T',
  'у'=>'u','У'=>'U','ф'=>'f','Ф'=>'F','х'=>'x','Х'=>'X','ц'=>'c','Ц'=>'C',
  'ч'=>'ch','Ч'=>'Ch','ш'=>'sh','Ш'=>'Sh','щ'=>'sch','Щ'=>'Sch','ъ'=>'',
  'Ъ'=>'','ы'=>'y','Ы'=>'Y','ь'=>'','Ь'=>'','э'=>'eh','Э'=>'Eh','ю'=>'ju',
  'Ю'=>'Ju','я'=>'ja','Я'=>'Ja',
  // Ukrainian cyrillic
  'Ґ'=>'Gh','ґ'=>'gh','Є'=>'Je','є'=>'je','І'=>'I','і'=>'i','Ї'=>'Ji','ї'=>'ji',
Там неправильная транслитерация. А вот ту, что я разместил - корректная, так как заимствована из общепринятых правил
Примеры приведете? В особенности где этот свод правил написан.

Вообще на официальном форуме есть предложение про добавление возможности настраиваемых замен: - можете проголосовать, если действительно есть необходимость в правке.
 
Вот спасибочки за наводку! Теперь поменяю так как надо, а то повставляли этих Jo, j, ja, Sch...

Примеры приведете? В особенности где этот свод правил написан.

Я основывался на правилах транслитерации, когда работал в американской компании и участвовал в одной из её программ по международному обмену.
 
Этот мануал для старых версий Ксени отлично работал, а теперь и не нужно это. :)
 
Спасибо за тему, я тоже менял транслитерацию. Наверно ТС имел ввиду стандарт ISO 9.
 
Ох, ребята, спасибо огромное, прям то, что нужно!! А то реально эта кривая транслитерация напрягает. Теперь переделаю нормально...
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу