8796 sujets

Développement web côté serveur, CMS

Bonjour tout le monde,

Je suis sur un projet d'un site web multi-langues, afin d'avoir un style personnalisé pour chaque lien dans mon menu de navigation, j'ai créé une fonction PHP qui génère automatiquement un ID CSS pour chaque item de mon menu, pour ensuite le personnaliser via CSS.

Cette fonction attribue par exemple au lien "[B]Chèque barré[/B]" l'ID : [B]Chquebarr[/B] (en gros,j'enlève les accents et les espaces, je n'autorise que l'alphabet en majuscule et minuscule, ainsi que les chiffres)

Mon problème est avec les autres langues, ce site, je suis entrain de le construire en français, anglais, hongrois et russe. Les 3 premières langues ayant des caractères latin, jusqu'ici, pas de problème, mais avec le russe, ma fonction ne passe pas, et quand je consulte le source de mon site, je vois un que l'id de mon lien russe est vide.

Je me demandais s'il y avait possibilité en PHP de transformer les caractères russes en latins, ou bien tout simplement de créer une fonction qui assigne au liens russe des ID's en caractères latins ?

La fonction que j'ai utilisé pour assigner les ID aux liens est la suivante :


<?php
function phptemplate_menu_item($link, $has_children, $menu = '', $in_active_trail = FALSE, $extra_class = NULL) {
  $class = ($menu ? 'expanded' : ($has_children ? 'collapsed' : 'leaf'));
  if (!empty($extra_class)) {
    $class .= ' '. $extra_class;
  }
  if ($in_active_trail) {
    $class .= ' active-trail';
  }	
$id = preg_replace("/[^a-zA-Z0-9]/", "", strip_tags($link));
  

  

  return '<li id="'.$id2.'" class="'. $class .'">'. $link . $menu ."</li>\n";
}

?>


Bon pour Info, c'est une fonction incluse dans le fichier [B]template.php[/B] que Drupal utilise, car ce site, je suis entrain de le faire avec Drupal.


Merci pour votre aide
Modifié par quicksand (05 Jan 2009 - 13:39)
Salut,

(sujet déplacé dans le bon salon).

Je ne comprends pas très bien ce que tu veux faire : pourquoi ne pas affecter un id différent à chaque lien quelle que soit la langue choisie ?

(au passage la mise en gras se fait avec [ b] et pas [ B]. Smiley cligne )
Tout simplement parce que les élément de mon menu sont générés avec Drupal grâce au module "Menu", si je créé mon menu manuellement ça arrangerais les choses, mais ça m'empecherais de le mettre à jour facilement avec l'interface Drupal
Ah... jamais touché à Drupal. Smiley hmm

Peut-être que tu pourrais t'en sortir avec str_replace.

Ou bien si tu te moques d'avoir un id "significatif", tu pourrais utiliser un simple incrément :
global $iterator;
$iterator++;
$id = 'id_lien_'.$iterator;
Hmm, je ne connais pas Drupal non plus, donc ma réponse est peut-être à coté de la plaque.

Mais ne peux tu pax générer l'id CSS à partir de l'id de l'enregistrement dans ta base de donnée, genre #item42, #item72, etc.

D'ailleurs ta fonction de remplacement des caracteres spéciaux attendra ses limites en cas de site volumineux, il va y avoir des doublons, par exemple "Marre", et "Marrée" vont tout les deux être traduits en "marre".
Heyoan a écrit :
Ah... jamais touché à Drupal. Smiley hmm

Peut-être que tu pourrais t'en sortir avec str_replace.

Ou bien si tu te moques d'avoir un id "significatif", tu pourrais utiliser un simple incrément :
global $iterator;
$iterator++;
$id = 'id_lien_'.$iterator;



@Heyoan : Alors je préfère de loin ta solution, elle m'arrange beaucoup, et c'est d'une simplicité déconcertante.

Merci bcp