Liaison d’objets

Permet de lier les objets SPIP entre eux.

Recherche de repreneur

Je ne suis plus suffisamment impliqué dans spip pour assurer un maintien correcte de ce plugins, Donc si quelqu’un veuille reprendre la main, c’est avec plaisir.

Introduction

Ce plugin s’appelait Sélection d’Objets auparavant et a été renommé dans un souci de consistance.

Il permet de créer des liens entre tous les objets de SPIP, ce qui rend possible de lier des articles à d’autres articles, des rubriques aux auteurs... À vous de définir quels objets peuvent se lier entre eux.

Installation
Le s’installe comme n’importe quel plugin.

Quelques termes

Le plugin utilise les termes suivants :

Objet Cible
L’objet auquel un autre objet (l’Objet Lié voir ci-bas) est attaché

Objet Lié
Un objet qui a été attaché à un autre objet ( à l’Objet Cible)

Type lien
Chaque lien entre objets peut être classifié. Ces types de liens sont définis soit globalement soit pour chaque Objet Cible.

Je peux donc par exemple de proposer un choix de type de liens quand je veux lier un objet (Objet lié) à un Objet Cible.

Configuration

Aucune pré configuration n’est faite, un passage par le panneau de configuration est donc obligatoire.

Les Objets Cibles
Commencez par définir les objets auxquelles des objets (Objets Liés) peuvent être liés.

Les types de liens
La définition des types de liens est purement facultative. Vous pouvez en définir des types par défaut ou un ensemble de types de liens pour chaque Objet Cible.
Indiquez une définition par ligne, suivie d’une virgule et d’une description. La description peut être une chaîne de langue.
p.ex

liens_associes,plugin:titre_liens_associes
nouvelles,plugin:titre_nouvelles

Les Objets Liés
Les objets qui peuvent être liés à l’objet cible.

Lien Unique ou entre Objet Cible et Objet Lié
Par défaut, le plugin ne propose d’ajouter un Objet Lié à un Objet Cible que s’il n’a pas déjà été sélectionné pour ce même objet.

Si vous avez besoin de pouvoir lier le même Objet lié plusieurs fois au même Objet Cible, par exemple avec différents Types de liens, alors vous devez alors cocher l’option « Désactiver la limite de liaison par objet cibles ».

Limite des Objets cibles
Pour chaque Objet Cible il est ensuite possible de limiter les valeurs possibles des id_objets. Par exemple je ne veux proposer uniquement les articles 1,3 et 4 comme Objet Cible.

Utilisation

Je veux par exemple proposer un menu composé d’article, de rubriques et de sites web sur la rubrique avec l’id 1.

Je commence par définir dans la configuration l’objet rubriques
comme Objet Cible et les objets rubriques, articles et
sites
référencés comme Objet Lié

Il y a maintenant deux manières pour lier des objets :

Depuis la page de l’Objet Cible
En reprenant notre exemple je me rends sur la page de la rubrique 1 dans l’espace privé de spip. En bas de la page se trouvera alors maintenant un menu de sélection permettant de chercher l’objet à attacher et le menu de sélection pour les types de liens (si définis dans config). Commencer à écrire le titre de votre objets puis choisissez parmi les suggestion proposés (champ avec autocomplete).

L’Objet Lié est alors ajouté à la fin de la liste de sélection pour la rubrique 1. L’ordre de la liste peut être changé via drag and drop ou avec les flèches vertes.

Depuis la page de l’Objet Lié
Dans l’espace privé, je me rends sur la page de l’objet que je veux ajouter à la rubrique 1.

Les données de l’Objet Lié
Un Objet Lié est un nouveau objet pour lequel, il est possible de mettre un titre, descriptif, une url ou un logo, ce qui permet de d’afficher des contenus différents de ceux de l’objet d’origine.

Pour cela, rendez vous sur la page de l’Objet Cible. Dans la liste des Objets liés vous trouverez à droite une icône « Modifier cet objet lié » .

Usage en squelettes
Les Objets liés peuvent être appelés via la Boucle LIAISON_OBJETS

Voici ce critères suivants plus importants :
• lang
• id_objet et objet (l’id et l’objet de l’ Objet Lié)
• id_objet_dest et objet_dest (l’id et l’objet de l’ Objet Cible)
• type_lien (le type de lien)

et les autres titre, descriptif, url, ordre, ordre_objet, date, statut

Tous ces critères peuvent évidemment aussi servir comme balise.

Un example concret se trouve dans : prive/objets/liste/inc-liaison_interface.html

On y trouve la Boucle LIAISON_OBJETS qui liste les différents Objets liés.

Un filtre compile ensuite pour chaque objets les informations de l’objet d’origine et celles del l’Objet Lié.

-  Exemple : squelette d’une boucle

  <BOUCLE_liaison(LIAISON_OBJETS){par ordre,lang}{lang ?=#ENV{l}}{statut ?}{id_objet_dest ?} {objet_dest ?}>
    
    [<tr class="tr_liste" id='#ID_LIAISON_OBJET'>(#ID_OBJET|generer_modele{#OBJET,modeles_so/liaison_interface_tr,#ARRAY{
        ordre,#ORDRE,
        id_liaison_objet,#ID_LIAISON_OBJET,
        objet_dest,#OBJET_DEST,
        id_objet_dest,#ID_OBJET_DEST,
        total_boucle,#TOTAL_BOUCLE,
        titre,#TITRE,
        compteur_boucle,#COMPTEUR_BOUCLE,
        date,#DATE,
        type_lien,#TYPE_LIEN, 
	
        }})</tr>] 
    </BOUCLE_liaison>

avec modeles_so/liaison_interface_tr.html :

#SET{tables,#ENV{tables,#VAL|lister_tables_objets_sql}}
        <td>
        [(#ENV{compteur_boucle}|!={1}|oui)
            <div><a class="select" href="[(#URL_ACTION_AUTEUR{ranger,remonter_ordre-[(#ENV{langue})]-[(#ID_LIAISON_OBJET)]-#ORDRE-[(#OBJET_DEST)]-[(#ENV{id_objet_dest})]}|parametre_url{load,prive/objets/liste/inc-selection_interface})]#liaison_objets"><img src="#CHEMIN{prive/themes/spip/images/fleche-haut.gif}" /></a></div> 
            ]
        [(#ENV{compteur_boucle}|!={#ENV{total_boucle}}|oui) 
            <div><a class="select" href="[(#URL_ACTION_AUTEUR{ranger,descendre_ordre-[(#ENV{langue})]-[(#ID_LIAISON_OBJET)]-#ORDRE-[(#OBJET_DEST)]-[(#ENV{id_objet_dest})]}|parametre_url{load,prive/objets/liste/inc-liaison_interface})]#liaison_objets"><img src="#CHEMIN{prive/themes/spip/images/fleche-bas.gif}" /></a></div> 
            ]
            
        </td>
        <td class='statut'>[(#STATUT|puce_statut{selection_objet,#ID_LIAISON_OBJET})]</td> 
        <td class="titre">
           #SET{objet,#OBJET}
            [(#OBJET|=={document}|oui)#SET{objet,document_edit}]
            [(#SET{id,id_#OBJET})]        
            [(#OBJET|=={site}|oui)
            #SET{id,id_syndic}
            ]
           [<a class="select"  href="[(#URL_ECRIRE{#GET{objet}}|parametre_url{#GET{id},#ID_OBJET})]">(#ENV{logo_objet}|image_reduire{25}|sinon{#ENV{logo_objet}|image_reduire{25}|inserer_attribut{class,spip_logos}}) </a>]
            <a href="[(#URL_ECRIRE{#GET{objet}}|parametre_url{#GET{id},#ID_OBJET})]">[(#TITRE|sinon{#OBJET|info_objet{#ID_OBJET,#ENV{champ_titre}}})]</a>
            #SET{table,#OBJET|table_objet_sql}
            [<div>((#GET{tables}|table_valeur{#GET{table}}|table_valeur{texte_objet}|_T))</div>]
        </td>
        <td class="type_lien">[(#TYPE_LIEN|nom_type{#OBJET_DEST})]</td>
        <td class="date">[(#DATE|affdate)]</td>
        <td class="id_objet"><b style="white-space: nowrap;">N°[(#ID_OBJET|>{0}|?{#ID_OBJET,#ID_LIAISON_OBJET})]</b></td>
        <td>
            [(#AUTORISER{modifier,selection_objet,#ID_LIAISON_OBJET})
                [(#ID_LIAISON_OBJET|afficher_qui_edite{liaison_objet}|non)
                    [(#URL_ECRIRE{selection_objet_edit,id_selection_objet=#ID_LIAISON_OBJET}|icone_verticale{<:liaison_objet:icone_modifier_liaison_objet:>,objet})]
                ]
            ]
        </td>
        <td>
            <a href="[(#URL_ACTION_AUTEUR{ranger,supprimer_ordre-[(#ENV{langue})]-[(#ID_LIAISON_OBJET)]-#ORDRE-[(#OBJET_DEST)]-[(#ENV{id_objet_dest})]}|parametre_url{load,prive/objets/liste/inc-liaison_interface})]#selection_objets" class="select"><img src="#CHEMIN{prive/themes/spip/images/item-remove.png}" alt="X" /></a>
        </td>

Todo

Il y a encore beaucoup d’améliorations possibles et les suggestion sont bienvenues, ce qui ne veut pas dire qu’elles seront codées immédiatement, mais chacun est évidemment libre de commiter lui même.

-  probablement faire une balise dynamique pour rendre l’utilisation plus aisée.
-  compléter cette doc par des captures d’écrans.

Discussion

4 discussions

  • 2
    Tederic MERGER

    Bonjour Rainer,
    J’ai commencé à tester votre plugin, et il pourrait permettre des développement intéressants pour mon site linguistique (relations entre des mots selon des types comme « diminutif »...).
    Mais pensez-vous le suivre dans des versions supérieures à SPIP 4.0 ?
    Merci.

    Répondre à ce message

  • 1

    Bonjour,

    J’ai le message suivant en créant une liaison entre deux documents :

    Warning: Use of undefined constant objet - assumed 'objet' (this will throw an Error in a future version of PHP) in /home/user/Sites/spip/htdocs/plugins/auto/liaison_objet/v2.1.0/liaison_objet_pipelines.php on line 76
    $id_table_objet = 'id_' . objet;

    C’est objet ou $objet qu’il faut mettre sur cette ligne 75 ? (qu’on retrouve aussi ligne 35)

    Répondre à ce message

  • 1

    Bonjour,
    Pour simuler des liens de traductions (« voir cette rubrique en anglais ») dans un site multilingue (une langue opar secteur), je viens d’installer ce plugin dans le but de lier des rubriques entre elles... Quelque chose m’échappe dans l’interface privée : je ne vois pas comment choisir les objets à lier (voir copie d’écran).
    SPIP dernière version + plugin dernière version également
    https://framapic.org/eK8ezG6Ixlds/pcbL8AhlQ5zi.png

    Quelque chose que je ne fais pas bien ?

    • Bonjour Manu,

      C’est un champ autocomplete. Dument configuré, il suffit de commencer à taper le nom de la rubrique à lier et la sélectionner quand elle apparaît dans le champ.

    Répondre à ce message

  • 4

    Bonjour,

    Merci pour cette contrib qui peut être bien utile et qui "permet de créer des liens entre tous les objets de SPIP"
    J’utilise, par ailleurs, le plugin Grappes qui "a pour vocation de permettre de réunir des objets SPIP, indépendamment de leurs liens « naturels »".
    Je me demandais quelles utilisations on pouvait faire de l’une plutôt que de l’autre ?
    Merci pour vos lumières.

    • J’avoue de ne avoir jamais utilisé grappe et de méconnaître son fonctionnement. D’après sa doc, les différences principales que je vois :

      • Grappes : lie une grappe à un objet puis lies des objets à une grappe. Liaisons lie directement les objets avec la possibilité de définir un type de liaisons. Les deux permettent donc de faire des liens « thématiques ». Liaison permet également de faire un lien sans type.
      • Au niveau interface, je en sais pas si grappe permet de modifier l’ordre d’affichage, ce que liaison permet
      • Liaison permet aussi de surcharger des infos de l’objet original comme le titre, descriptif, logo et url.
      • Les autres différences sont évidement au niveau de l’intégration dans les squelettes
    • Merci pour vos explications. Je vais creuser « Liaison d’objets » cela pourrait m’être utile dans certains cas.
      Avec les plugin « Grappes » et « Accès restreints », j’ai la possibilité, par exemple, de restreindre l’accès à des rubriques à des groupes/grappes de personnes.

      Je vois bien maintenant que les 2 sont différents et pourraient se compléter.

    • PS : Grappes et Liaison d’objets devraient permettre de lier des grappes entre elles.

    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