Уникальный ID для ссылок меню на русском языке

Главные вкладки

Аватар пользователя skill skill 17 апреля 2008 в 1:58

На сайте http://setegnom.com/node/1063 описывается как сделать для каждо ссылки меню уникальный ID, вот код

<?php
function phptemplate_menu_item($mid, $children = '', $leaf = TRUE) {
  $link = menu_item_link($mid);
  $css_id = strtolower(str_replace(' ', '_', strip_tags($link)));
  return '<li id="' . $css_id . '" class="' . ($leaf ? 'leaf' : ($children ? 'expanded' : 'collapsed')) .'">'. $link . $children ."</li>\n";
}
?>

Новот незадача, если ссылка на русском языке, то и ID прописывается тоже на русском языке
<li id="Фото_материалы" class="leaf"><a href="/image">Фото материалы</a></li>
И собственно получается бесполезная вещь, в css хоть добавляй такой ID хоть нет толку не будет.
Вот и вопрос: как сделать так чтобы этот уникальный ID формировался латинскими буквами???

Комментарии

Аватар пользователя skill skill 17 апреля 2008 в 3:04

Сам понимаю, что надо учить php :), но на это надо время, а проблема возникла и решить её надо прямо сейчас. Поэтому и прошу ПОМОГИТЕ. Понимаю что таких здесь ваолом, но тем не менее, ЛЮДИ, внемлите моей просьбе.

Аватар пользователя pchela pchela 17 апреля 2008 в 11:20

а если добавить статическую переменную integer и делать уникальными значения цифровыми? будет работать?

Аватар пользователя jason32 jason32 17 апреля 2008 в 11:38

вставляешь эту функцию например в template.php своей темы<?php
function transliterate($st) {
$st = strtr($st,
"абвгдежзийклмнопрстуфыэАБВГДЕЖЗИЙКЛМНОПРСТУФЫЭ",
"abvgdegziyklmnoprstufieABVGDEGZIYKLMNOPRSTUFIE"
);
$st = strtr($st, array(
'ё'=>"yo", 'х'=>"h", 'ц'=>"ts", 'ч'=>"ch", 'ш'=>"sh",
'щ'=>"shch", 'ъ'=>'', 'ь'=>'', 'ю'=>"yu", 'я'=>"ya",
'Ё'=>"Yo", 'Х'=>"H", 'Ц'=>"Ts", 'Ч'=>"Ch", 'Ш'=>"Sh",
'Щ'=>"Shch", 'Ъ'=>'', 'Ь'=>'', 'Ю'=>"Yu", 'Я'=>"Ya",
));
return $st;
}
?>,
потом указанный код меняешь на
<?php
function phptemplate_menu_item($mid, $children = '', $leaf = TRUE) {
$link = menu_item_link($mid);
$css_id = strtolower(str_replace(' ', '_', strip_tags($link)));
$css_id = transliterate($css_id);
return '

  • '. $link . $children ."
  • \n";
    }
    ?>
    Должно сработать. Могут быть проблемы с UTF-8 - проследи, чтобы translate.php был в ASCII.
    PS сам не пробовал, но должно сработать

    Аватар пользователя skill skill 17 апреля 2008 в 21:49

    jason32, ваш код не смог применить, постоянно проблемы с кодировкой.
    В итоге сделал так :

    setlocale(LC_ALL, 'UTF8');
    function translit ($string)
    {
    $string = strtolower ($string);

    $string = str_replace("А","a",$string);
    $string = str_replace("Б","b",$string);
    $string = str_replace("В","v",$string);
    $string = str_replace("Г","g",$string);
    $string = str_replace("Д","d",$string);
    $string = str_replace("Е","e",$string);
    $string = str_replace("Ё","e",$string);
    $string = str_replace("Ж","zh",$string);
    $string = str_replace("З","z",$string);
    $string = str_replace("И","i",$string);
    $string = str_replace("Й","i",$string);
    $string = str_replace("К","k",$string);
    $string = str_replace("Л","l",$string);
    $string = str_replace("М","m",$string);
    $string = str_replace("Н","n",$string);
    $string = str_replace("О","o",$string);
    $string = str_replace("П","p",$string);
    $string = str_replace("Р","r",$string);
    $string = str_replace("С","s",$string);
    $string = str_replace("Т","t",$string);
    $string = str_replace("У","u",$string);
    $string = str_replace("Ф","f",$string);
    $string = str_replace("Х","kh",$string);
    $string = str_replace("Ц","tc",$string);
    $string = str_replace("Ч","ch",$string);
    $string = str_replace("Ш","sh",$string);
    $string = str_replace("Щ","shch",$string);
    $string = str_replace("Ы","y",$string);
    $string = str_replace("Э","e",$string);
    $string = str_replace("Ю","yu",$string);
    $string = str_replace("Я","ya",$string);
    $string = str_replace("а","a",$string);
    $string = str_replace("б","b",$string);
    $string = str_replace("в","v",$string);
    $string = str_replace("г","g",$string);
    $string = str_replace("д","d",$string);
    $string = str_replace("е","e",$string);
    $string = str_replace("ё","e",$string);
    $string = str_replace("ж","zh",$string);
    $string = str_replace("з","z",$string);
    $string = str_replace("и","i",$string);
    $string = str_replace("й","i",$string);
    $string = str_replace("к","k",$string);
    $string = str_replace("л","l",$string);
    $string = str_replace("м","m",$string);
    $string = str_replace("н","n",$string);
    $string = str_replace("о","o",$string);
    $string = str_replace("п","p",$string);
    $string = str_replace("р","r",$string);
    $string = str_replace("с","s",$string);
    $string = str_replace("т","t",$string);
    $string = str_replace("у","u",$string);
    $string = str_replace("ф","f",$string);
    $string = str_replace("х","kx",$string);
    $string = str_replace("ц","tc",$string);
    $string = str_replace("ч","ch",$string);
    $string = str_replace("ш","sh",$string);
    $string = str_replace("щ","shch",$string);
    $string = str_replace("ы","y",$string);
    $string = str_replace("э","e",$string);
    $string = str_replace("ю","yu",$string);
    $string = str_replace("я","ya",$string);
    $string = str_replace("ъ","",$string);
    $string = str_replace("ь","",$string);
    $string = str_replace("[^<abvgdegziyklmnoprstufieABVGDEGZIYKLMNOPRSTUFIE0123456789>]","_",$string);

    return $string;
    }

    function phptemplate_menu_item($mid, $children = '', $leaf = TRUE) {
      $link = menu_item_link($mid);
      $css_id = strtolower(str_replace(' ', '_', strip_tags($link)));
      return '<li id="' . translit($css_id) . '" class="' . ($leaf ? 'leaf' : ($children ? 'expanded' : 'collapsed')) .'">'. $link . $children ."</li>\n";
    }

    В итоге выводит всё как надо  <li id="foto_materialy" class="leaf"><a href="/image">Фото материалы</a></li>

    Тока если сильно коряво это то прошу поправьте!

    Аватар пользователя skill skill 17 апреля 2008 в 22:41

    Хм... да, где ж вы раньше были, ну ничё думаю на следующем сайте опробую модуль, сдеь уже просто лень :). Да и как-то с предубеждением я отношусь к доп. модулям, мне интуитивно кажется, что чем их меньше, тем лучше, ну то есть если можно обойтись, то лучше не ставить. Хотя может я ошибаюсь.

    Аватар пользователя kiev1 kiev1 18 апреля 2008 в 1:13

    да - я когда то там возмущался что файлы не транслитом на диск пишутся, а теперь добрая душа сделала модуль, но к большому сожалению друпал не исправляет ошибки разработки ядра а для каждого чиха делают отдельный модуль (((