Changeset 41811 in spip-zone


Ignore:
Timestamp:
Oct 20, 2010, 10:49:41 AM (9 years ago)
Author:
cedric@…
Message:

le nom des squelettes de blocs peuvent prendre en prefixe le nom du bloc pour plus de lisibilite :
contenu/article.html ou contenu/contenu.article.html sont tous les deux acceptables. Le second est prioritaire.
+ optimisation sur les find in path pour ne faire la recherche du contenu qu'une fois par page, et non sur tous les blocs qui sont en dist.html

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/z-core/public/styliser_par_z.php

    r41808 r41811  
    2626        static $apl_constant;
    2727        static $page;
     28        static $disponible = array();
    2829
    2930        if (!isset($prefix_path)) {
     
    5960                        AND in_array($dir,$z_blocs) // verifier deja qu'on est dans un bloc Z
    6061                        AND in_array($dir,explode(',',constant($apl_constant))) // et dans un demande en APL
    61                         AND $pipe = find_in_path("$prefix_path$dir/z_apl.$ext") // et qui contient le squelette APL
     62                        AND $pipe = zcore_trouver_bloc($prefix_path,$dir,'z_apl',$ext) // et qui contient le squelette APL
    6263                        ){
    63                         $flux['data'] = substr($pipe, 0, - strlen(".$ext"));
     64                        $flux['data'] = $pipe;
    6465                        return $flux;
    6566                }
     
    7677                        // si on est sur un ?page=XX non trouve
    7778                        if ($flux['args']['contexte'][$page] == $fond OR $flux['args']['contexte']['type'] == $fond) {
     79
     80                                // si on est sur un ?page=XX non trouve
    7881                                // se brancher sur contenu/xx si il existe
    79                                 // si on est sur un ?page=XX non trouve
    80                                 $base = "$prefix_path$z_contenu/".$fond.".".$ext;
    81                                 if ($base = find_in_path($base)){
    82                                         $flux['data'] = substr(find_in_path($prefix_path."page.$ext"), 0, - strlen(".$ext"));
    83                                 }
    84                                 // si c'est un objet spip, associe a une table, utiliser le fond homonyme
    85                                 elseif (zcore_echaffaudable($fond)){
    86                                         $flux['data'] = substr(find_in_path($prefix_path."page.$ext"), 0, - strlen(".$ext"));
    87                                 }
     82                                // ou si c'est un objet spip, associe a une table, utiliser le fond homonyme
     83                                if (!isset($disponible[$fond]))
     84                                        $disponible[$fond] = (zcore_trouver_bloc($prefix_path,$z_contenu,$fond,$ext) OR zcore_echaffaudable($fond));
     85
     86                                if ($disponible[$fond])
     87                                        $flux['data'] = substr(find_in_path($prefix_path."page.$ext"), 0, - strlen(".$ext"));                           
    8888                        }
    8989
     
    109109                                        AND in_array($dir,$z_blocs)){
    110110                                        $type = substr($fond,strlen("$dir/"));
    111                                         if ($type=='page' OR find_in_path($prefix_path."$z_contenu/$type.$ext") OR zcore_echaffaudable($type))
    112                                                 $flux['data'] = substr(find_in_path($prefix_path."$dir/dist.$ext"), 0, - strlen(".$ext"));
     111                                        if ($type!=='page' AND !isset($disponible[$type]))
     112                                                $disponible[$type] = (zcore_trouver_bloc($prefix_path,$z_contenu,$type,$ext) OR zcore_echaffaudable($type));
     113                                        if ($type=='page' OR $disponible[$type])
     114                                                $flux['data'] = zcore_trouver_bloc($prefix_path,$dir,'dist',$ext);
    113115                                }
    114116                        }
     
    144146}
    145147
    146 
     148/**
     149 * Trouver un bloc qui peut etre sous le nom
     150 * contenu/article.html
     151 * ou
     152 * contenu/contenu.article.html
     153 *
     154 * @param string $prefix_path
     155 *      chemin de base qui prefixe la recherche
     156 * @param string $bloc
     157 *      nom du bloc cherche
     158 * @param string $fond
     159 *      nom de la page (ou 'dist' pour le bloc par defaut)
     160 * @param <type> $ext
     161 *      extension du squelette
     162 * @return string
     163 */
     164function zcore_trouver_bloc($prefix_path,$bloc,$fond,$ext){
     165        if ($f = find_in_path("$prefix_path$bloc/$bloc.$fond.$ext")
     166                OR $f = find_in_path("$prefix_path$bloc/$fond.$ext"))
     167                return substr($f, 0, - strlen(".$ext"));
     168        return "";
     169}
    147170/**
    148171 * Tester si un type est echaffaudable
Note: See TracChangeset for help on using the changeset viewer.