Ajouter une balise #CHERCHER_LOGO à #SPIP

22 February 2015

Lorsque l’on veut récupérer le logo d’un objet SPIP, on est obligé de faire quelques choses qui ressemble à:

<BOUCLE_logo(ARTICLES){id_article=1}>
#LOGO_ARTICLE
</BOUCLE_logo>

C’est assez ennuyant, d’autant que cela risque fort de faire une requête SQL alors que la récupération de logo n’en a absolument pas besoin, les fichiers sont stocker sous la forme objetId_objet.xx dans le dossier IMG.

On pourrait espérer que mettre simplement l’identifiant dans la balise récupère le logo, comme le font les balises URL. Malheureusement cela ne fonctionne pas.

Du coup, je me suis inspiré de la balise #INFO_ pour créer une balise #CHERCHER_LOGO:

<?php
/**
 * #CHERCHER_LOGO{objet, id_objet}
 * Retrouver le logo d'un objet sans avoir à lancer tout le système de boucle.
 *
 * @param mixed $p
 * @access public
 * @return mixed
 */
function balise_CHERCHER_LOGO_dist($p) {
    $objet = interprete_argument_balise(1, $p);
    $id_objet = interprete_argument_balise(2, $p);

    // Faire la conversion pour la fonction chercher_logo
    $objet = "id_table_objet($objet)";

    include_spip('inc/filtres');
    include_spip('public/quete');
    $p->code = "http_img_pack(_DIR_IMG.quete_logo($objet, 'on', $id_objet, '', true), '', 'class=\"spip_logos\"')";
    $p->interdire_scripts = false;

    return $p;
}

Voir mon gist: https://gist.github.com/phenix-factory/57cb993512d13fdfee88