От юзера okolobaxa с удивлением узнал, что ещё никто не выложил решение проблемы русских букв такого полезного модуля, как views_alpha_pager. Попробуем ликвидировать столь досадное упущение и опубликуем здесь, что и как. Осенью сталкивался с этой проблемой и узнал, что почти всегда хватает изменения одной строчки в коде. Итак:
файл views_alpha_pager.module строка где-то так 174-182, вместо
<?php $apage = isset($_GET['apage']) ? substr($_GET['apage'], 0, 1) : ''; ?> пишем
<?php $apage = isset($_GET['apage']) ? $_GET['apage'] : ''; ?>
Также надо добавить где-то <?php setlocale(LC_ALL, 'rus'); ?> - я добавил в начале служебного модуля, можно в начале views_alpha_pager
PS
Вообще то надо узнать свою локаль на вашем сервере. Потребуется название для кириллицы cp1251. Обычно оно приводится в разделе FAQ вашего хостинга, если там его нет, то придется написать запрос в службу поддержки. Другой вариант - перебирать различные комбинации, которые можно встретить в Интернете, путь чаще всего более долгий.
Например, для моего хостинга установка локали cp1251 выглядит так:
setlocale(LC_ALL, 'ru_RU.CP1251');
После этого у меня работает и на локалке, и на хостинге
Комментарии
А тут парились http://drupal.ru/node/7808. Спасибо!
Сделал в видах сортировку по имени материала. Изменил строчку как написано выше. И как были английские буквы, так остались. Что я делаю не так? Опыты провожу тут http://www.megafiles.ru/drupal/video
ссори, кое-что забыл - обновил пост
Ну, наконец-то! Спасибо!
А я еще в прошлом месяце эту тему заводила http://drupal.ru/node/13334
Теперь все отлично работает!
Блин,не работает... точнее вместо русских букв пишет "_",а там уже все с русские ресурсы пошли... Оч надо! Хелп плиззз! Диплом...
Deep Paul
у всех работает - значит и у тебя должно,
<?php setlocale(LC_ALL, 'rus'); ?> надеюсь поставил не внутри функций, а вне их?
поставил в самом начале файла,сразу до всех функций...
странно что не работает у меня
там я нашел есть англ алфавит,добавил к нему еще и русский-все равно не пошло
Это что еще за локаль 'rus' ? Виндовские происки?
Присоеденяюсь к вопросу.
Все сделал по инструкции, русский алфавит в виде не появился. Вместо него были _ и там все русские.
Немного подшаманил и вместо:
setlocale(LC_ALL, 'rus');
поставил другую локаль:
setlocale(LC_ALL, 'ru');
Русский появилсо,но как-то... эм... НЕ ВЕСЬ. Вот так линейка с буквами выглядит сейчас:
А _ К М Н О П С Т У Х Ш Я All
Проверил - материалы на буквы с Б по К есть, но в списке этих букв почему-то нет.
ВОПРОС: Что это было и как полечить?
парни, это все делалось на локалке,то есть на Винде. На Unix-системах ещё не тестил, но думаю несложно найти нужную локаль. Как буду выкладывать свой проект - отпишу, как решил проблему...
Ждем (:
Обновил шапку, теперь средство универсальное - для любых типов сервера
Тоже на днях предстоит. Пока тестю словарь для сайта на английском.
А нужно будет сделать на русском и китайском...
Посмотрю, что у меня получится.
Получилось, спасибо!
Сайт на мастерхосте, http://masterhost.ru/support/doc/php/ вроде как говорит, что локаль ru_RU.CP1251
Проверил setlocale(LC_ALL, 'ru_RU.CP1251') - возвращает не FALSE.
Появились часть букв. Например, "П" есть, а "Л" - нет (черточка).
Убрал в модуле проверку на ctype_alpha:
Вместо
$items[$item->$myfield] = $item->$myfield;
}
elseif (ctype_digit($item->$myfield)) {
$items['0'] = '#';
}
else {
$items['_'] = '_';
}
Вставил
$items['0'] = '#';
else
$items[$item->$myfield] = $item->$myfield;
Все буквы появились. Для "хорошей" буквы П все работает (%D0%9F), для "плохой" буквы Л(%D0%9B) выводит материалы на букву Л и П.
Далее, изменил модуль таким способом:
$where = "$myfield = '$apage'";
И после этого и для "плохих" букв стало работать.
Кому интересно могу рассказать как я это сделал. Использовал только views2 (views_alpha_pager не использовался!!!)
Пример - http://peoplestars.ru/stars
P.S на сайт не смотрите он еще не доделанный
Давай отдельным топиком.
setlocale(LC_ALL, 'ru_RU.CP1251') отключил, так как поиск перестал работать
Или где-то нужно делать setlocale(LC_ALL, 0)?
Хотя, вроде как и без setlocale работает на двух мастерхостовских сайтах(с моими изменениями, описанными выше в этом топике).
Спасибо!
Вставил в скрипт модуля команду
passthru('locale -a | grep ru');
Полученный список доступных локалей вставил в команду
Получил первую подходящую локаль 'ru_RU.CP1251'
В начале модуля вставил
// но от этого действительно пришлось отказаться, так как нарушает работу поиска //
заменил как в шапке-вместо
вставил
Не помогло.
Тогда внес изменения в модуль, предложенные Goodboy
заменил
$items[$item->$myfield] = $item->$myfield;
}
elseif (ctype_digit($item->$myfield)) {
$items['0'] = '#';
}
else {
$items['_'] = '_';
}
на
$items['0'] = '#';
else
$items[$item->$myfield] = $item->$myfield;
действительно, появилась вся линейка букв, но не работает фильтрация - при нажатии на любую букву выводится весь список ( с разбиением на страницы)
заменил, опять же как предложил Goodboy
на
$where = "$myfield = '$apage'";
И вроде всё заработало.
А у меня русская буква "Р" не работает. Вернее в линейке букв она появляется, а материалы на эту букву не выводятся (пусто). Вроде все делал, как описано выше?????
P.S. повторил эксперимент на другой машине, с другой версией Denwer - все заработало
P.S.2 точнее виновником оказался браузер IE v.6*
В данной версии всё, что начинается на цифры, собираются под #, но выводятся подряд - сначала английские, затем русские, например:
14 Zatoichi
34-й скорый
Как бы доработать модуль, чтобы было две # - одна для английских, другая соответственно - для русских окончаний...
не вижу смысла, цифра есть цифра