На сайте http://setegnom.com/node/1063 описывается как сделать для каждо ссылки меню уникальный ID, вот код
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 формировался латинскими буквами???
Комментарии
транслитерируй. учи PHP
Сам понимаю, что надо учить php :), но на это надо время, а проблема возникла и решить её надо прямо сейчас. Поэтому и прошу ПОМОГИТЕ. Понимаю что таких здесь ваолом, но тем не менее, ЛЮДИ, внемлите моей просьбе.
а если добавить статическую переменную integer и делать уникальными значения цифровыми? будет работать?
транслитерацию можно посмотреть в модуле pathauto
вставляешь эту функцию например в 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 '
\n";
}
?>
Должно сработать. Могут быть проблемы с UTF-8 - проследи, чтобы translate.php был в ASCII.
PS сам не пробовал, но должно сработать
jason32, ваш код не смог применить, постоянно проблемы с кодировкой.
В итоге сделал так :
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>
Тока если сильно коряво это то прошу поправьте!
а есть еще такой чудненький модуль http://drupal.org/project/transliteration
Хм... да, где ж вы раньше были, ну ничё думаю на следующем сайте опробую модуль, сдеь уже просто лень :). Да и как-то с предубеждением я отношусь к доп. модулям, мне интуитивно кажется, что чем их меньше, тем лучше, ну то есть если можно обойтись, то лучше не ставить. Хотя может я ошибаюсь.
да - я когда то там возмущался что файлы не транслитом на диск пишутся, а теперь добрая душа сделала модуль, но к большому сожалению друпал не исправляет ошибки разработки ядра а для каждого чиха делают отдельный модуль (((