(résolu) Ré-écriture URL des catégories du module news : pb d'accents - vincentj - 04/01/2012
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: -1.9.4.3
#~ Url du site :
#~ Hébergeur / Soft : OVH mutualisé
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~
Bonjour à tous,
J'ai suivi un post du forum anglais concernant la ré-écriture des catégories des news :
lien.
Le principe est de créer une balise utilisateur : news_category_url, puis de modifier le template d'affichage et le htacces.
Cela fonctionne super bien à l'exception de la gestion des accents dans les URL's, ils sont systématiquement retiré.
N'étant pas spécialiste de php je pense que le soucis vient de la balise utilisateur :
$name = preg_replace(array("/ /", "/[^A-Za-z0-9-\-]/", "/--/"),array("-", "", "-"),$params['name']);
$id = $params['id'];
echo '/conseils/categorie/'.$id.'/'.$name';
Je précise que la réécriture des titres des news fonctionne sans problème.
Je vous remercie d'avance pour vos lumières.
(résolu) Ré-écriture URL des catégories du module news : pb d'accents -
Jean le Chauve - 04/01/2012
Bonjour,
Une url ne peut pas contenir de caractères spéciaux comme des accents.
Si tu parles du sujet de Viebig (le forum anglais est out pour l'instant) et du post spécifique de Jeremy Bass, ce problème avait été évoqué. Jeremy est anglophone...
Tu pourrais également lire ce post :
http://www.cmsmadesimple.fr/forum/viewtopic.php?id=1457
Si tu désires absolument conserver ta méthode, tu peux ajouter une ligne de code avec strtr(), ce qui remplacera le caractère accentué par son correspondant non accentué :
Code :
$name = strtr($params['name'],'àáâãäçèéêëìíîïñòóôõöùúûüýÿÀÁÂÃÄÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝ',
'aaaaaceeeeiiiinooooouuuuyyAAAAACEEEEIIIINOOOOOUUUUY');
$name = preg_replace(array("/ /", "/[^A-Za-z0-9-\-]/", "/--/"),array("-", "", "-"),$name);
$id = $params['id'];
echo '/conseils/categorie/'.$id.'/'.$name';
(résolu) Ré-écriture URL des catégories du module news : pb d'accents -
bess - 04/01/2012
je confirme : pas d'accent dans les urls, c'est moche, c'est inutile et c'est foireux (exemple : copies une url avec des accents, colles la ligne dans un notepad++ , regardes le résultat, pleures)
(résolu) Ré-écriture URL des catégories du module news : pb d'accents - vincentj - 04/01/2012
Merci pour ta réponse cela m'a indiqué la direction à suivre et après quelques recherches il apparait que strtr() n'est pas le plus approprié avec UTF-8 il vaut mieux utiliser utiliser str_replace() ce qui donne pour mon cas (uniquement le remplacement de minuscules) :
Code :
$name = str_replace(
array(
'à', 'â', 'ä', 'á', 'ã', 'å',
'î', 'ï', 'ì', 'í',
'ô', 'ö', 'ò', 'ó', 'õ', 'ø',
'ù', 'û', 'ü', 'ú',
'é', 'è', 'ê', 'ë',
'ç', 'ÿ', 'ñ',
),
array(
'a', 'a', 'a', 'a', 'a', 'a',
'i', 'i', 'i', 'i',
'o', 'o', 'o', 'o', 'o', 'o',
'u', 'u', 'u', 'u',
'e', 'e', 'e', 'e',
'c', 'y', 'n',
),
$params['name']
);
$name = preg_replace(array("/ /", "/[^A-Za-z0-9-\-]/", "/--/"),array("-", "", "-"),$name);
$id = $params['id'];
echo '/conseils/categorie/'.$id.'/'.$name';
(résolu) Ré-écriture URL des catégories du module news : pb d'accents -
Jean le Chauve - 06/01/2012
Si tu mets la version de ton cmsms à jour, il y a un champ url dans la page de création de l'article.
Le rédacteur devra cependant utiliser des caractères non interdits en attendant un update :
http://dev.cmsmadesimple.org/bug/view/2391
(résolu) Ré-écriture URL des catégories du module news : pb d'accents -
Jean le Chauve - 06/01/2012
Sinon, et à tes risques et périls (il n'est pas recommandé de modifier un fichier core), tu peux ajouter ces deux lignes de code dans les fichiers modules/News/action.addarticle.php et action.editarticle.php (lignes 111 et 121) :
Code :
if( empty($error) && $news_url != '' )
{
//Attention lors de l'update
//suppression des espaces en début et fin de chaîne de caractères
//conversion des espaces internes en tiret
//conversion des caractères interdits dans l'url
$news_url = iconv('UTF-8', 'ASCII//TRANSLIT', trim($news_url));
$news_url = preg_replace(array("/ /", "/[^A-Za-z0-9-\-]/", "/--/"),array("-", "", "-"),$news_url);
// check for starting or ending slashes
if( startswith($news_url,'/') || endswith($news_url,'/') )
{
$error = $this->Lang('error_invalidurl');
}