news : gestion de l'url

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
#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
#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


Messages dans ce sujet

Atteindre :


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