1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Кириллица в названиях тем, ссылках и кажущиеся проблемы с ЧПУ

Тема в разделе "Основные вопросы по XenForo", создана пользователем Pepelac, 11.10.2010.

Загрузка
  1. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Ссылка поменяется, но для поисковиков это будет не принципиально, т.к. каноническая ссылка останется прежней.
     
    GraD нравится это.
  2. GraD

    GraD Местный

    Регистрация:
    20.05.11
    Сообщения:
    181
    Симпатии:
    49
    Версия XF:
    1.5.2
    проверил реально допустим если у вас название было мойсайт.ру/раздел.1 потом поменял написал не раздел а любоеслово.1 то автоматом открывате правилнуюю старую короче нужную страницу а вот если прописал в Часть URL: на англиском kategori потом поменяли kategori123 то пропадают ссылки. первый вариант прикольно можно смело менять названия разделом ссылка не пропадёт
     
  3. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Кстати, обработка ссылок происходит таким образом, что ссылка http://мойсайт/forum/threads/прикольная-тема.1234 будет равносильна ссылке http://мойсайт/forum/threads/.1234
    Парсер ссылок тупо отбрасывает текстовую часть. Хоть по-китайски там пишите.
    Так что при передаче ссылок кому-либо, можете просто смело вырезать название самой темы. Но не забудьте оставить точку и номер темы. Впрочем, название можете указать абсолютно любое (тут уж можете дофантазировать...) :)
     
    Ra нравится это.
  4. Romchik®

    Romchik® The Power of Dreams Команда форума

    Регистрация:
    26.09.10
    Сообщения:
    5 746
    Симпатии:
    5 311
    Версия XF:
    1.5.18
  5. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    А, ну да, правильно. Точку тоже можно убирать. Это я, когда тренировался, пробовал через thread.номер - не работало. Поэтому как-то упустил из виду, что и точка не обязательна :)
     
  6. Ra

    Ra Местный

    Регистрация:
    06.10.10
    Сообщения:
    97
    Симпатии:
    18
    зенпорта неверно с кириллийцей обращается, ссылки сам генерит кошмарные, спасибо - поукорачиваю теперь!
     
  7. ANGEL OF FIRE

    ANGEL OF FIRE Модератор

    Регистрация:
    06.11.11
    Сообщения:
    395
    Симпатии:
    180
    Версия XF:
    1.1.3
    А почему не сделать так что бы ссылки сразу в латинице были.

    Вот как я к примеру сделал. Не помню откуда брал.

    В файле /library/XenForo/Link.php

    Найти

    Код:
                $title = utf8_romanize(utf8_deaccent($title));
     
            } 
    и добавить ниже

    Код:
            $aPattern = array (
     
                "Dj" => "Đ|Ђ" ,
     
                "dj" => "đ|ђ" ,
     
                "Z" => "Ž|З|Ж" ,
     
                "z" => "ž|з|ж" ,
     
                "C" => "Ć|Č|Ч|Ц|Ћ" ,
     
                "c" => "č|ć|ч|ц|ћ" ,
     
                "S" => "Š|Ш|С" ,
     
                "s" => "š|ш|с" ,
     
                "Dz" => "DŽ|Џ" ,
     
                "dz" => "dž|џ" ,
     
                "B" => "Б" ,
     
                "b" => "б" ,
     
                "V" => "В" ,
     
                "v" => "в" ,
     
                "G" => "Г" ,
     
                "g" => "г" ,
     
                "Nj" => "Њ" ,
     
                "nj" => "њ" ,
     
                "Lj" => "Љ" ,
     
                "lj" => "љ" ,
     
                "D" => "Д" ,
     
                "d" => "д" ,
     
                "I" => "И|Ы|Й" ,
     
                "i" => "и|ы|й" ,
     
                "K" => "К" ,
     
                "k" => "к" ,
     
                "L" => "Л" ,
     
                "l" => "л" ,
     
                "M" => "М" ,
     
                "m" => "м" ,
     
                "N" => "Н" ,
     
                "n" => "н" ,
     
                "P" => "П" ,
     
                "p" => "п" ,
     
                "R" => "Р" ,
     
                "r" => "р" ,
     
                "T" => "Т" ,
     
                "t" => "т" ,
     
                "U" => "У" ,
     
                "u" => "у" ,
     
                "F" => "ф" ,
     
                "f" => "Ф" ,
     
                "H" => "Х" ,
     
                "h" => "х" ,
     
                "A" => "А|Я" ,
     
                "a" => "а|я" ,
     
                "E" => "Е" ,
     
                "e" => "е" ,
     
                "O" => "О" ,
     
                "o" => "о" ,
     
                "H" => "Х" ,
     
                "h" => "х" ,
     
                "J" => "Ј" ,
     
                "j" => "ј" ,
     
            );   
     
            while(list( $key , $value ) = each ( $aPattern ))
     
            {
     
            $title = @ ereg_replace ( $value , $key , $title );
     
            } 

    И самое главное, файл сохранить в кодировке UTF8
     
  8. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    ANGEL OF FIRE, с версии ПХП 5.3.0 функция ereg_replace считается устаревшей.
     
  9. ANGEL OF FIRE

    ANGEL OF FIRE Модератор

    Регистрация:
    06.11.11
    Сообщения:
    395
    Симпатии:
    180
    Версия XF:
    1.1.3
    Ну у нас из кодеров на форуме то есть кто нибудь, есть же замена к примеру

    preg_replace()

    Тут я думаю не много корректировать придётся.
     
  10. Romchik®

    Romchik® The Power of Dreams Команда форума

    Регистрация:
    26.09.10
    Сообщения:
    5 746
    Симпатии:
    5 311
    Версия XF:
    1.5.18
    А в целом решение тебе как?
    И какую функцию в таком случае лучше использовать?
     
  11. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    Решение меня лично отталкивает тем, что надо лезть и править файлы форума. То есть опять же: что ни обновление, то правка кода. Да и что-то мне подсказывает, что регулярку можно бы было в одну слить. Но могу ошибаться.

    Лучше использовать preg_replace.
     
  12. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Не ошибаешься. Действительно можно (и не только можно, а нужно). По крайней мере для preg_replace 100% можно (ereg-ами просто не пользуюсь)
     
    Pepelac нравится это.
  13. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    Ереги отжили уже свое...
     
  14. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    А разве не проще в данном случае использовать str_replace, которая умеет обрабатывать массивы, а также значительно менее ресурсоемкая, чем preg_replace?

    Вдогонку. Правил транслитерации несколько.
     
    Yoskaldyr нравится это.
  15. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    preg_replace насколько мне не изменяет память тоже с массивами работает. А насчет ресурсоемкости да, в обычно str_replace менее ресурсоемкая функция по сравнению с preg_replace, но как раз с массивами могут быть исключения. К тому же если отказываться от регулярок так сразу надо использовать strtr вместо str_replace, т.к. будет однозначно быстрее.
     
  16. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Если нужна и обратная транслитерация, то str_replace будет лучше, так как достаточно сразу будет составить два массива, а затем менять их местами при вызове функции.
    Но strtr, да, работает быстрее. Так что для одностороннего варианта будет однозначно самым быстрым и менее ресурсоемким.
    И в отличие от preg_replace обе функции работают один раз, а не вызываются в цикле.
     
  17. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    preg_replace тоже обрабатывает за раз точно так же как и str_replace
     
  18. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Точно. Ведь там также массивы можно обрабатывать. Короче, делайте, что хотите :)
     
    Yoskaldyr нравится это.
  19. Romchik®

    Romchik® The Power of Dreams Команда форума

    Регистрация:
    26.09.10
    Сообщения:
    5 746
    Симпатии:
    5 311
    Версия XF:
    1.5.18
    Я спросил просто к тому, что если есть решение получше, то уже именно с ним и писать разработчикам.
    Может это реализовать действительно недолго. В vBSEO это делается из админки в итоге. Сам выбираешь замену себе по вкусу. Если бы и здесь сделать то же самое, то вообще круть было бы.
     
  20. SeaSoul

    SeaSoul Местный

    Регистрация:
    24.11.11
    Сообщения:
    132
    Симпатии:
    10
    Версия XF:
    1.1.4
    Подскажите где там искать?
     

Поделиться этой страницей