Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

news : gestion de l'url
#1

Nous avons déjà vu qu'il est possible de modifier les metadata des news dans ces tutos :
http://www.cmsmadesimple.fr/forum/viewtopic.php?id=3558
et http://www.cmsmadesimple.fr/forum/viewtopic.php?id=1457

Depuis la version 1.9+, un champ "url" est maintenant disponible dans la page de création des news.

Mais un rédacteur sans connaissance des règles de l'url va se trouver confronté à des messages d'erreurs s'il insère des caractères interdits comme des espaces, ponctuation ou caractères accentués et ne va généralement pas comprendre quel est le problème...

Il serait également appréciable que si le rédacteur laisse le champ url vide, le titre vienne s'insérer dans l'url après suppression automatique des caractères interdits et des mots de moins de 3 caractères qui allongent inutilement l'url.

Exemple : le titre est "Histoire évolutive de l'œil !!"
l'url deviendra "histoire-evolutive-oeil"

ATTENTION : cette astuce est fortement déconseillée aux développeurs non aguerris car nous devons modifier des fichiers et il faudra vérifier vos mises à jour.


Version cmsms 1.10.2
Ouvrez le fichier modules/News/action.addarticle.php à la ligne 110 (if( empty($error) && $news_url != '' ))
et ajoutez ces quelques lignes :
Code :
if( empty($error) && $news_url != '' )
      {
    //conversion des caractères
    $news_url = iconv('UTF-8', 'ASCII//TRANSLIT', trim($title));
    //suppression des mots inférieurs à 3 caractères, non-représentatifs pour les moteurs de recherche
    $news_url = preg_replace("!\\b\\w{1,3}\\b!", "", $news_url);
    //suppression des caractères interdits dans l'url et tirets consécutifs
    $news_url = strtolower(trim(preg_replace(array("/ /", "/[^A-Za-z0-9-\-]/", "/--/"),array("-", "", "-"),$news_url),"-"));
        
    // check for starting or ending slashes
Ensuite, ajoutez à la fin de cette condition une nouvelle condition à la ligne +/- 149, juste après la fermeture de l'accolade et juste avant
Code :
//
    // database work
    //
Code :
//ATTENTION AJOUT PERSO attention à l'update
//le titre de l'article devient l'url si le champ url est vide
if( empty($error) && $news_url == '' )
       {
    //conversion des caractères
    $news_url = iconv('UTF-8', 'ASCII//TRANSLIT', trim($title));
    //suppression des mots inférieurs à 3 caractères, non-représentatifs pour les moteurs de recherche
    $news_url = preg_replace("!\\b\\w{1,3}\\b!", "", $news_url);
    //suppression des caractères interdits dans l'url et tirets consécutifs
    $news_url = strtolower(trim(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->ShowErrors($this->Lang('error_invalidurl'));
      }

    if( $error === FALSE )
      {
        // check for invalid chars.
        $translated = munge_string_to_url($news_url,false,true);
        if( strtolower($translated) != strtolower($news_url) )
          {
        $error = $this->ShowErrors($this->Lang('error_invalidurl'));
          }
      }

    if( $error === FALSE )
      {
        // make sure this url isn't taken.
        $news_url = trim($news_url," /\t\r\n\0\x08");
        cms_route_manager::load_routes();
        $route = cms_route_manager::find_match($news_url);
        if( $route )
          {
        // we're adding an article, not editing... any matching route is bad.
        $error = $this->ShowErrors($this->Lang('error_invalidurl'));
          }
      }
      }
Comme vous pouvez le constater, il reste du code original qui fait doublon, mais il ne gêne pas, autant le laisser pour la facilité.

Passons maintenant au fichier modules/News/action.editarticle.php et ajoutez le code aux environs de la ligne 121
Code :
if( empty($error) && $news_url != '' )
      {
    //conversion des caractères
    $news_url = iconv('UTF-8', 'ASCII//TRANSLIT', trim($title));
    //suppression des mots inférieurs à 3 caractères, non-représentatifs pour les moteurs de recherche
    $news_url = preg_replace("!\\b\\w{1,3}\\b!", "", $news_url);
    //suppression des caractères interdits dans l'url et tirets consécutifs
    $news_url = strtolower(trim(preg_replace(array("/ /", "/[^A-Za-z0-9-\-]/", "/--/"),array("-", "", "-"),$news_url),"-"));
    // check for starting or ending slashes
Le champ url peut être édité lors d'une modification d'article et sera automatiquement mis à jour dans les règles de l'art.


Have fun Smile
Répondre
#2

l'idée est bonne mais nécessite effectivement la modification des fichiers du noyau.

donc oui je déconseille très fortement cette manip.

Par contre il serait intéressant que calguy implémente ton code Smile
Répondre
#3

Citation :Mais un rédacteur sans connaissance des règles de l'url va se trouver confronté à des messages d'erreurs s'il insère des caractères interdits comme des espaces, ponctuation ou caractères accentués
alors dans ce cas il faut d'abord éduquer le rédacteur et non lui laisser faire les c...ries ;

Citation :donc oui je déconseille très fortement cette manip.
Bien sur c'est il ne faut surtout pas utiliser ce truc, qui part d'un "bon sentiment"

J-C Etiemble v 2.2.xx
Répondre
#4

Sauf si tu sais ce que tu fais et que c'est toi qui gère les updates :p

Parce qu'éduquer un rédacteur, laisse-moi rire, le lendemain il a déjà oublié où il a mis le manuel et, généralement, c'est un autre qui s'y colle le mois suivant, quand il ne délègue pas son job à la nouvelle stagiaire. Depuis le temps que je travaille dans ma petite asbl, je connais les humains, ils ne veulent pas que tu leur expliques, ils veulent juste que tu répares l'erreur, quitte à te rappeler la semaine suivante.
Répondre
#5

@Jean Le Chauve : nous ne critiquons pas le fait qu'un rédacteur par définition est mal poli et qu'il oublis ce que tu lui as dit la veille.

Là où ça coince c'est que la team org refuse tous les posts relatif à du hack de fichier du code source. Et même si l'on a aucun couteau sous la gorge pour rédiger nos règles sur le forum je dois admettre que je suis complètement d'accord avec eux : pas de hack de fichier source.

Alors que faire dans notre cas : conserver cela sous la main, prévenir en gros rouge gras que c'est hyper dangereux de faire ces manipulations sans une bonne et solide expérience et surtout surtout surtout aller gueuler sur Calguy pour qu'il implémente ton code

Bref pour moi le débat doit être ailleurs.

AMHA Wink
Répondre
#6

Le rouge était déjà en place, je rajoute le gras :lol:
Répondre
#7

Le code peut être simplifié.

Mais surtout, je crois voir un problème sur le code natif...

La vérification de l'existence de l'url ne se fait que sur les pages sans inclure les news elles même.

Il est donc possible de créer des news avec la même url (en mode édition ou création).

Info notifiée à CG.

Merci de me confirmer cela (vu que je modifie beaucoup le core...histoire de voir si cela vient seulement de mon côté)


Un autre bug sur le module news (peut-être déjà corrigé)

Dans les options :

Autoriser seulement le téléchargement des fichiers avec ces extensions : gif,png,jpeg,jpg.... (sensible à la casse !)
Répondre
#8

Citation :Il est donc possible de créer des news avec la même url (en mode édition ou création).
démonstration ??

Peut être avec le même titre mais surement pas avec la même URL

Citation :vu que je modifie beaucoup le core
????!!*#**

J-C Etiemble v 2.2.xx
Répondre
#9

Titre news 1 = titre1 url=news-1

Titre news 2 = titre2 url=news-1

Pour moi ça passe, pas d'indication d'erreur, sauf que les liens pointent affichent le contenu de la news 2.
Impossible d'afficher la news 1...


En passant, je note la remarque "créer le même titre surement"... ça aussi on ne devrait pas pouvoir le faire..(pas testé).


désolé... je voulais dire "je modifie beaucoup le corps du programme" et non core en anglais...hum

Hack dans tous les sens, (restrictions de modifications de menus, titres, pages, modules etc...) j'ai peut-être ouvert une restriction sur les news...mais j'en doute

Je vais réinstaller une version propre pour vérifier.
Répondre
#10

Testé sur version propre 1.10.2 avec ou sans réécriture des URL.

Duplication d'url confirmée.

Idem pour les titres.

...et de votre côté ?
Répondre
#11

La duplication d'url sera corrigée avec la prochaine version 1.11.
Répondre
#12

Merci Smile
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)