Pourquoi utiliser les raccourcis de SPIP pour formater les liens internes ?
L’usage des raccourcis SPIP pour formater les liens internes permet :
- de styler différemment les liens internes des liens externes.
- de ne pas dépendre de l’URL du site.
- de ne pas dépendre de l’URL des objets.
- de permettre d’exporter facilement vers d’autres support que du Web [1].
Comment fonctionne le plugin
Le plugin s’installe comme n’importe quel plugin.
Lors de la validation d’un formulaire de rédaction d’un objet (article, rubrique etc.), le plugin vérifie les liens internes. Tout lien commençant par l’URL du site (par exemple http://www.example.com
) sera analysé pour vérifier qu’il ne s’agit pas d’un objet SPIP. L’analyse se base sur la configuration du type d’URL. Autrement dit si un rédacteur copie-colle l’URL de la page publique d’un article, le plugin va le repérer.
Il va alors transformer automatiquement le lien, en mettant le raccourci SPIP correspondant :
- [texte->xxx]
s’il s’agit de l’article xxx.
- [texte->autxxx]
s’il s’agit de l’auteur xxx.
- [texte->rubxxx]
s’il s’agit de la rubrique xxx.
- [texte->objetxxx]
s’il s’agit de l’objet xxx.
Le plugin a été testé avec tous les types d’URL de SPIP, y compris les URLS arborescentes. N’hésitez pas cependant à faire part de tous cas problématiques.
Prise en compte d’autres domaines
Par défaut, le plugin reconnait toutes les urls sur le domaine où est installé le site [2].
Si votre site est accessible avec et sans www, en http et en https, si vous avez des alias (noms de domaines équivalents) [3], ces variantes d’urls ne seront pas reconnues.
Dans ce cas, vous pouvez définir avec une constante une liste de domaines supplémentaires considérés comme locaux.
Par exemple, dans config/mes_options.php :
define('CORRECTION_LIENS_INTERNES_AUTRES_DOMAINES', 'http://domaine.tld,
https://www.domaine.tld, http://www.domaine2.tld/');
Plugin Multi-domaines
Si le plugin multi-domaines est activé, le plugin le reconnait automatiquement et tous les domaines déclarés dans la configuration multi-domaines sont considérés comme des domaines locaux, les liens absolus comprenant ces domaines sont transformés en raccourcis SPIP.
Discussions par date d’activité
10 discussions
Ciao
J’ai repris un site dont le contenu est rempli de copié/collé d’url internes.
Du coup j’ai installé le plugin et tenté de sauvegarder une rubrique ayant des liens internes complets.
Une fois enregistré la rubrique n’est pas corrigée.
Le cas est une liste de la forme :
URL_SITE étant bien l’url présente dans la configuration du site.
SPIP 4.2.4 et php 8.1.21
Est ce que je suis dans un cas non pris en compte par le plugin ?
Oui, le plugin ne corrige que les liens marqués avec le code SPIP
[->]
, pas le code HTML.Il faudrait que tu passe un coup de « sale » pour transformer le HTML en raccourcis SPIP.
Hello
Merci pour le retour.
Je vais voir si je peux faire un patch car c’est un cas de figure qui me semble licite.
Si on copie/colle une url c’est qu’on n’est pas à l’aise avec la syntaxe de SPIP.
J’ai pas de mal de cas où cela fini en html car si on passe au niveau de copier/coller un lien interne c’est qu’on ne sait pas écrire en SPIP du tout. :)
Je pense vraiment qu’il faudrait dans ce cas s’appuyer plutot sur sale, Peut être faudrait-il que ce sot le plugin sale qui fasse, sur demande, la correction en base.
Certes, mais si on copie colle une url en la mettant explicitement dans le href d’une balise
<a>
dans le texte d’un article, c’est qu’on sait un peu ce qu’on fait en écrivant du html brut, qui débraye donc les mécanismes natifs.Pour moi ça sort du cadre de ce plugin.
Hello
Pas de problème.
Pour ma part je ne vois pas trop de différence entre une personne qui fait un copié/collé/ d’une url et qui l’intègre via porte plume qu’une personne qui copie/colle en connsaisant vaguement html. Dans les 2 cas l’url interne ne respecte pas le formalisme rédactionnel.
La majorité l’emporte, je me code ça dans mon coin :)
Moi surtout ce qui me fait tiquer, c’est pourquoi corriger les
<a>
et pas le reste du balisage HTML ?C’est pour ca que pour moi ca releverait plutot du plugin sale, quitte à ce que correction_liens_interne passe après.
Répondre à ce message
Je n’utilise pas le plugin mais je vois que le code de correction_liens_internes_correction utilise la fonction create_function qui est obsolète dans ph 7.2 et a disparu de php 8.0 cf https://www.php.net/manual/fr/function.create-function.php
Répondre à ce message
Bonjour,
En passant de la version 1.5.1 à la version 1.6.0, je constate des dysfonctionnements dans les newsletters.
En effet, les urls sont modifiées.
Au lieu d’avoir :
https://www.mondomaine.ext/url-propre-de-mon-article
j’obtiens :
https://www.mondomaine.ext/[->45]
où 45 est l’identifiant de l’article.
Idem pour le lien de consultation de l’infolettre qui devient
https://www.mondomaine.ext/[->newsletter10]
Une idée de correctif svp ?
Heu, je ne reproduis pas.
CHez moi c’est transformé en
[->45]
, sans aucun element parasite devant, si bien qu’après j’ai bel et bien l’url correcte.Donc deja 2 questions
1. Est-ce que cela arrive aussi lorsque tu rédige des articles
2. Est-tu en multidomaine, ou autre joyeuseté
Pour la rédaction d’article, aucun souci.
Pas de multidomaines.
L’url donnée, c’est celle lors de la réception du mail, car il y a un filtre
|parametre_url{utm_source,newsletter}
qui est appliqué à#URL_ARTICLE
et#URL_NEWSLETTER
Cela est induit par le filtre final
#FILTRE{newsletters_liens_absolus}
Et tout fonctionnait correctement avant l’update du plugin.
D’ailleurs, en le désactivant, les urls sont correctes de nouveau.
Mais je ne saisi pas les raisons :(
Ah. C’est donc pas dans ce que tu rédige, mais dans le gabarit de l’infolettre, c’est ca ?
Oui.
En fait, que ce soit dans le gabarit ou dans la rédaction rien n’a changé.
J’ai exactement le même problème avec ce plugin et les newsletters. Si, dans un texte destiné à la newsletter, j’écris :
J’obtiens l’HTML
Pareil à partir du squelette de la newsletter, avec un code comme :
Mais ça fonctionne correctement si je ne mets pas de paramètres URL.
Pouvez vous tester la branche https://git.spip.net/spip-contrib-extensions/correction_liens_internes/src/branch/bug_infolettre ?
Testé et approuvé. 👍
Testé et approuvé aussi, merci.
La v1.6.1 applique le correctif.
Répondre à ce message
Bonjour,
En passant d’une version 1.5.1 à la version 1.6.0, le plugin modifie les liens dans les newsletters.
De fait, il ne sont plus fonctionnels.
Au lieu d’avoir :
https://www.mondomaine.ext/url-propre-de-mon article
j’obtiens ;
https://www.mondomaine.ext/article 45
où « 45 » est l’identifiant de l’article.
Mais cela se pose aussi sur le lien pour consulter la newsletter en ligne :
https://www.mondomaine.ext/newsletter10
Une idée de résolution svp ?
Répondre à ce message
Ce plugin est parfait :)
Merci.
Serait-il possible de prendre en compte le traitement sur le champ « redirection » ?
si j’ai du temps j’essaie de faire ca ce soir
La version 1.5.0 qui sera bientot disponible ajoute cette fonctionnalité.
Wow, trop fort !
Merci maïeul 👍
mouais, je suis pas encore hyper satisfait niveau code. Il y a encore du découpage fonctionnel à mieux faire... mais ca marche ...
Merci pour la réactivité !
Répondre à ce message
Bonjour,
Superbe plugin que je ne teste qu’aujourd’hui.
Impressionné qu’il gère aussi les &var_mode=calcul ou recalcul pour les ignorer !
Par contre, il y a un type de lien dont il change la nature : ceux vers un site référencé.
Il y a une url publique sur le site qui permet de voir le site.
Si je la copie/colle, ça produit à l’enregistrement texte du lien qui est un lien direct vers le site au lieu d’être un lien vers la page dans notre site qui fait le lien vers le site (et affiche le flux RSS de ce dernier le cas échéant).
Il me semble que c’est un manque des raccourcis typo de SPIP, manque que j’avais adressé avec l’aide d’ESJ de cette manière dans SoyezCréateurs :
J’ai eu du mal à comprendre le problème.
Je serais hésitant à mettre cela dans le plugin, car ce comportement n’est pas forcément celui qu’on souhaite. Personnelement je peux avoir un catalogue de site ET vouloir mettre, pour une raison x ou y, un lien direct dans un article.
En tout cas, si on le met cela doit être une option, désactivée par défaut.
J’ai fait un ticket pour proposer d’améliorer ça dans le plugins sites.
Mais ça reste un code dérogatoire avec une très forte dette technique :(
Entre autre, aucun moyen pour ton plugin de savoir qu’il faudrait utiliser refsite et pas site (sauf à coder toi aussi un comportement dérogatoire exceptionnel).
==> https://core.spip.net/issues/4283
Je vais essayer d’être plus clair pour reproduire le problème :
Résultat :
On a donc — à cause du comportement dérogatoire de
qui pointe sur l’url extérieure du site référencé et non sur le squelette SPIP affichant le site en question — un changement de résultat avec la transformation automatique du lien en raccourcis SPIP parce qu’il n’y a pas de raccourcis SPIP pointant vers la page de mon site décrivant le site référencé :(
C’est plus clair ?
oui c’est plus clair, effectivement. Merci.
Je sais pas trop comment on pourrait s’en sortir tant que c’est pas réglé dans SPIP....
Comme j’en aurais le besoin, je veux bien essayer de coder la chose suivante :
Pour le nom du define : _CORRECTION_LIENS_INTERNES_LIEN_SITES
Oui, ca m’a l’air bien. Gogogo
C’est fait par https://git.spip.net/spip-contrib-extensions/correction_liens_internes/commit/ea9d20eb6d4d0d04983157165abd2f430c738ca1
Et utilisé par https://zone.spip.net/trac/spip-zone/changeset/113713/spip-zone
Merci à toi pour ce plugin !
Répondre à ce message
Bonjour,
Merci pour ces travaux bien utiles et de bien vouloir tester la version 1.2 de ce plugin.
Les corrections de liens internes ne fonctionnaient pas bien de mon côté, j’ai tenté de les améliorer :
- Gestion des ancres
- Meilleure compatibilité PHP 5 et SPIP 3
- Élargissement sur la reconnaissance des URLs (même anciennes si possible)
- Mise en log des URLs corrigées
- Prise en compte du raccourci historique des brèves
- Optimisation en cas d’absence de liens
- Simplification de la RegExp
je me rend compte que je ne t’ai pas fait de retour, mais pour moi cela était correct.
Répondre à ce message
Oh p*t**n ! oO
Les gars, je vous aime ! Merci ! :-)
Répondre à ce message
Bonjour,
voilà un plugin fort utile pour ne pas dire indispensable aux rédacteurs.
bravo et merci
Fdg
attention dans les premier tmps d’install a bien vérifié que tout marche. Je n’ai fait un test qu’en local avec une dizaine d’article et une url de base du site unique. Je ne sais pas ce que cela donne si on combine avec une url de base qui varie (cas de site a plusieurs noms de domaine)
plungin fort utile !
serait bien utile sur contrib...
(si ça marche pour le forum aussi)
oui, ca marche pour tout édition d’objet. Mais je n’ai pas la main sur les plugins de contrib ...
si un des admins complets nous lit... (ce plugin fait partir de ceux que j’ai repéré comme pouvant être utile ici)
Répondre à ce message
Bonjour,
très bonne et salutaire idée.
Je suis très attaché à la portabilité de SPIP, grâce à ses liens relatifs, et je suis toujours désolé de voir les rédacteurs copier coller leurs liens depuis le front.
J’ai testé sur un site un peu volumineux, ça fonctionne très bien, même à travers les crayons.
Mais sur ce site, j’ai une configuration en multidomaines, et le plugin ne reconnait pas du tout et donc ne corrige pas les liens vers d’autres domaines que celui en cours de consultation.
Dans un article qui répond sur domaine1.tld, les rédacteurs peuvent coller des liens vers des articles de domaine2.tld
Serait il possible de traiter une liste de domaines plutôt qu’un seul ?
Un test rapide avec ce patch en tout début de la fonction fonctionne :
Dans mon cas, je pourrais récupérer dynamiquement la liste des domaines déclarés dans multidomaines, mais c’est un cas très particulier.
De manière générale, une telle liste pourrait être définie en constante (ou en config ?).
Ensuite, une fois les liens absolus transformés en texte, c’est au squelette de savoir les générer sur le bon domaine (et c’est ce qui se passe sur mes sites).
salut, merci pour tes remarques, et le bout de code
Pour la question des multidomaines, je propose ceci :
1) on récupére automatiquement dans multidomaines s’il est installé
2) on propose une constante pour ajouter d’autres urls de base, au besoin.
Si cela te convient, te sens tu prêt à faire le codage et à le commiter ?
Je peux faire cette modif, oui.
Pour la déclaration d’une constante, c’est une liste qu’il faudrait, et php n’autorise pas d’array en define.
Une simple liste de domaines séparés dans une chaine ?
arg,
séparé par une virgule (qui je crois ne fait pas parti des urls)
n’hésite pas à te mettre en co-auteur dans le paquet.xml
Commit envoyé, tu me dis.
http://zone.spip.org/trac/spip-zone/changeset/77814
Le code prend en compte les domaines déclarés par le plugin multidomaines (s’il est installé) et ceux déclarés par une constante, exemple :
define(’CORRECTION_LIENS_INTERNES_AUTRES_DOMAINES’,’http://domaine1.tld domaine2.tld’) ;
Séparateur : espace ou virgule, domaines avec ou sans http:// (tout est nettoyé)
hop, http://zone.spip.org/trac/spip-zone/changeset/77815. Je t’ai mis co auteur sur l’article. Tu peux compléter la doc ?
merci encore !
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |