Trouver la traduction d'un objet #SPIP

15 September 2016

Une fonction bien pratique quand on travaille avec des squelettes multilingues. Avant j’utilisais un assemblage de boucles et de critères, un peu illisible.

Cette fonction simplifie grandement le travail en retrouvant automatiquement une traduction en fonction d’un couple id_objet/objet.
Cela devrait fonctionner avec n’importe quel objet utilisant le système de traduction de SPIP.

<?php
/**
 * Récupère la traduction d'un objet via la langue et l'id_objet
 *
 * @param int $id_objet
 * @param string $objet
 * @param string $lang
 * @access public
 * @return int
 */
function objet_trouver_traduction($id_objet, $objet, $lang) {

    // Pas de lang, on sort
    if (!isset($lang)) {
        return $id_objet;
    }

    // Table
    $table = table_objet_sql($objet);
    $cle_primaire = id_table_objet($objet);
    // On récupère l'éventuelle traduction
    $id_traduction = sql_getfetsel(
        $cle_primaire,
        $table,
        array(
            'id_trad='.intval($id_objet),
            'lang='.sql_quote($lang),
            'statut='.sql_quote('publie')
        )
    );

    return $id_traduction;
}

function article_trouver_traduction($id_article, $lang) {
    return objet_trouver_traduction($id_article, 'article', $lang);
}

// Si le plugin Traduction entre rubriques est activé
// http://contrib.spip.net/Traduction-des-rubriques
function rubrique_trouver_traduction($id_article, $lang) {
    return objet_trouver_traduction($id_article, 'rubrique', $lang);
}

Je l’utilise surtout pour les liens directs dans les squelettes :

<a href="[(#URL_ARTICLE{#EVAL{_ID_ARTICLE_CONTACT}|article_trouver_traduction{#ENV{lang}}})]" class="button large">
    Nous contacter
</a>