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

Version 0.4.6
Version 2.2.3

Installation et activation comme tous les plugins.

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.

Dernière modification de cette page le 14 février 2019

Discussion

33 discussions

  • 4

    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

    Répondre à ce 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 !

    Répondre à ce 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.

    Répondre à ce 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 !

    Répondre à ce 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

    Répondre à ce 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.

    Répondre à ce message

  • 2

    Bonjour, j’aurai aimé savoir si dans le cas d’un site multilangue , avec liens de traductions entre les articles.
    Est ce que l’on dois manuellement lier :
    article_fr_1 / article_fr_1X puis
    article_en_1 / article_en_1X etc...

    Ou bien il suffit de lier les articles dans la langue principale du site pour que les traductions soit elles aussi liés ?

    • Enfin remarque je me dis que ma question est un peu bête... Je vais essayer je verrai bien :-)
      en tout cas comme à chaque fois je ne saurai trop dire merci aux dev qui passe du temps pour SPIP.

    • Salut, non le plugin ne duplique pas automatiquement les liens des articles/traductions. Mais pour te simplifier la vie u devrais le faire comme ça :

      • sur la page de l’article d’origine ; afficher les articles liés à celui-ci
      • sur la page d’une traduction ; boucler sur les articles liés à l’article d’origine puis boucler pour renvoyer les traductions de ces articles

      Ainsi, tu t’éviterais le travail d’affecter les liens sur les articles d’origine et sur les traductions. Deux fois moins de travail pour les rédacteurs quoi ;)

    Répondre à ce message

  • 5

    Bonjour,

    Après le mis-à-jour de SPIP (version 3.0.16 à 3.0.17) j’ai une erreur dans l’espace privé (exec=article) : « recherche sur une table sans clef primaire atomique » sur ligne 6 de /plugins/auto/a2a/v2.1.5/prive/objets/liste/articles_lies.html

    Cordialement,
    Hanjo

    • Probablement une problème liée à la mise-à-jour, parce-que maintenant tout fonctionne bien !

      Merci,
      Hanjo

    • Content que ça fonctionne de nouveau :) Hésite pas à nous signaler si le problème revient.

    • Hello,

      Depuis le dernière mise à jour du plugin (je crois) je ne vois plus les articles liés qui étaient auparavant listés sur la page de l’article liant :

      Par exemple il est indiqué :
      [Changer]
      3 articles liés # Rang Titre :
      [Lier à un ou des articles]

      On dirait que les liens sont cassés dans le sens article liant > article lié
      car lorsque je vais sur l’article lié l’article liant est bien listé.

      Si je rrecrée le lien à partir de l’article liant cela fonctionne mais ensuite s’affiche :

      4 articles liés # Rang Titre :
      Article publié 4 Sortie nature (2084)
      [Fermer]

      les anciens liens sont connus mais toujours pas affichés.

      donc pas facile de retrouver les liens perdus.

      dd

    • Salut, les articles qui n’apparaissent pas ne seraient pas des « pages uniques » du plugin éponyme par hasard ?

    • Bonjour,

      Bon désolée, je n’avais pas assez fouillé : en fait les articles qui n’apparaissent pas sont les articles supprimés. Il y a eu une cassure quelque part dans le nettoyage de la table articles_lies

      Par exemple dans la base j’ai :
      id_article id_article_lie rang
      617 480 3
      617 2084 4
      617 456 2
      617 398 1

      mais les articles 480, 456 et 398 n’existent plus.

      donc un peu fouillis mais rien de perdu !

      dd

    Répondre à ce message

  • 1

    Bonjour,
    Est-il possible de lier une brève à un article ?
    Si oui comment faire ?

    Merci !
    Nico

    • Non, ce plugin sert à lier des articles à des articles, d’où le nom a2a :)

    Répondre à ce message

  • 2

    Bonjour

    J’utilise ce plugin très utile depuis la version 2.1 de SPIP. Mais depuis que je suis passé à la version 3.0.5, impossible de retrouver le champ « lier des articles » dans l’admin ! Dans l’interface publique de mes articles précédents comprenant des articles liés, la mention apparaît bien, mais pas dans l’interface privée. J’ai pourtant pris soin de mettre à jour a2a, CFG et Spip Bonux.

    Comment faire ? Merci d’avance.

    • Désolé, je me suis trompé, j’ai téléchargé via le chargeur de SPIP 3 la version obsolète (pour spip 2). avec la bonne version (que le chargeur ne trouve pas d’ailleurs, j’ai dû l’installer à la main) c’est OK.

    • Content que tu aies résolu ton problème, en fait le chargeur de plugin ne propose par défaut que les plugins stables, il faut modifier les critères de recherche pour accéder aux plugins dans d’autres états (comme a2a pour SPIP 3 qui est en état test).

    Répondre à ce message

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom