Liaison d’objets

Permet de lier les objets SPIP entre eux.

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).

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

Une discussion

  • 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

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

Dernière modification de cette page le 16 octobre 2018