Joomla 1.5 Mosets Tree v.2* Проблема с кириллицей в альфа-индексе и формой на фронте...

Тема в разделе "Каталоги, конструкторы контента, управление", создана пользователем Creative, 15.01.2009.

  1. Creative
    Offline

    Creative Недавно здесь

    Регистрация:
    04.12.2007
    Сообщения:
    16
    Симпатии:
    2
    Пол:
    Мужской
    Здравствуйте, друзья.
    Делаю сайт - доску объявлений. Джумла 1.5.8, МосетсТри 2.0.9.

    Первая проблема (не ново): нет русского альфа-индеска
    Нашёл два варианта решения в сети:
    I. Ручное добавление в датабазу:
    Код (PHP):
    1. 1.  Откройте базу данных, найдите таблицу jos_mt_config и внесите в поле value параметра alpha_index_additional_chars нужные вам дополнительные символы (например: АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩ ЭЮЯ)
    2. теперь они будут у вас на сайте отображаться крякозябрами, ибо разработчики используют функцию substr, которая некорректно работает с utf-8 строками
    3. 2.  открываем файл Savant2_Plugin_listalphaindex.php и в функции function plugin($seperator=' | ') меняем substr на mb_substr, strlen на mb_strlen и перед циклом приписываем mb_internal_encoding("UTF-8");


    II: Правка шаблона
    Код (PHP):
    1. 1.  файл components/com_mtree/templates/шаблон/sub_alphaIndex.tpl.php в начале файла добавляем:
    2. <?php echo $this->plugin('listalpha', '0') ?> |
    3. <?php echo $this->plugin('listalpha', 'А') ?> |
    4. <?php echo $this->plugin('listalpha', 'Б') ?> |
    5. <?php echo $this->plugin('listalpha', 'В') ?> |
    6. <?php echo $this->plugin('listalpha', 'Г') ?> |
    7. <?php echo $this->plugin('listalpha', 'Д') ?> |
    8. <?php echo $this->plugin('listalpha', 'Е') ?> |
    9. <?php echo $this->plugin('listalpha', 'Ё') ?> |
    10. <?php echo $this->plugin('listalpha', 'Ж') ?> |
    11. <?php echo $this->plugin('listalpha', 'З') ?> |
    12. <?php echo $this->plugin('listalpha', 'И') ?> |
    13. <?php echo $this->plugin('listalpha', 'Й') ?> |
    14. <?php echo $this->plugin('listalpha', 'К') ?> |
    15. <?php echo $this->plugin('listalpha', 'Л') ?> |
    16. <?php echo $this->plugin('listalpha', 'М') ?> |
    17. <?php echo $this->plugin('listalpha', 'Н') ?> |
    18. <?php echo $this->plugin('listalpha', 'О') ?> |
    19. <?php echo $this->plugin('listalpha', 'П') ?> |
    20. <?php echo $this->plugin('listalpha', 'Р') ?> |
    21. <?php echo $this->plugin('listalpha', 'С') ?> |
    22. <?php echo $this->plugin('listalpha', 'Т') ?> |
    23. <?php echo $this->plugin('listalpha', 'У') ?> |
    24. <?php echo $this->plugin('listalpha', 'Ф') ?> |
    25. <?php echo $this->plugin('listalpha', 'Х') ?> |
    26. <?php echo $this->plugin('listalpha', 'Ц') ?> |
    27. <?php echo $this->plugin('listalpha', 'Ч') ?> |
    28. <?php echo $this->plugin('listalpha', 'Ш') ?> |
    29. <?php echo $this->plugin('listalpha', 'Щ') ?> |
    30. <?php echo $this->plugin('listalpha', 'Ы') ?> |
    31. <?php echo $this->plugin('listalpha', 'Э') ?> |
    32. <?php echo $this->plugin('listalpha', 'Ю') ?> |
    33. <?php echo $this->plugin('listalpha', 'Я') ?>
    34. <br/><br/>
    35. <?php echo $this->plugin('listalpha', '0') ?> |
    36. <?php echo $this->plugin('listalpha', 'A') ?> |
    37. <?php echo $this->plugin('listalpha', 'B') ?> |
    38. <?php echo $this->plugin('listalpha', 'C') ?> |
    39. <?php echo $this->plugin('listalpha', 'D') ?> |
    40. <?php echo $this->plugin('listalpha', 'E') ?> |
    41. <?php echo $this->plugin('listalpha', 'F') ?> |
    42. <?php echo $this->plugin('listalpha', 'G') ?> |
    43. <?php echo $this->plugin('listalpha', 'H') ?> |
    44. <?php echo $this->plugin('listalpha', 'I') ?> |
    45. <?php echo $this->plugin('listalpha', 'J') ?> |
    46. <?php echo $this->plugin('listalpha', 'K') ?> |
    47. <?php echo $this->plugin('listalpha', 'L') ?> |
    48. <?php echo $this->plugin('listalpha', 'M') ?> |
    49. <?php echo $this->plugin('listalpha', 'N') ?> |
    50. <?php echo $this->plugin('listalpha', 'O') ?> |
    51. <?php echo $this->plugin('listalpha', 'P') ?> |
    52. <?php echo $this->plugin('listalpha', 'Q') ?> |
    53. <?php echo $this->plugin('listalpha', 'R') ?> |
    54. <?php echo $this->plugin('listalpha', 'S') ?> |
    55. <?php echo $this->plugin('listalpha', 'T') ?> |
    56. <?php echo $this->plugin('listalpha', 'U') ?> |
    57. <?php echo $this->plugin('listalpha', 'V') ?> |
    58. <?php echo $this->plugin('listalpha', 'W') ?> |
    59. <?php echo $this->plugin('listalpha', 'X') ?> |
    60. <?php echo $this->plugin('listalpha', 'Y') ?> |
    61. <?php echo $this->plugin('listalpha', 'Z') ?>
    62. 2.  файл components/com_mtree/Savant2/Savant2_Plugin_listalpha.php ищем (строка 26) :
    63.  
    64.  
    65. if ( eregi("[a-z0]{1}[0-9]*", $start) ) {
    66.  
    67. меняем на:
    68.  
    69. if ( eregi("[a-z0А-Я\Ё]{1}[0-9]*", $start) ) {
    70. 3.  файл components/com_mtree/mtree.php ищем (около строки 852) :
    71.  
    72.  
    73. } elseif ( eregi("[a-z0-9]{1}[0-9]*", $start) ) {
    74.  
    75. меняем на:
    76.  
    77. } elseif ( eregi("[a-z0А-Я\Ё]{1}[0-9]*", $start) ) {
    78.  
    79. 4.  файл components/com_mtree/mtree.php ищем (около строки 41) :
    80.  
    81.  
    82. $start = substr(trim( mosGetParam( $_REQUEST, 'start', '' ) ), 0, 1);
    83.  
    84. меняем на:
    85.  
    86. $start = trim( mosGetParam( $_REQUEST, 'start', '' ) );
    87. $start=urldecode($start);
    88. $start = substr($start, 0, 1);


    Оба варианта работают (после подключения соответствующей библиотеки PHP). Русский алфавит появился. Но ссылки не работают! :( Ведут в пустоту. Выскакивает сообщение "The page you are trying to access does not exist.
    Please select a page from the Main Menu."
    Пожалуйста помогите решить проблему.

    Вторая проблема (не так горит как первая, но всё же...): как сделать разные поля ввода для добавления объявления с фронта в разные рубрики?
    То есть. Например, в рубрике "авто" имел бы смысл сделать чекбокс АКПП/Механика, Лист Год_выпуска и т.п., а в Работа/вакансии нужны естессно совсем другие поля. Создаются поля там просто, но шаблон единый для всех рубрик. Подскажите плиз, как сделать и назначить разные "шаблоны формы добавления для разных рубрик.
    Заранее спасибо.
    P.s. Прошу прощения у авторов двух вышеописанных рецептов за нарушение авторских прав.
     
  2.  
  3. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 356
    Симпатии:
    370
    Пол:
    Мужской
    А также все strtolower на mb_strtolower.
    И вообще, скажу я вам - использовать Mtree на UTF-8 сайте (в Joomla 1.5) - мазохизм, особенно при наличии кириллицы. Mtree в Joomla 1.5 работает в режиме совместимости, но из-за UTF надо переделать множество функций, чтобы использовались функции mbstring.


    В общем такое решение для первого варианта только для Joomla 1.5:
    1. mtree.php
    1.1. Чтобы в title всегда по-русски была искомая буква, меняем
    Код (PHP):
    1. $mainframe->setPageTitle( sprintf($_MT_LANG->LIST_ALPHA_BY_LISTINGS_AND_CATS, strtoupper($alpha), $cat_name) );

    на
    Код (PHP):
    1. $mainframe->setPageTitle( sprintf($_MT_LANG->LIST_ALPHA_BY_LISTINGS_AND_CATS, mb_strtoupper($alpha), $cat_name) );


    1.2. Ниже строки
    Код (PHP):
    1. # Alphabets (A-Z)

    находим
    Код (PHP):
    1. strpos($mtconf->get('alpha_index_additional_chars'),strtolower($alpha))

    и меняем на
    Код (PHP):
    1. mb_strpos($mtconf->get('alpha_index_additional_chars'),$alpha)

    (приведена часть строки)

    2. Savant2_Plugin_listalphaindex.php
    2.1. Меняем
    Код (PHP):
    1. $html .= sefRelToAbs("index.php?option=com_mtree&task=listalpha&alpha=".strtolower($char)."&cat_id=".$cat_id."&Itemid=".$Itemid);

    на
    Код (PHP):
    1. $html .= sefRelToAbs("index.php?option=com_mtree&task=listalpha&alpha=".urlencode($char)."&cat_id=".$cat_id."&Itemid=".$Itemid);

    2.2. После
    Код (PHP):
    1. $default_chars = array('0-9','A','B');

    добавляем
    Код (PHP):
    1. mb_internal_encoding("UTF-8");


    2.3. Ниже меняем strlen на mb_strlen, а substr на mb_substr
    2.4. Можно добавить
    Код (PHP):
    1. echo '<br /><br />';

    перед
    Код (PHP):
    1. if($mtconf->get('alpha_index_additional_chars') != '') {

    чтобы русский индекс был строкой ниже

    3. page_listAlpha.tpl.php
    Меняем strtoupper на mb_strtoupper

    4. Как было сказано выше:

    Для Joomla 1.0.x:
    Делаем написанное в пунктах 1.2, 2.1, 2.4 и 4
    НО в п.1.2 надо менять
    Код (PHP):
    1. strpos($mtconf->get('alpha_index_additional_chars'),strtolower($alpha))

    на
    Код (PHP):
    1. strpos($mtconf->get('alpha_index_additional_chars'),urldecode($alpha))
     
    Последнее редактирование: 21.04.2009
  4. Creative
    Offline

    Creative Недавно здесь

    Регистрация:
    04.12.2007
    Сообщения:
    16
    Симпатии:
    2
    Пол:
    Мужской
    @OlegM, спасибо огромное! Выручил.
    Всё отлично заработало, даже поисковый модуль! В общем тысяча благодарностей.
     
    Последнее редактирование модератором: 05.04.2014
  5. Offline

    vitalka2008 Недавно здесь

    Регистрация:
    14.01.2009
    Сообщения:
    28
    Симпатии:
    0
    Пол:
    Мужской
    sourpuss - есть ли вариант решения для Joomla 1.0 ?:[
     
    Последнее редактирование модератором: 05.04.2014
  6. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 356
    Симпатии:
    370
    Пол:
    Мужской
    Делай пункты 1.2, 2.1, 2.4 и 4
    В п.1.2 надо менять
    Код (PHP):
    1. strpos($mtconf->get('alpha_index_additional_chars'),strtolower($alpha))

    на
    Код (PHP):
    1. strpos($mtconf->get('alpha_index_additional_chars'),urldecode($alpha))
     
    Последнее редактирование: 21.04.2009
  7. Dead Krolik
    Offline

    Dead Krolik специалист

    Регистрация:
    13.04.2007
    Сообщения:
    3 688
    Симпатии:
    101
    Пол:
    Мужской
    Хм. Ваще-то лучше использовать класс JString, т.е. JString::strlen()
     
  8. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 356
    Симпатии:
    370
    Пол:
    Мужской
    Я не знаю, чем лучше JString::strlen(), если в итоге она всё равно использует mb_strlen, но Dead Krolik плохого не посоветует!
     
  9. Offline

    decomte Недавно здесь

    Регистрация:
    14.02.2009
    Сообщения:
    1
    Симпатии:
    0
    Короче, все переделал, вот файлики в J 1.0 которые надо заменить и все заработает как надо
     

    Вложения:

  10. Offline

    vitalka2008 Недавно здесь

    Регистрация:
    14.01.2009
    Сообщения:
    28
    Симпатии:
    0
    Пол:
    Мужской
    Спасибо!:[
     
  11. Offline

    stilbox Недавно здесь

    Регистрация:
    20.01.2009
    Сообщения:
    2
    Симпатии:
    0
    Ничего не понимаю... Мистика какая-то. Я и до этого делал, используя разные способы - результат всегда один и тот же: при клике на любую букву выводятся все материалы и категории, начинающиеся на букву "Р". Думал с твоими файлами ситуация изменится - ничего подобного. Всё по прежнему. Joomla 1.0.15RE, Mosets Tree 2.0.9
    Есть какие-нибудь мысли по этому поводу?..
     
  12. Offline

    stasys Недавно здесь

    Регистрация:
    30.03.2009
    Сообщения:
    6
    Симпатии:
    0
    Пол:
    Мужской
    Большео спасибо sourpuss, и мне помогло
     
  13. Offline

    Shellest Недавно здесь

    Регистрация:
    19.04.2009
    Сообщения:
    6
    Симпатии:
    0
    на Joomla! 1.0.15 и mTree 2.0.9
    альфа индекс по клику на русских буквах выдает категорию Р =O
     
  14. Offline

    Shellest Недавно здесь

    Регистрация:
    19.04.2009
    Сообщения:
    6
    Симпатии:
    0
    а что еще надо? (я просто не в курсе)
    после установки файлов для Джумлы 1.0 описанных здесь для руссификации mTree 2.0.9 в альфа индексе появляются русские буквы, но при нажатии на любую русскую букву выдает категорию "Р" (эр - русская)...
     
    Последнее редактирование модератором: 05.04.2014
  15. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 356
    Симпатии:
    370
    Пол:
    Мужской
    Не стОит скачивать те файлы! Они отличаются от оригинальных.

    Надо вручную делать написанное в пунктах 1.2, 2.1, 2.4 и 4
    НО в п.1.2 надо менять
    Код (PHP):
    1. strpos($mtconf->get('alpha_index_additional_chars'),strtolower($alpha))

    на
    Код (PHP):
    1. strpos($mtconf->get('alpha_index_additional_chars'),urldecode($alpha))
     
    Последнее редактирование: 21.04.2009
  16. Offline

    dar888 Недавно здесь

    Регистрация:
    23.08.2009
    Сообщения:
    15
    Симпатии:
    0
    Пол:
    Мужской

    Fatal error: Call to undefined function mb_strtoupper() in Z:\home\gypocrat.local\www\components\com_mtree\mtree.php on line 898

    вот что выдает после всех действий версия 2.9
     
    Последнее редактирование модератором: 05.04.2014
  17. Wolfstalk
    Offline

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

    Регистрация:
    30.01.2009
    Сообщения:
    152
    Симпатии:
    4
    Пол:
    Мужской
    sourpuss, делаю все как описано, даже проверял, выдает ошибку:
    Код (PHP):
    1. Fatal error: Call to undefined function mb_internal_encoding() in Z:\home\alwall-real.ru\www\components\com_mtree\Savant2\Savant2_Plugin_listalphaindex.php on line 36

    Joomla1.5
     
  18. OlegM
    Offline

    OlegM Russian Joomla! Team Команда форума

    Регистрация:
    12.04.2007
    Сообщения:
    4 356
    Симпатии:
    370
    Пол:
    Мужской
    Wolfstalk, возможно у тебя нет поддержки mbstring. Смотри в параметрах PHP
     
  19. Wolfstalk
    Offline

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

    Регистрация:
    30.01.2009
    Сообщения:
    152
    Симпатии:
    4
    Пол:
    Мужской
    sourpuss, да оно верно спасибо
     
  20. Offline

    kdvbpspr Недавно здесь

    Регистрация:
    04.12.2008
    Сообщения:
    1
    Симпатии:
    0
    Пол:
    Мужской
    Подскажите пожалуйста! А для версии 2.1.3 подойдёт данный вариант?
     
  21. EmperorTigr
    Offline

    EmperorTigr Недавно здесь

    Регистрация:
    07.03.2009
    Сообщения:
    12
    Симпатии:
    0
    Пол:
    Мужской
    Интересует тоже самое что и kdvbpspr
     

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

Загрузка...