Skip to content
Extraits de code Groupes Projets
Valider 23aef3c5 rédigé par nicod's avatar nicod
Parcourir les fichiers

Des balises #GENERER_BLOCK et #GENERER_BLOCKS qui permettent d'afficher un...

Des balises #GENERER_BLOCK et #GENERER_BLOCKS qui permettent d'afficher un bloc ou tous les blocs d'un objet

Pour chaque bloc, on cherche un squelette selon le type de bloc et son identifiant.
En priorité dans "blocks_prive" si on est dans le privé (pour avoir un squelette d'affichage différent dans le privé, ou l'espace est plus réduit), puis dans "blocks".
On cherche donc dans l'ordre, et dans le path de SPIP :
- blocks_prive/identifiant.html
- blocks/identifiant.html
- blocks/dist.html (squelette par défaut)
parent 6c87bcb4
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
<BOUCLE(BLOCS) {id_bloc} {statut?}>
#SET{saisies, #INFO_SAISIES{blocs_types,#ID_BLOCS_TYPE}|blocks_deserialize}
#SET{valeurs, #VALEURS|blocks_deserialize}
[(#VOIR_SAISIES{#GET{saisies}, #GET{valeurs}})]
</BOUCLE>
<h2>#INPUT_1</h2>
[(#TEXTAREA_1|propre)]
...@@ -20,3 +20,121 @@ function blocks_serialize($data) { ...@@ -20,3 +20,121 @@ function blocks_serialize($data) {
function blocks_deserialize($data) { function blocks_deserialize($data) {
return json_decode($data ?? '', true); return json_decode($data ?? '', true);
} }
/**
* Compile la balise `#GENERER_BLOCK` qui génère l'affiche d'un bloc'
*
* @balise
* @example
* ```
* #GENERER_BLOCK
* #GENERER_BLOCK{3}
* ```
* @param Champ $p Pile au niveau de la balise
* @return Champ Pile complétée par le code à générer
*/
function balise_GENERER_BLOCK_dist($p) {
if (!($id_bloc = interprete_argument_balise(1, $p))) {
if ($p->id_boucle) {
$id_bloc = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
}
}
if (!$id_bloc) {
$msg = _T('zbug_balise_sans_argument', ['balise' => ' GENERER_BLOCK']);
erreur_squelette($msg, $p);
$p->interdire_scripts = true;
return $p;
}
$p->code = "_block_charger_block($id_bloc)";
$p->interdire_scripts = false;
return $p;
}
/**
* Compile la balise `#GENERER_BLOCKS` qui génère l'affiche des blocs liés à un objet
*
* @balise
* @example
* ```
* #GENERER_BLOCKS
* #GENERER_BLOCKS{article,3}
* ```
* @param Champ $p Pile au niveau de la balise
* @return Champ Pile complétée par le code à générer
*/
function balise_GENERER_BLOCKS_dist($p) {
if ($objet = interprete_argument_balise(1, $p)) {
$id_objet = interprete_argument_balise(2, $p);
} else {
$id_objet = null;
if ($p->id_boucle) {
$id_objet = champ_sql($p->boucles[$p->id_boucle]->primary, $p);
$objet = "objet_type('" . $p->boucles[$p->id_boucle]->id_table . "')";
}
}
if (!$objet || !$id_objet) {
$msg = _T('zbug_balise_sans_argument', ['balise' => ' GENERER_BLOCKS']);
erreur_squelette($msg, $p);
$p->interdire_scripts = true;
return $p;
}
$p->code = "_block_charger_blocks($objet, $id_objet)";
$p->interdire_scripts = false;
return $p;
}
function _block_charger_blocks($objet, $id_objet) {
$retour = '';
$blocs = objet_trouver_liens(['bloc' => '*'], [$objet => $id_objet]);
// TODO : vérifier statuts et rangs_liens
foreach ($blocs as $bloc) {
$retour .= _block_charger_block($bloc['id_bloc']);
}
return $retour;
}
function _block_charger_block($id_bloc) {
// TODO : vérifier statut
$infos = sql_fetsel(
'b.valeurs, bt.saisies, bt.identifiant',
'spip_blocs_types bt join spip_blocs b using(id_blocs_type)',
'b.id_bloc = ' . (int)$id_bloc
);
// chercher le squelette pour afficher le contenu du bloc
if (
test_espace_prive()
&& ($f = find_in_path($infos['identifiant'] . '.' . _EXTENSION_SQUELETTES, 'blocks_prive/'))
&& lire_fichier($f, $contenu)
) {
$squelette = 'blocks_prive/' . $infos['identifiant'];
} else if (
($f = find_in_path($infos['identifiant'] . '.' . _EXTENSION_SQUELETTES, 'blocks/'))
&& lire_fichier($f, $contenu)
) {
$squelette = 'blocks/' . $infos['identifiant'];
} else {
$squelette = 'blocks/dist';
}
$contexte = [
'id_bloc' => $id_bloc,
];
// transmettre les valeurs saisies dans le bloc au squelette
$saisies_bloc_type = blocks_deserialize($infos['saisies']);
if ($valeurs_saisies = blocks_deserialize($infos['valeurs'])) {
include_spip('inc/saisies_lister');
$saisies_par_nom = saisies_lister_par_nom($saisies_bloc_type);
foreach ($saisies_par_nom as $nom => $saisie) {
$contexte[$nom] = $valeurs_saisies[$nom];
}
}
return recuperer_fond($squelette, $contexte);
}
<h2>#INPUT_1</h2>
[(#TEXTAREA_1|propre)]
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter