Problème de gestion des liens longs dans un modèle SPIP

Bonjour,

J’ai un souci avec les liens dans un modèle. Nous avons créé un cartouche sous la forme d’un modèle, qui affiche les informations de contact des médecins présents sur notre site.

Ce modèle comprend le nom, la spécialité, l’adresse, le mail, le site et les réseaux sociaux, s’il y en a.

Le problème concerne les liens vers le site ou les réseaux sociaux, qui peuvent être longs, voire très longs.

Je n’ai pas réussi à gérer cet aspect dans mon modèle, car j’ai directement inséré les liens dans celui-ci. De ce fait, je ne peux pas utiliser ce que propose SPIP, par exemple la fonction [texte->lien].

J’aimerais donc pouvoir afficher un lien sur un mot dans l’interface d’administration, afin que le rendu sur le site soit beaucoup plus court et lisible.

Je ne sais pas comment modifier mon modèle pour obtenir ce résultat.

Voici un extrait de mon modèle pour l’adresse du site, par exemple :

[(#ENV{site}|oui)
    <li><i class="fa fa-globe"></i>&nbsp; 
      <a href="[(#ENV{site})]" target="_blank">[(#ENV{site})]</a>
     </li>
]

Merci

Peut-être avec le filtre |identifiant_slug ?

Et pourquoi ne pas écrire
<a href="[(#ENV{site})]" target="_blank">Site web</a>

Merci a vous deux, mais tu vois, je pense qu’il s’agit plutôt d’une erreur de ma part dans la fabrication de mon modèle. Je préfère donc que l’on voie seulement le nom du site en question, sans l’adresse complète, comme sur cette image où le site est https://www.chrysleg.fr/ mais où seul chrysleg.fr est visible et cliquable.

Du coup, j’ai modifié mon code comme ceci :

[(#ENV{site}|oui)
  <li><i class="fa fa-globe"></i>&nbsp; 
    <a href="[(#ENV{sitelien})]" target="_blank">[(#ENV{site})]</a>
 </li>
]

Ça fonctionne, mais ça ne me semble pas très orthodoxe.

Je ne sais pas d’où viennent « site » et « sitelien » mais tu pourrais peut-être ajouter un « nomsite » par exemple ?

Mince, je n’arrive pas à bien m’expliquer.

Je vais essayer d’être plus clair.

J’aimerais pouvoir utiliser l’écriture des liens dans l’admin du type :
[nom du site->http:www.lesite.com]

Mais dans mon modele j’ai cette ligne (avec déjà un lien) :
<a href="[(#ENV{site})]" target="_blank">[(#ENV{site})]</a>

Que dois je mettre a la place de cette ligne de code dans mon modele pour que je puisse utiliser l’écriture des liens dans l’admin spip ? Je peux mettre ici le modele en entier si besoin.
Merci

Tu cherches donc expanser_liens

Un exemple d’usage (évitant de se compliquer la vie avec |concat : |concat - SPIP)

S’il y a ‹ site › dans l’environnement, c’est que c’est fait pour, non ?

Mais si ce que tu trouves pas orthodoxe, c’est de passer cet argument en plus comme argument du modele, alors tu dois définir un filtre qui extraiera de l’url la partie que tu veux afficher.

Par exemple au plus simple :

dans mes_fonctions.php :

function affiche_site($url){
    $morceaux = parse_url($url);
    return isset($morceaux['host']) ? $morceaux['host'] : $url;
}

Et dans ton modèle, à la place de ce que tu cites plus haut :

[<li><i class="fa fa-globe"></i>&nbsp; 
    <a href="(#ENV{sitelien})" target="_blank">[(#ENV{sitelien}|affiche_site)]</a>
 </li>]

Après ya des tas de formats d’url différents, et par exemple si tu as des pages facebook, le filtre ci dessus te renverra toujours facebook.com ou fr. Donc il se peut qu’il faille affiner selon les urls de tes docteurs, et parfois intégrer le path, ou la query… et pas dans d’autres cas :slight_smile: Pour ça au besoin regarde la doc de parse_url.

Merci à tous, je suis allé lire toutes vos propositions. La plupart du temps, ça dépasse mes compétences, je dois bien l’admettre.

J’ai donc revu les choses autrement.
Comme expliqué dans mon message initial, l’idée était de raccourcir les liens afin qu’en mode responsive (sur mobile), les liens trop longs ne cassent pas le cartouche du modèle concerné (voir mon image un peu plus haut).

Je voulais donc, dans l’admin, au moment de rédiger l’article, pouvoir utiliser la syntaxe habituelle des liens SPIP dans mon modèle, c’est-à-dire : [texte->lien].
Si je reprends mon exemple avec Facebook, mon but était d’écrire :
[CabinetDupont->https://facebook/cabinetdupont.com]

Or, dans mon modèle, il y avait déjà des balises <a href=...> et ça posait problème.

J’ai donc trouvé une solution en écrivant ceci dans mon modèle :

[(#ENV{site}|oui)
  <li><i class="fa fa-globe"></i>&nbsp; [(#ENV*{site}|propre|PtoBR)]</li>
]

J’ai simplement retiré les balises <a> et ajouté PtoBR pour éviter les balises <p> qui cassaient mon CSS.

Si ça peut aider quelqu’un.

Bien à vous.