Fork me on GitHub




(1) 2 »


Astuce : Gestion des url dans vos modules de contenu
Xoops accro
Inscrit: 15/07/2004 11:16
Messages: 4763
Bonjour,
vous l'avez peut-être remarqué sur vos sites : dans les modules de gestion de contenu (edito, news, les forums, etc...), lorsque vous rentrez des adresses de sites (url) trop longues, ça a tendance à défigurer vos présentations de page.

L'astuce était, en principe, d'utiliser les 'bbcode' pour écrire un mot ou bout de phrase, et placer le lien sur ce mot ou bout de phrase précisément, ce qui limitait la taille à l'écran.

C'est un coup de main à prendre, mais pour la majorité des internautes, il est quand même plus simple de juste coller son lien dans le message et de valider, et c'est normal.

Certains forums ont cette faculté de tronquer les adresses trop longues en ajoutant des ... au milieu de l'url, pour ne laisser que le début et la fin de l'adresse (tout en restant cliquable, et pointant vers la bonne destination).
Partant de ce constat, j'ai cherché à reproduire ce comportement sur nos sites xoopsés.

Au départ appliqué seulement à newbbex (1.4), je me suis dit : 'pourquoi ne pas l'appliquer à tout un site'.

Et je pense avoir régler mon souci.
Je vous soumets donc la modification, qui est simple à mettre en place, et me dire si ça vous pose des problèmes ou si au contraire c'est pratique.

Je modifie simplement une seule fonction, dans un seul fichier du core (fichier de xoops lui-même).
Dans le fichier /class/module.textsanitizer.php (pour xoops 2.0.16), je remplace la fonction makeClickable, commençant à la ligne 131 :
function makeClickable(&$text)
    {
        
$patterns = array("/(^|[^]_a-z0-9-="'/])([a-z]+?)://([^, rn"()'<>]+)/i", "/(^|[^]_a-z0-9-="'/])www.([a-z0-9-]+).([^, rn"()'<>]+)/i", "/(^|[^]_a-z0-9-="'/])ftp.([a-z0-9-]+).([^, rn"()'<>]+)/i""/(^|[^]_a-z0-9-="'/:.])([a-z0-9-_.]+?)@([^, rn"()'<>[]]+)/i");
        
$replacements = array("\1<a href="\2://\3" target="_blank">\2://\3</a>", "\1<a href="http://www.\2.\3" target="_blank">www.\2.\3</a>", "\1<a href="ftp://ftp.\2.\3" target="_blank">ftp.\2.\3</a>", "\1<a href="mailto:\2@\3">\2@\3</a>");
        
return preg_replace($patterns$replacements$text);
    }


par celle-ci :
function makeClickable(&$text)
{
$text ' '.$text;//ajoute un espace avant les données à traiter

//expressions à rechercher dans le contenu
$patterns = array("/(^|[^]_a-z0-9-="'/])([a-z]+?)://([^, rn"()'<>]+)/i", "/(^|[^]_a-z0-9-="'/])www.([a-z0-9-]+).([^, rn"()'<>]+)/i", "/(^|[^]_a-z0-9-="'/])ftp.([a-z0-9-]+).([^, rn"()'<>]+)/i""/(^|[^]_a-z0-9-="'/:.])([a-z0-9-_.]+?)@([^, rn"()'<>[]]+)/i");

//chaînes de remplacement, correspondant aux expressions trouvées ci-dessus
$replacements = array("\1<a href="\2://\3" target="_blank">\2://\3</a>", "\1<a href="http://www.\2.\3" target="_blank">www.\2.\3</a>", "\1<a href="ftp://ftp.\2.\3" target="_blank">ftp.\2.\3</a>", "\1<a href="mailto:\2@\3">\2@\3</a>");

//transforme tous les liens textuels du contenu en liens directement cliquables (http, https, ftp, mailto, www)
$text preg_replace($patterns$replacements$text);

//début du traitement des url trop longues
$links explode('<a'$text);//récupère ce qui correspond à des urls dans le contenu
$countlinks count($links);//effectue un décompte des urls pour la boucle à venir
   
for ($i 0$i $countlinks$i++)
   {
    
$link $links[$i];
    
$link = (preg_match('#(.*)(href=")#is'$link)) ? '<a' $link $link;
    
$begin strpos($link'>') + 1;
    
$end strpos($link'<'$begin);
    
$length $end $begin;
    
$urlname substr($link$begin$length);
    
/*
    * Si l'url fait plus de 50 caractères au total (http:// et autres débuts d'url, y compris).
    * L'url est tronquée à partir du 35ème caractère.
    * Et seuls les 10 derniers caractères sont conservés.
    * [...] est placé entre ces 2 parties d'url
    * S'applique seulement aux liens commençant par 'https://', http://', 'ftp://', 'www.'
    * Si l'url <= 50 caractères, elle est affichée en entier.
    */
    
$maxlength 50//longueur au-delà de laquelle une url sera tronquée
    
$cutlength 35//garde les 35 premiers caractères
    
$endlength = -10//garde les 10 derniers caractères de l'url
    
$middleurl "[...]"//symbole placé pour représenter la partie de l'url manquante
    // on garde donc 45 + [...] caractères pour l'affichage (50 en tout)
    
$chunked = (strlen($urlname) > $maxlength && preg_match('#^(https://|http://|ftp://|www.)#is'$urlname)) ? substr_replace($urlname$middleurl$cutlength$endlength) : $urlname;
    
$text str_replace('>' $urlname '<''>' $chunked '<'$text); 
   }
$text substr($text1);//supprime l'espace ajouté en début de script
return($text);
}


Ce code est largement commenté.
Vous n'aurez que 3 paramètres à changer éventuellement :
$maxlength = 50; //longueur au-delà de laquelle une url sera tronquée
$cutlength = 35; //garde les 35 premiers caractères
$endlength = -10; //garde les 10 derniers caractères de l'url
$middleurl = "[...]"; //symbole placé pour représenter la partie de l'url manquante

Que ce soit dans l'affichage normal, ou dans les citations, l'url devrait être tronquée.

Par contre, en mode édition, vous retrouverez l'url complète ce qui vous permettra de la corriger en cas de besoin.

Une fois ce fichier contenant la nouvelle fonction mis en place, l'affichage de vos urls devrait être pris en compte immédiatement (après un rafraîchissement de la page si vous faites des tests).

Les url ressembleront automatiquement à ceci : https://www.frxoops.org/modules/newb[...]32&forum=5
soit : 35 caractères[...]10 caractères

Je me suis basé sur un bout de code, tiré d'un hack pour wordpress. (je mettrai les crédits dès que j'aurais retrouvé les infos là-dessus).

Merci d'avance pour vos retours !

Posté le : 04/06/2007 14:51
Partager Twitter Partagez cette article sur GG+
Re: Astuce : Gestion des url dans vos modules de contenu
Semi pro
Inscrit: 13/12/2004 11:28
De Lyon
Messages: 1364
Je vais tester ca tout de suite et je te ferais un retour

Posté le : 04/06/2007 15:10
Partager Twitter Partagez cette article sur GG+
Re: Astuce : Gestion des url dans vos modules de contenu
Xoops accro
Inscrit: 15/07/2004 11:16
Messages: 4763
merci

Posté le : 04/06/2007 15:13
Partager Twitter Partagez cette article sur GG+
Re: Astuce : Gestion des url dans vos modules de contenu
Semi pro
Inscrit: 13/12/2004 11:28
De Lyon
Messages: 1364
Et ben ca me semble parfait
A intégrer de toute urgence dans votre Xoops.
Merci

Posté le : 04/06/2007 15:47
Partager Twitter Partagez cette article sur GG+
Re: Astuce : Gestion des url dans vos modules de contenu
Xoops accro
Inscrit: 15/07/2004 11:16
Messages: 4763
merci pour le retour

Posté le : 04/06/2007 15:58
Partager Twitter Partagez cette article sur GG+
Re: Astuce : Gestion des url dans vos modules de contenu
Semi pro
Inscrit: 05/06/2004 14:25
Messages: 750
Merci beaucoup!

J'avais cherché à faire quelque chose d'identique pour mon module de tchat, mais ne connaissant pas grand chose aux expressions régulières ça n'avais pas vraiment abouti.

Très pratique!

Posté le : 04/06/2007 16:42
Partager Twitter Partagez cette article sur GG+
Re: Astuce : Gestion des url dans vos modules de contenu
Xoops accro
Inscrit: 15/07/2004 11:16
Messages: 4763
ton très bon module de tchat tu veux dire
du coup je viens de tester dans atchat 0.2 et je viens de voir que ta gestion donne ça :
http://www.frxoop...

si on recharge la page, on passe un moment par ma gestion, avec [...] dans l'url, mais ta présentation reprend le dessus ensuite

Posté le : 04/06/2007 16:50
Partager Twitter Partagez cette article sur GG+
Re: Astuce : Gestion des url dans vos modules de contenu
Semi pro
Inscrit: 22/02/2004 20:41
Messages: 997
merci c'est super . Good Job

Posté le : 04/06/2007 17:18
Partager Twitter Partagez cette article sur GG+
Re: Astuce : Gestion des url dans vos modules de contenu
Semi pro
Inscrit: 04/08/2005 14:16
De Quelque part dans les étoiles...
Messages: 1141
Super astuce...

Merci pour l'info.

Posté le : 04/06/2007 20:32

Il n'y a qu'une chose que vous pouvez changer dans l'Univers : c'est Vous-Même !
Partager Twitter Partagez cette article sur GG+
Re: Astuce : Gestion des url dans vos modules de contenu
Semi pro
Inscrit: 05/06/2004 14:25
Messages: 750
blueteen : Ouais le traitement est fait côté client par le javascript, Je ne sais plus pourquoi, bref quand je me remettrai à bosser sur le module j'en tiendrai compte!

En tout cas merci pour les qualitatifs du module!

Posté le : 06/06/2007 15:37
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant
(1) 2 »



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

82 Personne(s) en ligne (63 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 82 | Plus ...