[SPIP Zone] Retrouver tous les objets liés

Bonjour,

Existe-t-il une fonction dans SPIP permettant de lister avec autres objets est lié un premier objet ?

J’ai un objet toto (qui a aussi spip_totos_liens) et un autre objet dredi (et spip_dredis_liens).

L’objet Toto peut être lié à des objets grâce à sa table spip_totos_liens. Donc, là, on peut retrouver les objets auxquels il est lié facilement.
Mais voilà, je voudrais savoir si toto a été lié à d’autres objets tel que dredi voir auteurs.
Car, on a dans dredi_liens un id_dredi, id_objet et objet=« toto ». Même principe sur auteurs, avec spip_auteurs_liens, id_auteur, id_objet et objet=« toto ».

Est-ce que cette fonction existe ? Ou dois-je faire une recherche sur les noms de tables (cf. tables_auxiliaires, avec un grep ‹ _liens$ ›) pour y faire la recherche de l’objet « toto » ?

Amicalement

Ybbet.

Hop,

Le 27/05/2016 09:39, Ybbet Spip a écrit :

Bonjour,

Existe-t-il une fonction dans SPIP permettant de lister avec autres objets
est lié un premier objet ?

Je crois bien que objet_trouver_liens() est ce que tu cherches, cf :

objet_trouver_liens($objets_source,$objets_lies) permet de retrouver tous les liens de $objets_source vers $objets_lies.

++
b_b

Le 27 mai 2016 à 09:53, Bruno Bergot <brunobergot@gmail.com> a écrit :

Hop,

Le 27/05/2016 09:39, Ybbet Spip a écrit :

Bonjour,

Existe-t-il une fonction dans SPIP permettant de lister avec autres objets
est lié un premier objet ?

Je crois bien que objet_trouver_liens() est ce que tu cherches, cf :

objet_trouver_liens($objets_source,$objets_lies) permet de retrouver tous
les liens de $objets_source vers $objets_lies.

API de gestion des liaisons (`editer_liens`) - Programmer avec SPIP 4

Oui, j'ai bien vu cette fonction. Mais le besoin est un peu différent… Je
désire retrouver l'existence d'un lien $objet + $id_objet sans connaitre
$objets_source…

De l'article cité, on parle de objet_associable() (cf. aussi
http://code.spip.net/autodoc/tree/ecrire/action/editer_liens.php.html#function_objet_associable
) et c'est plutôt une utilisation de cette fonction qu'on pourrait
construire un test pour retrouver toutes les tables de liens et retrouver
l'existence de "objet='toto' and id_objet=$id_toto".

Ybbet

++
b_b

Salut,

Pas sur que ça réponde entièrement à ta question mais il y a bien une fonction

lister_tables_auxiliaires( )

http://code.spip.net/autodoc/tree/ecrire/base/objets.php.html#function_lister_tables_auxiliaires

Hello,

Le 27/05/2016 10:01, Ybbet Spip a écrit :

Le 27 mai 2016 à 09:53, Bruno Bergot <brunobergot@gmail.com
<mailto:brunobergot@gmail.com>> a écrit :

    Hop,

    Le 27/05/2016 09:39, Ybbet Spip a écrit :

        Bonjour,

        Existe-t-il une fonction dans SPIP permettant de lister avec
        autres objets
        est lié un premier objet ?

    Je crois bien que objet_trouver_liens() est ce que tu cherches, cf :

    objet_trouver_liens($objets_source,$objets_lies) permet de retrouver
    tous les liens de $objets_source vers $objets_lies.

    API de gestion des liaisons (`editer_liens`) - Programmer avec SPIP 4

Oui, j'ai bien vu cette fonction. Mais le besoin est un peu différent…
Je désire retrouver l'existence d'un lien $objet + $id_objet sans
connaitre $objets_source…

Il me semble qu'elle marche dans les deux sens la fonction non ? Tu peux mettre étoile * des deux côtés (mais pas des deux côtés *en même temps* ça ne voudrait rien dire).

Par contre tu dois donc au moins l'appeler deux fois : une fois quand toto est la source, une fois quand il fait partie des liens.

objet_trouver_liens(array('toto'=>123), array('*'=>'*'))

objet_trouver_liens(array('*'=>'*'), array('toto'=>123))

À tester…

Si dans les sources tu peux pas mettre *, tu peux la remplir avec la liste des tables ayant des liens (tu cherches la liste, tu la stockes et tu crées un table 'article'=>'*', 'mots'=>'*', que tu mets dans source), là ça va forcément marcher.

--
RastaPopoulos