La fonction
sql_multi()
applique une expression SQL sur une colonne contenant
un polyglotte (
<multi>
) pour y extraire la partie correspondant à la langue indiquée. Elle retourne une chaine du type :
expression AS multi
. Cette opération sert essentiellement pour demander simultanément un tri sur cette colonne.
Elle accepte 4 paramètres :
-#
$sel
est le nom de la colonne,
-#
$lang
est le code de langue (’fr’, ’es’, ...),
-#
$serveur
,
-#
$option
Elle s’utilise ainsi :
$multi = sql_multi('colonne', 'langue');
$select = sql_select($multi, 'table');
Notons que dans un squelette, le critère de boucle
{par multi xx}
où
xx
est le nom de la colonne à trier appelle aussi cette fonction pour trier selon la langue en cours.
Exemple
SPIP utilise cette fonction pour trier des listes selon le titre d’un élément, dans la langue du visiteur :
$select = array(
'id_mot', 'id_groupe', 'titre', 'descriptif',
sql_multi ("titre", $GLOBALS['spip_lang']));
if ($results = sql_select($select, 'spip_mots', "id_groupe=$id_groupe", '', 'multi')) {
while ($r = sql_fetch($results)) {
// $r['titre'] $r['multi']
}
}
Le plugin « Grappes » également :
$grappes = sql_allfetsel("*, ".sql_multi ("titre", "$spip_lang"), "spip_grappes", "", "", "multi");
foreach ($grappes as $g) {
// $g['multi']
}