source: spip-zone/_plugins_/noizetier/trunk/inc/noizetier_bloc.php @ 110321

Last change on this file since 110321 was 110112, checked in by eric@…, 21 months ago

Suite du refactoring des API page, bloc, objet pour plus de cohérence avec les API de N-Core.
On en profite pour éviter de charger pleins de fonctions qui ne servent jamais dans le public. Ajout de balises.

  • Property svn:eol-style set to native
File size: 3.3 KB
Line 
1<?php
2/**
3 * Ce fichier contient l'API de gestion des blocs Z configurables par le noiZetier.
4 *
5 * @package SPIP\NOIZETIER\BLOC\API
6 */
7if (!defined('_ECRIRE_INC_VERSION')) {
8        return;
9}
10
11/**
12 * Renvoie la liste par défaut des identifiants des blocs d'une page.
13 * Cette liste peut être modifiée via le pipeline noizetier_blocs_defaut, en particulier pour
14 * supprimer certains blocs pour l'ensemble des pages et objets.
15 *
16 * @api
17 *
18 * @return array
19 */
20function noizetier_bloc_defaut() {
21
22        // Stocker la liste des blocs par défaut pour éviter le recalcul sur le même hit.
23        static $blocs_defaut = null;
24
25        if (is_null($blocs_defaut)) {
26                if (defined('_DIR_PLUGIN_ZCORE') and !empty($GLOBALS['z_blocs'])) {
27                        // Z en version v2
28                        $blocs_defaut = $GLOBALS['z_blocs'];
29                } else {
30                        // Z en version v1
31                        $blocs_defaut = array('contenu', 'navigation', 'extra');
32                }
33
34                // Changer la liste au travers du pipeline. A priori le but est de supprimer
35                // certains blocs comme head ou head_js si on ne veut pas les configurer.
36                $blocs_defaut = pipeline('noizetier_blocs_defaut', $blocs_defaut);
37        }
38
39        return $blocs_defaut;
40}
41
42/**
43 * Retourne la description complète ou une information particulière d'un bloc donné.
44 * La description complète du bloc est inscrite dans un fichier YAML nommé `bloc.yaml`
45 * stocké dans le dossier du bloc concerné.
46 *
47 * @api
48 *
49 * @param string $bloc
50 *        Identifiant du bloc, à savoir, le nom du dossier sous Z.
51 * @param string $information
52 *        Champ précis à renvoyer ou cha^ne vide pour renvoyer tous les champs de l'objet.
53 *
54 * @return array|string
55 *         La description complète sous forme de tableau ou l'information précise demandée.
56 */
57function noizetier_bloc_lire($bloc, $information = '') {
58
59        static $description_bloc = array();
60        $retour = $information ? '' : array();
61
62        if (in_array($bloc, noizetier_bloc_defaut())) {
63                if (!isset($description_bloc[$bloc])) {
64                        if ($fichier = find_in_path("${bloc}/bloc.yaml")) {
65                                // Il y a un fichier YAML de configuration dans le répertoire du bloc, on le lit.
66                                include_spip('inc/yaml');
67                                if ($description = yaml_charger_inclusions(yaml_decode_file($fichier))) {
68                                        $description['nom'] = isset($description['nom']) ? _T_ou_typo($description['nom']) : ucfirst($bloc);
69                                        if (isset($description['description'])) {
70                                                $description['description'] = _T_ou_typo($description['description']);
71                                        }
72                                        if (!isset($description['icon'])) {
73                                                $description['icon'] = 'bloc-24.png';
74                                        }
75                                }
76                        } elseif (!defined('_DIR_PLUGIN_ZCORE')) {
77                                // Avec Zpip v1, les blocs sont toujours les mêmes : on en donne une description standard.
78                                $description = array(
79                                        'nom' => _T("noizetier:nom_bloc_${bloc}"),
80                                        'description' => _T("noizetier:description_bloc_${bloc}"),
81                                        'icon' => "bloc-${bloc}-24.png",
82                                );
83                        } else {
84                                // Aucune description, on renvoie juste le nom qui coincide avec l'identifiant du bloc
85                                $description = array('nom' => ucfirst($bloc));
86                        }
87
88                        // Sauvegarde de la description du bloc pour une consultation ultérieure dans le même hit.
89                        $description_bloc[$bloc] = $description;
90                }
91        }
92
93        if (isset($description_bloc[$bloc])) {
94                if (!$information) {
95                        $retour = $description_bloc[$bloc];
96                } elseif (isset($description_bloc[$bloc][$information])) {
97                        $retour = $description_bloc[$bloc][$information];
98                }
99        }
100
101        return $retour;
102}
Note: See TracBrowser for help on using the repository browser.