Создаю дополнительные поля в профиле пользователя, используя стандартный модуль profile. Значения полей на русском языке. Хочу реализовать функционал "интересов", когда пользователь перечисляет свои интересы у себя в профиле и, кликнув по ссылке на "интерес", можно получить список пользователей, имеющих такой же. Все это реализуетсяи работает, но есть косяк: это url-ы, которые генерирует при этом друпал. Текст интереса он передает прямо в url, а т.к. тот на русском, то он перекодирует слово в абракадабру типа %D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F.
Вопросы
а) Как этого избежать?
б) Можно ли хотя бы транслитерировать это каким-то образом?
в) Как обрисовать проблему на drupal.org чтобы они к выходу 7 версии придумали решение?
Комментарии
хммм, как-то непривычно от вас вопросы тут видеть. обычно наоборот решения выкладываете. но тем не менее, к вопросу присоединюсь.
и добавлю к п.3 - а в чем сложность в описании проблемы? С переводом на английский могу всегда помочь.
+ 1000!!!
Очень важная проблема, может и поближе, чем к 7ке сделают?
п.2 Я когда-то давно задавала такой вопрос, ответа никто не дал, как это сделать, вроде через новые токены, а потом в пазауто. http://drupal.ru/node/20617
Если найдете решение, выложите пож-ста, многие будут благодарны!
б) Можно ли хотя бы транслитерировать это каким-то образом? сами же и ответили-- модулек есть транслитерации. жуткий правда. еще его не пробовал тока глянул-ужаснулся-оставил на потом.
А с помощью чего реализуется вся система показа людей с одинаковыми интересами?
Где-нибудь хранится сам путь до i-го интереса?
Если храниться в $your_path, то можно взять код из pathauto.inc (132 строка - функция преобразования пути)
Наверно можно просто использовать pathauto_cleanstring($your_path)
А можно и выдрать оттуда код транслитерации:
static $i18n_loaded = false;
static $translations = array();
// находим файл с правилами транслитерации
if (!$i18n_loaded) {
$path = drupal_get_path('module', 'pathauto');
if (is_file($path .'/i18n-ascii.txt')) {
// перегоняем все в массив замен
$translations = parse_ini_file($path .'/i18n-ascii.txt');
}
$i18n_loaded = true;
}
// заменяем все вхождения массива $translations в строку $output
$output = strtr($output, $translations);
на выходе $output получиться в транслите.
В той же функции pathauto_cleanstring() идет обработка слешей.
а надо это? поисковики се равно прочтут ваше слово "Россия", а современные браузеры покажут его и так правильно
не эстетично. ссылку такую в аське видели?
А как такую "эстетичную" ссылку будет видеть человек у которого нет шрифтов с поддержкой кирилицы(ифрита,фарси, и т.д.)?
Вот и я говорю - транслитерировать надо.
Вариантов транслитерации только же сколько и кодировок в великом и могучем... Начиная от почтовой, гостовской и т.д.
Лучше уж так Чем увидеть что-то непотребное на русском после двойного преобразования.
Продублировал на .Орге. Посмотрим, что отцы посоветуют с высоты своего полета.
Думаю, как трансдитеировать - это дело личное и кстомизируемое. Опять же, есть транслитерация по ГОСТу
Как вы представляете себе кастомизируемую ссылку? Один захочет свой URL по госту, другой по почтовому транслитерировать в итоге - половина людей увидет в броузере абсолютно разные адреса
Видимо, для наших англоязычных товарищей это никакая не проблема.
Обе половины людей увидят один адрес - тот, который определит владелец сайта, исходя из своих соображений. Я не против, если это будет http://drupal.ru/profile/country/rossia
Блин, столько разговоров и ничего не ясно. Как транслитерировать-то?
Нужно менять схему базы данных.
В профилях есть только две таблицы profile_fields и profile_values.
Тупо нет места, где хранить транслитерированный url.
К тому же, как сказал Дрис на последнем своем выступлении на DrupalCon DC (http://buytaert.net/state-of-drupal-presentation-march-2009), модуль profile будет успешно похоронен в связи с использованием "fields in core".
Уж и надгробную плиту сделали (Взято из презентации Дриса).
А может стоило и в Pathauto в feature request прицепить, ссылаясь...