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

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

40 discussions

  • 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

  • 3

    Hello,

    j’ai l’impression que le plugin ne marche pas avec SPIP 3.0.17 (site n’ayant pas déjà eut ce plugin)

    apparemment l’installation ne crée pas la table, j’ai des erreurs :

    'spip_articles_lies' doesn't exist 

    peut-être une piste : je ne vois pas de 'CREATE TABLE ...' dans le fichier a2a_administrations.php

    merci d’avance

    • Salut, si le plugin n’a pas créé ses tables lors de l’installation, tu peux tenter de le désinstaller/réinstaller pour voir. Sinon regarde du côté des logs mysql dans tmp/log pour voir si tu y trouves des infos qui pourraient nous être utiles afin de t’aider plus.

      peut-être une piste : je ne vois pas de ’CREATE TABLE ...’ dans le fichier a2a_administrations.php

      Oui c’est normal :)

    • Hello,
      J’avais pourtant bien désactivé, activé, désactivé, supprimé, réinstallé ... sans résultat.
      Et là c’est passé.

      désolé pas plus de détails

    • Content que tu aies réglé le problème :)

    Répondre à ce message

  • 4

    Bonjour,

    Et merci pour ce super plug-in !
    Je préviens : je suis novice ....

    Je souhaiterai pouvoir mettre 2 boites type « Lire aussi » par articles (avec des articles liés différents).
    Pour la première pas de problème. C’est parfait.

    Est ce que je peux me « re-servir » de ce plug-in pour la seconde ?

    Merci de votre indulgence...

    • Bonjour, je ne sais pas si j’ai bien compris ton besoin. est-ce que ceci y répond :

      Tu peux dupliquer la boucle en changeant le nom :

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

      et changer ajouter les critères en fonction de ce que tu veux.

    • BONJOUR,

      Merci pour la réponse mais ce que je voulais c’est une aute module a2a, y compris dans la partie privé, pour pouvoir lier d’autre articles.
      J’ai réussi en bidouillant : ce n’est surement pas orthodoxe mais j’ai dupliqué le plug-in, je l’ai nommé b2b et modifié le noms des variables dans chaque fichier qui pouvaient créer une « interférence » avec a2a.
      Ca fonctionne : partie admin j’ai 2 blocs distincts « articles liés » que je peux donc faire apparaitre comme je veux dans ma page.
      Désolée si je n’emploie pas les bons termes, mais je débute....
      Merci en tous cas à toutes les bonnes âmes de Spip-contrib qui me permettent d’avancer....

    • Bonjour Tagada,

      Il semble que je rencontre la même problématique que vous (nécessité de dupliquer a2a pour créer 2 zones « A voir » distinctes).
      Avez-vous une trace de vos « bidouillages » ? je ne suis pas développeuse, et ne voit pas bien comment m’y prendre...
      Merci d’avance !

    • Je ne suis pas sûr de ce que vous recherchez, mais à priori vou devriez pouvoir le faire avec le plugin de base.

      Vous pouvez créer plusieurs type de liaison (voir panneaux de configuration du plugin)
      Que vous nommez diférement , et que vous récuperez à l’aide du critère : type_liaison=nomdelaliaison
      au sein d’une boucle (ARTICLES_LIES)

      du style :

      <BOUCLE_liant(ARTICLES_LIES) 
      {id_article_lie=#ID_ARTICLE} 
      {type_liaison=auteur} 
      {par rang}>
      <BOUCLE_lesArticlesLiants(ARTICLES){id_article}>
      <article>
      [<a href="#URL_ARTICLE"> 
      (#LOGO_ARTICLE_RUBRIQUE|inserer_attribut{alt,#TITRE|attribut_html}) 
      </a>]
      </article>
      </BOUCLE_lesArticlesLiants>
      </BOUCLE_liant>

    Répondre à ce message

  • Dans la dernière version j’ai un bug .. pas très gènant mais je le signal. (version spip 3.0.17)
    Lorsque j’ajoute plusieurs liaisons à un article, le petit cadre récapitulatif fait un refresh ajax en boucle.
    je dois recharger la page pour qu’il arrête de clignoter :-)

    Cela n’impacte pas le fonctionnement.

    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 :

  • 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
  • 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 apparaît.

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.

Qui êtes-vous ?
[Se connecter]

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