Le plugin a2a pour lier des articles

Ce plugin permet de lier des articles de façon ponctuelle sans avoir à utiliser les mots-clés de SPIP. Il peut être utilisé pour mettre en place des liens de type “Lire aussi” comme dans le squelette Sarka-SPIP.

Installation

A2A (0.4.6)
A2A (2.2.7)

Installation et activation comme tous les plugins.

Utilisation dans l’espace privé

Le plugin ajoute un bloc d’informations sur les pages d’édition d’articles de l’espace privé.

Pour rechercher un article à lier, il faut entrer les termes à rechercher dans le champ prévu à cet effet. Ce champ vous permet d’effectuer une recherche libre dans le titre ou le contenu de l’article que vous désirez lier.

Remarque : une recherche sur artXX permet d’afficher directement l’article numéro XX.

Bloc du plugin a2a

Après avoir validé une recherche, les résultats de celle-ci s’affichent sous le champ de recherche. Il suffit de cliquer sur «Lier» pour attacher l’article correspondant à celui en cours d’édition.

Depuis la version 0.4 du plugin, il est possible de lier les articles de façon bidirectionnelle en cliquant sur «Lier des deux côtés».

Depuis la version 2.0 du plugin, il est possible de typer les relations entres articles : ceci fait l’objet d’un article spécifique : Typage des relations entre articles avec A2A.

Champ de recherche de a2a

Il est aussi possible de gérer l’ordre ou le rang des articles liés en cliquant sur «Monter» et «Descendre».

Trie des articles avec a2a

Utilisation dans vos squelettes

Pour récupérer la liste des articles liés à l’article de l’environnement :

<B_les_articles_lies>
<ul>
<BOUCLE_les_articles_lies(ARTICLES_LIES){id_article}{par rang}>
	<li>
	<BOUCLE_article_lie(ARTICLES){id_article = #ID_ARTICLE_LIE}>
	<a href="[(#URL_ARTICLE)]">#TITRE</a>
	</BOUCLE_article_lie>
	</li>
</BOUCLE_les_articles_lies>
</ul>
</B_les_articles_lies>

On peut raccourcir cette écriture à l’aide de la balise #ARTICLES_LIES qui renvoie un tableau contenant les #ID_ARTICLE des articles liés à l’article de l’environnement. Par défaut, le tableau renvoyé par la balise est classé par rang. Il est possible d’inverser le tri des articles du tableau avec l’écriture #ARTICLES_LIES{inverse}.

<B_articles_lies>
<ul>
<BOUCLE_articles_lies(ARTICLES){id_article IN #ARTICLES_LIES}>
<li><a href="[(#URL_ARTICLE)]">#TITRE</a></li>
</BOUCLE_articles_lies>
<ul>
</B_articles_lies>

Pour récupérer la liste des articles liant l’article de l’environnement :

<BOUCLE_liant(ARTICLES_LIES){id_article_lie=#ID_ARTICLE}{par rang}>
<BOUCLE_lesArticlesLiants(ARTICLES){id_article}>
<a href="[(#URL_ARTICLE)]">#TITRE</a>
</BOUCLE_lesArticlesLiants>
</BOUCLE_liant>

Depuis la version 2.1.0 du plugin, on peut simplifier à l’aider de la balise #ARTICLES_LIANT :

<BOUCLE_lesArticlesLiants(ARTICLES){id_article IN #ARTICLES_LIANT}>
<a href="[(#URL_ARTICLE)]">#TITRE</a>
</BOUCLE_lesArticlesLiants>

Par défaut, la balise retourne les articles liant dans l’ordre de rang. Elle peut prendre un argument optionnel {inverse}. Cependant, ce tri n’en général pas pertinent, on pourra préférer un tri à l’aide d’un critère de boucle “classique”, par exemple par titre :

<BOUCLE_lesArticlesLiants(ARTICLES){id_article IN #ARTICLES_LIANT}{par titre}>
<a href="[(#URL_ARTICLE)]">#TITRE</a>
</BOUCLE_lesArticlesLiants>

Typage des relations entre articles

À partir de la version 2.x, le plugin permet de typer les relations entre articles. Voir l’article consacré à ce sujet.

Discussion

37 discussions

  • 1

    Bonsoir,

    J’aimerais savoir si ce plugin pourrait intégrer une option de configuration qui proposerait automatiquement les liens A2A de tous les articles cités dans cet article, voire aussi de tous les articles (ou autres objets éditoriaux) pointant sur cet article....
    A moins qu’il n’existe déjà :sous quel nom ?
    Merci

    Reply to this message

  • Bonjour
    J’ai mis #FORMULAIRE_NAVIGATEUR_A2A#ID_ARTICLE pour pouvoir lier directement en ligne. Comment faire pour avoir aussi la possibilité de DÉLIER?

    Reply to this message

  • 6

    Bonjour
    j’ai du redescendre de php 7.3 à 7.1
    sur php7.3 le plugin ne fonctionne plus mais donne cette alerte :

    Warning: count(): Parameter must be an array or an object that implements Countable in /home/clients/a3580510d3989b69fb26134d5ef34fc5/web/ficedl/cartoliste/ecrire/public/aiguiller.php on line 235

    Warning: count(): Parameter must be an array or an object that implements Countable in /home/clients/a3580510d3989b69fb26134d5ef34fc5/web/ficedl/cartoliste/ecrire/public/aiguiller.php on line 249

    bonne journée

    • Si c’est en PHP 7.3 je pense que tu es sous SPIP 3.3, car SPIP 3.2 n’est pas compatible avec cette version. De plus, il ne faut pas afficher les warning en production. Mais, j’ai tout de même noté ça dans un ticket afin de régler le problème dès que possible https://git.spip.net/spip-contrib-extensions/a2a/issues/1

    • PS : peux-tu me donner plus de détails stp, à quel moment le warning est affiché ?

    • Bonjour,
      spip 3.2.8 et 3.2.7 avant aussi
      ça arrive lorsque je saisie par exemple art4700 dans le formulaire “chercher un article” et que je clique sur rechercher

    • ah, je peux quand même lier, je n’avais pas vu que le résultat s’s’affichait quand même

    • Et oui, c’est pour ça que je disais “Si c’est en PHP 7.3 je pense que tu es sous SPIP 3.3, car SPIP 3.2 n’est pas compatible avec cette version.” :)

    • ok, j’ai fais du bruit pour rien :)

    Reply to this message

  • Excellent plugin et très développé dans l’ergonomie (le double moteur de recherche est vraiment un “plus” appréciable) sans parler de la documentation très fournie et y compris très spécialisée. Je regrette de ne pas en avoir eu connaissance avant, je pensais avoir fini tous mes ’squelettes’....! Mais on n’a jamais fini, n’est-ce pas. Merci !

    Reply to this message

  • 5

    Bonjour,
    Merci aux développeurs pour ce plugin bien utile !

    Il manque cependant la possibilité de récupérer le logo de l’article lié. Cela ne semble pas implanté dans le plugin (?). Ceci afin d’avoir la liste des articles liés avec leurs logos...

    Bien cordialement

    François

    • Que ce soit pour les articles liés ou liants, on a des boucles ARTICLES. Dans lesquelles toutes les balises classiques de la boucle article fonctionne dont #LOGO_ARTICLE.

    • Bonsoir et merci pour votre réponse !
      Je pense m’être mal exprimer dans mon post de départ. Dans la liste des articles liés, les logos sont de l’article en cours de lecture et non ceux des articles liés. Voici mon code :

      [(#REM) Articles liés :
      				avec le plugin a2a...
      				]				
       
      				<BOUCLE_types_liaisons(DATA){source tableau, #TYPES_LIAISONS}>
      				<B_articles_lies2>
       				<div class="related-post margin-top-20 clearfix">
                     	<header class="widget-header">
                        <h4 class="title">
                          [(#CLE|a2a_traduire_type_liaisons)]
                        </h4>
                      </header>	
      				<ol>
      				<BOUCLE_articles_lies2(ARTICLES_LIES){id_article}{par rang}{type_liaison=#CLE}>
      				<div class="post col-md-3 col-sm-3 col-xs-12">
      						[(#LOGO_ARTICLE{#ID_ARTICLE_LIE}|image_reduire{90,*}|inserer_attribut{class, post-thumbnail})]
      				<div class="title">
      					<li><a href="#URL_ARTICLE{#ID_ARTICLE_LIE}">#INFO_TITRE{article,#ID_ARTICLE_LIE}</a></li>
      				</div>
      				</div><!--/post-->
      				</BOUCLE_articles_lies2>
      	 			</ol></div>
      				</B_articles_lies2>
      				</BOUCLE_types_liaisons>
       

      Et en image afin de voir l’exemple...

      Merci pour vos aides !
      Bien cordialement
      François

    • #LOGO_ARTICLE ne prend visiblement pas d’argument. Du coup la solution est de passer par une boucle ARTICLES et pas par une boucle ARTICLES_LIES

      <BOUCLE_articles_lies(ARTICLES){id_article IN #ARTICLES_LIES}>
      #LOGO_ARTICLE
      </BOUCLE_articles_lies>

      j’imagine que {type_liaison=#CLE} doit fonctionner.

      Sinon il faut faire une sous boucle ARTICLES dans votre boucle articles_lie_2.

      Bref, il faut à un moment avoir une boucle ARTICLES qui engloble le #LOGO_ARTICLE.

    • Bonsoir et merci vivement !!!
      Eh non le critère type_liaison=#CLE ne fonctionne pas dans la boucle que vous proposez. Cependant, voici à nouveau mon code corriger en fonction de votre idée et cela fonctionne impeccablement bien !

      <BOUCLE_types_liaisons(DATA){source tableau, #TYPES_LIAISONS}>
      				<B_articles_lies2>
       				<div class="related-post margin-top-20 clearfix">
                     	<header class="widget-header">
                        <h4 class="title">
                          [(#CLE|a2a_traduire_type_liaisons)]
                        </h4>
                      </header>	
      				<ol>
       
       
      				<BOUCLE_articles_lies2(ARTICLES_LIES){id_article}{par rang}{type_liaison=#CLE}>
      				<div class="post col-md-3 col-sm-3 col-xs-12">	
      				<BOUCLE_articles_lies(ARTICLES){id_article IN #ARTICLES_LIES}{titre=#INFO_TITRE{article,#ID_ARTICLE_LIE}}>
      				[(#LOGO_ARTICLE|image_reduire{90,*}|inserer_attribut{class, post-thumbnail})]
      				</BOUCLE_articles_lies>
       
      				<div class="title">
      					<li><a href="#URL_ARTICLE{#ID_ARTICLE_LIE}">#INFO_TITRE{article,#ID_ARTICLE_LIE}</a></li>
      				</div>
      				</div><!--/post-->
      				</BOUCLE_articles_lies2>
       
      					</ol></div>
      				</B_articles_lies2>
      				</BOUCLE_types_liaisons>

      Merci encore !!!
      Bien cordialement
      François

    • Juste pour information, on peut récupérer le logo de l’article (ou de n’importe quel autre objet) en mettant l’#ID_OBJET entre accolades : #LOGO_ARTICLE{25} ou #LOGO_ARTICLE{#ENV{id_article}}, même sans boucle donc.

    Reply to this message

  • 4

    Bonjour à tous,
    J’utilise SPIP 3.2 et le plugin a2a.
    Je veux permettre aux auteurs de lier des articles dans l’espace public et j’utilise ce formulaire
    dans une boucle article :

    #FORMULAIRE_NAVIGATEUR_A2A{article,#ID_ARTICLE}

    Le formulaire s’affiche bien avec le choix dans l’arborescence mais la validation ne génère
    pas la liaison.

    Merci pour une idée qui vous viendrait ?

    • Je dirais que ce serait plutôt #FORMULAIRE_AJOUTE_A2A, mais sans garantie.

    • Seul #FORMULAIRE_NAVIGATEUR_A2A{article,#ID_ARTICLE}
      me donne l’interface complète.

      #FORMULAIRE_AJOUTE_A2A me renvoit seulement :

    • Le plugin ne liant que des articles, vous avez envoyé un argument en trop.

      #FORMULAIRE_NAVIGATEUR_A2A{#ID_ARTICLE}

      suffit et fonctionne.

    • Oui cela fonctionne !
      Merci Maïeul, et bonne année 2018 !

    Reply to this message

  • 6

    Bonjour à tous,

    Merci pour cette application qui m’est vraiment très utile dans un site qui compte près de 1000 articles, et que j’utilise dans une version SPIP 3.1.1
    Tout fonctionne très bien, mais dans l’interface privée de l’article les fonctions “Délier l’article” et “Monter, descendre” dans l’ordre des rangs ne fonctionnent pas, ce qui est gênant.

    Si quelqu’un à rencontré le même problème ?
    Merci de vos lumières

    • “Chez moi cela marche”. Dans un premier temps, il faudrait tester en désactivant les autres plugins pour voir s’il y éventuellement conflit.

    • Oui merci ! pour cette réponse rapide, mais j’utilise exactement 50 plugins(en plus des génériques).
      Quels seraient, selon vous, ceux(ou celui) qui pourraient éventuellement poser problèmes ?

    • Je vais être moins précis dans ma demande :

      • la famille, le type de plugins qui pourraient poser problème

      Merci !

    • tout plugin qui ajouterai/modifierai du javascript. Ce qui fait large.

      D’où la technique de tout désactiver (en ayant fait une copie d’écran des plugins concernés) puis de réactiver par dichotomie.

      Une solution est de le faire sur une copile locale du site pour ne pas tout perdre.

    • J’ai bien reçu votre réponse visible avec son lien dans ma boite mail mais, bizarrement rien n’apparaît ici(?).
      Je vais devoir m’y atteler et migrer une copie de mon site en local.
      J’ai pas fini.
      Merci pour tous ces conseils !

    • Je sais pas pourquoi le message n’était pas validé. Voilà c’est corrigé. Bon courage.

    Reply to this message

  • J’avais un problème en suivant : #ARTICLES_LIES{'','liaison'} qui retournait les articles en ordre inverse.

    J’ai résolu en revoyant le code de la balise ARTICLES_LIES comme suit pour que ça trie par ASC comme il se doit si le premier argument est vide :

    function lister_articles_lies($id_article, $ordre_brut,$type_liaison=null){
    	$ordre = (empty($ordre_brut)) ? 'ASC' : 'DESC';
    	if ($type_liaison==null)
    		return sql_allfetsel('id_article_lie','spip_articles_lies','id_article=' . sql_quote($id_article),'',"rang $ordre");
    	else
    		return sql_allfetsel('id_article_lie','spip_articles_lies','id_article=' . sql_quote($id_article) . ' AND type_liaison=' . sql_quote($type_liaison),'',"rang $ordre");
    }
     
    function balise_ARTICLES_LIES($p) { 
    	$id_article = champ_sql('id_article', $p);
    	$type_liaison=interprete_argument_balise(2,$p);
    	$ordre = interprete_argument_balise(1,$p);
    	$type_liaison ? $p->code = "lister_articles_lies($id_article, $ordre,$type_liaison)" : $p->code = "lister_articles_lies($id_article, $ordre)";
    	$p->type = 'php';  
    	return $p;
    }

    Si vous ne voulez pas réintégrer cela au plugin, merci de me dire ce que je fais de mal. Merci !

    Reply to this message

  • Bonjour,

    M. Marcillaud travaille à un nouveau plugin permettant d’affecter une information supplémentaire aux liens entre objets (appelée “rôle”).
    Ce serait formidable (je n’ai malheureusement pas les compétences pour le faire) si votre plugin évoluait vers plus de généricité, en permettant
    1/ de lier n’importe quel objet (natif à spip ou non) à lui même (perso, je trouve que cette fonctionnalité devrait même être intégrée dans le core, ou dans un plugin “core”)
    2/ en intégrant la fonctionnalité “rôle”.

    Cordialement,
    Roger Burton

    Reply to this message

  • 3

    Bonjour, existerait il a votre avis une astuce, permettant de classer par date les articles, lorsqu’on récupére la liste des différents articles étant lié à l’article de l’environnement ?

    avec la boucle:

    <ul>
    <BOUCLE_articles_lies(ARTICLES_LIES){id_article_lie=#ID_ARTICLE} >
    	<BOUCLE_suite_articles_lies(ARTICLES) {id_article}>
    			<li><a href="#URL_ARTICLE">#TITRE</a></li>
    	</BOUCLE_suite_articles_lies>
    </BOUCLE_articles_lies>
    </ul>

    Merci.

    • Oui, il faut faire une jointure au niveau de la boucle (ARTICLES_LIES) sur la table spip_articles, et utiliser le critère {par date}, comme pour n’importe quelle boucle article. Cela permet au passage d’économiser une boucle.

      <ul>
      <BOUCLE_articles_lies(ARTICLES_LIES spip_articles){id_article_lie=#ID_ARTICLE} {!par date}>
      	<li>#TITRE</li>
      </BOUCLE_articles_lies>
      </ul>
    • par ailleur, la version 3.1.0 (qui sera bientôt zippé, proposera une balise #ARTICLES_LIANT qui permettra de faciliter l’écriture :

      <BOUCLE_articles_liants(ARTICLES){id_article IN #ARTICLES_LIANT}{!par date}>
      <li>#TITRE</li>
      </BOUCLE_articles_liants>
    • Un grand merci pour cette réponse ultra rapide, cela fonctionne parfaitement.
      Je ne connaissais pas l’existence des jointures.

    Reply to this message

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite / PostgreSQL
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparait.

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.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom