Dépôt officiel du core SPIP Les plugins-dist faisant partie de la distribution SPIP sont présents dans https://git.spip.net/spip/[nom du plugin dist] https://www.spip.net
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

110 lines
3.4 KiB

<?php
/***************************************************************************\
* SPIP, Système de publication pour l'internet *
* *
* Copyright © avec tendresse depuis 2001 *
* Arnaud Martin, Antoine Pitrou, Philippe Rivière, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribué sous licence GNU/GPL. *
* Pour plus de détails voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
/**
* Ce fichier definit les boucles standard de SPIP
*
* @package SPIP\Core\Compilateur\Boucles
**/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Compile une boucle standard, sans condition rajoutée
*
* @param string $id_boucle
* Identifiant de la boucle
* @param array $boucles
* AST du squelette
* @return string
* Code PHP compilé de la boucle
**/
function boucle_DEFAUT_dist($id_boucle, &$boucles) {
return calculer_boucle($id_boucle, $boucles);
}
/**
* Compile une boucle récursive
*
* `<BOUCLE(BOUCLE)>`
*
* @link https://www.spip.net/914
*
* @param string $id_boucle
* Identifiant de la boucle
* @param array $boucles
* AST du squelette
* @return string
* Code PHP compilé de la boucle
**/
function boucle_BOUCLE_dist($id_boucle, &$boucles) {
return calculer_boucle($id_boucle, $boucles);
}
/**
* Compile une boucle HIERARCHIE
*
* La boucle `<BOUCLE(HIERARCHIE)>` retourne la liste des RUBRIQUES
* qui mènent de la racine du site à la rubrique ou à l’article en cours.
*
* Cette boucle (aliasée sur la table RUBRIQUES)
*
* - recherche un id_rubrique dans les boucles parentes,
* - extrait sa hiérarchie, en prenant ou non la rubrique en cours en fonction du critère {tout}
* - crée une condition WHERE avec ces identifiants ansi qu'une clause ORDER
* - compile la boucle.
*
* Le code compilé calculant la hierarchie est ajouté au tout début de la
* fonction de boucle et quitte la boucle si aucune rubrique n'est trouvée.
*
* @link https://www.spip.net/913
*
* @param string $id_boucle
* Identifiant de la boucle
* @param array $boucles
* AST du squelette
* @return string
* Code PHP compilé de la boucle
**/
function boucle_HIERARCHIE_dist($id_boucle, &$boucles) {
$boucle = &$boucles[$id_boucle];
$id_table = $boucle->id_table . '.id_rubrique';
// Si la boucle mere est une boucle RUBRIQUES il faut ignorer la feuille
// sauf en presence du critere {tout} (vu par phraser_html)
// ou {id_article} qui positionne aussi le {tout}
$boucle->hierarchie = 'if (!($id_rubrique = intval('
. calculer_argument_precedent($boucle->id_boucle, 'id_rubrique', $boucles)
. ")))\n\t\treturn '';\n\t"
. "include_spip('inc/rubriques');\n\t"
. '$hierarchie = calcul_hierarchie_in($id_rubrique,'
. (isset($boucle->modificateur['tout']) ? 'true' : 'false')
. ");\n\t"
. 'if (!$hierarchie) return "";' . "\n\t";
$boucle->where[] = ["'IN'", "'$id_table'", '"($hierarchie)"'];
$order = "FIELD($id_table, \$hierarchie)";
if (!isset($boucle->default_order[0]) or $boucle->default_order[0] != ' DESC') {
$boucle->default_order[] = "\"$order\"";
} else {
$boucle->default_order[0] = "\"$order DESC\"";
}
return calculer_boucle($id_boucle, $boucles);
}