Changeset 41807 in spip-zone


Ignore:
Timestamp:
Oct 19, 2010, 2:11:03 PM (9 years ago)
Author:
cedric@…
Message:

rationalisation et nettoyage, preparation a la compat trunk SPIP
introduction d'un bloc head_js ajoute en fin de head pour inserer des js notamment, specifiques a certaines pages
seul le bloc contenu/ reste ici avec un dossier, pour l'exemple. Tous les blocs sont sinon a la charge du squelette utilisateur
deplacement des filtres et balise de boite dans un fichier dedie

Location:
_plugins_/z-core
Files:
7 added
5 deleted
8 edited
4 moved

Legend:

Unmodified
Added
Removed
  • _plugins_/z-core/body.html

    r33980 r41807  
    11<div id="page">
    2         <div id="entete">
    3                 <INCLURE{fond=inclure/entete,env}>
    4         </div>
    5         <div id="nav">
    6                 <INCLURE{fond=inclure/barre-nav,env}>
    7         </div>
    8        
    9         <div id="conteneur">   
     2        <div id="conteneur">
    103                <div id="contenu">
    114                        <INCLURE{fond=contenu/#ENV{type},env}>
    125                </div>
    13 
    14                 <div id="navigation">
    15                         <INCLURE{fond=navigation/#ENV{type},env}>
    16                         <INCLURE{fond=extra/#ENV{type},env}>
    17                 </div>
    186        </div>
    197
    20         <div id="pied">
    21                 <INCLURE{fond=inclure/pied,env}>
    22         </div>
    238</div>
  • _plugins_/z-core/contenu/z_apl.html

    r38624 r41807  
    22
    33  Squelette Big_Pipe
    4         http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919
     4        http://www.yterium.net/Zpip-blocs-de-page-et-Ajax
    55
    66  (c) 2010 Cedric Morin
  • _plugins_/z-core/head/dist.html

    r39388 r41807  
    2525<title>[(#NOM_SITE_SPIP|textebrut)]</title>
    2626[<meta name="description" content="(#DESCRIPTIF_SITE_SPIP|couper{150}|textebrut)" />]
    27 <INCLURE{fond=inclure/head}>
  • _plugins_/z-core/inclure/ajax_parallel_load.html

    r38777 r41807  
    22
    33  Squelette Big_Pipe
    4         http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919
     4        http://www.yterium.net/Zpip-blocs-de-page-et-Ajax
    55
    66  (c) 2010 Cedric Morin
  • _plugins_/z-core/inclure/head.html

    r39486 r41807  
    22        Head standard de toutes les pages ; les elements specifiques
    33        (title, description) figurent dans le squelette article.html
     4
     5
     6        // Work in progress : changement des nomenclature de css a venir
     7
    48]
    59[(#REM) Preciser le charset ]
  • _plugins_/z-core/page.html

    r33982 r41807  
    1 <INCLURE{fond=structure}{env}{type=page}{composition=#ENV{composition,#ENV{page}}}>
     1<INCLURE{fond=structure}{env}{type=#ENV{page,#ENV{type}}}{composition=#ENV{composition,''}}>
  • _plugins_/z-core/plugin.xml

    r41604 r41807  
    11<plugin>
    2         <nom><multi>[fr]Squelettes Z pour SPIP (Zpip)[en]Z skeletons for SPIP (Zpip)</multi></nom>
     2        <nom><multi>[fr]Z Framework pour SPIP (Zpip)[en]Z framework for SPIP (Zpip)</multi></nom>
    33        <auteur>Matthieu Marcillaud, C&#233;dric Morin, Romy Tetue, Collectif SPIP</auteur>
    4         <icon>img/zpip-128.png</icon>
     4        <icon>img/zcore-128.png</icon>
    55        <licence>GNU/GPL</licence>
    66        <version>2.0.0-dev</version>
     
    1818                </multi>
    1919        </description>
    20         <prefix>Z</prefix>
    21         <fonctions>z_pipelines.php</fonctions>
    22         <options>z_options.php</options>
     20        <prefix>Zcore</prefix>
     21        <fonctions>zcore_pipelines.php</fonctions>
     22        <options>zcore_options.php</options>
    2323        <pipeline>
    2424                <nom>declarer_url_objets</nom>
    25                 <inclure>z_pipelines.php</inclure>
     25                <inclure>zcore_pipelines.php</inclure>
    2626        </pipeline>
    2727        <pipeline>
    2828                <nom>styliser</nom>
    29                 <inclure>z_pipelines.php</inclure>
     29                <inclure>zcore_pipelines.php</inclure>
    3030        </pipeline>
    3131        <pipeline>
    3232                <nom>insert_head</nom>
    33                 <inclure>z_pipelines.php</inclure>
     33                <inclure>zcore_pipelines.php</inclure>
    3434        </pipeline>
    3535        <pipeline>
    3636                <nom>pre_propre</nom>
    37                 <inclure>z_pipelines.php</inclure>
     37                <inclure>zcore_pipelines.php</inclure>
    3838        </pipeline>
    3939        <categorie>squelette</categorie>
    40         <necessite id="SPIP" version="[2.0.10;]" />
     40        <necessite id="SPIP" version="[2.1.2;]" />
    4141</plugin>
  • _plugins_/z-core/structure.html

    r39388 r41807  
    22<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="#LANG" lang="#LANG" dir="#LANG_DIR">
    33<head>
     4[(#REM) Debut du head particulier a chaque page]
    45<INCLURE{fond=head/#ENV{type},env}>
     6[(#REM) Partie commune a toutes les pages, sans env]
     7<INCLURE{fond=inclure/head}>
     8[(#REM) Fin du head particulier a chaque page, pour inserer des js specifiques par exemple]
     9<INCLURE{fond=head_js/#ENV{type},env}>
    510</head>
    611<body class="page_#ENV{type,page}[ #ENV{type,page}_(#ENV{composition,''})]">
    712<INCLURE{fond=body,env}>
    8 #SPIP_CRON
    913</body>
    1014</html>
  • _plugins_/z-core/tests/zcore_echaffaudable.php

    r41805 r41807  
    11<?php
    22/**
    3  * Test unitaire de la fonction z_scaffoldable
    4  * du fichier ../plugins/zpip/z_pipelines.php
     3 * Test unitaire de la fonction zcore_echaffaudable
     4 * du fichier public/styliser_par_z.php
    55 *
    66 * genere automatiquement par TestBuilder
     
    88 */
    99
    10         $test = 'z_scaffoldable';
     10        $test = 'zcore_echaffaudable';
    1111        $remonte = "../";
    1212        while (!is_dir($remonte."ecrire"))
    1313                $remonte = "../$remonte";
    1414        require $remonte.'tests/test.inc';
    15         find_in_path("../plugins/zpip/z_pipelines.php",'',true);
     15        find_in_path("public/styliser_par_z.php",'',true);
    1616
    1717        //
    1818        // hop ! on y va
    1919        //
    20         $err = tester_fun('test_z_scaffoldable', essais_z_scaffoldable());
     20        $err = tester_fun('test_zcore_echaffaudable', essais_zcore_echaffaudable());
    2121       
    2222        // si le tableau $err est pas vide ca va pas
     
    2727        echo "OK";
    2828
    29         function test_z_scaffoldable(){
     29        function test_zcore_echaffaudable(){
    3030                $args = func_get_args();
    31                 $res = call_user_func_array('z_scaffoldable', $args);
     31                $res = call_user_func_array('zcore_echaffaudable', $args);
    3232                return is_array($res)?count($res):false;
    3333        }
    3434
    35         function essais_z_scaffoldable(){
     35        function essais_zcore_echaffaudable(){
    3636                $essais = array (
    3737  1 =>
  • _plugins_/z-core/zcore_options.php

    r41805 r41807  
    11<?php
    22/*
    3  * Plugin Zpip
     3 * Plugin Z-core
    44 * (c) 2008-2010 Cedric MORIN Yterium.net
    55 * Distribue sous licence GPL
     
    77 */
    88
     9
     10function zcore_blocs($espace_prive=false) {
     11        if ($espace_prive)
     12                return (isset($GLOBALS['z_blocs_ecrire'])?$GLOBALS['z_blocs_ecrire']:array('contenu','navigation','extra','head','hierarchie','top'));
     13        return (isset($GLOBALS['z_blocs'])?$GLOBALS['z_blocs']:array('contenu','navigation','extra','head','head_js'));
     14}
     15
    916if ($z = _request('var_zajax')) {
    10         if ($z_blocs = isset($GLOBALS['z_blocs'])?$GLOBALS['z_blocs']:array('contenu','navigation','extra','head')
     17        if ($z_blocs = zcore_blocs(test_espace_prive())
    1118          AND in_array($z,$z_blocs)) {
    1219                $GLOBALS['marqueur'] .= "$z:";
  • _plugins_/z-core/zcore_pipelines.php

    r41805 r41807  
    11<?php
    22/*
    3  * Plugin Zpip
     3 * Plugin Z-core
    44 * (c) 2008-2010 Cedric MORIN Yterium.net
    55 * Distribue sous licence GPL
     
    88
    99if (!defined("_ECRIRE_INC_VERSION")) return;
     10
     11// definition des balises et filtres boites
     12include_spip('inc/filtres_boites');
    1013
    1114// demander a SPIP de definir 'type' dans le contexte du premier squelette
     
    3841 * @return <type>
    3942 */
    40 function Z_declarer_url_objets($flux){
     43function zcore_declarer_url_objets($flux){
    4144        return $flux;
    4245}
     
    4851 * @return array
    4952 */
    50 function Z_styliser($flux){
    51         $z_blocs = isset($GLOBALS['z_blocs'])?$GLOBALS['z_blocs']:array('contenu','navigation','extra','head');
    52         $z_contenu = reset($z_blocs); // contenu par defaut
    53 
    54         $squelette = $flux['data'];
    55         $fond = $flux['args']['fond'];
    56         $ext = $flux['args']['ext'];
    57 
    58         // Ajax Parallel loading : ne pas calculer le bloc, mais renvoyer un js qui le loadera an ajax
    59         if (defined('_Z_AJAX_PARALLEL_LOAD_OK')
    60                 AND $dir = explode('/',$fond)
    61                 AND count($dir)==2 // pas un sous repertoire
    62                 AND $dir = reset($dir)
    63                 AND in_array($dir,$z_blocs) // verifier deja qu'on est dans un bloc Z
    64                 AND in_array($dir,explode(',',_Z_AJAX_PARALLEL_LOAD)) // et dans un demande en APL
    65                 AND $pipe = find_in_path("$dir/z_apl.$ext") // et qui contient le squelette APL
    66                 ){
    67                 $flux['data'] = substr($pipe, 0, - strlen(".$ext"));
    68                 return $flux;
     53function zcore_styliser($flux){
     54        // dans les futures versions de SPIP on pourra faire simplement un define('_ZPIP',true);
     55        if (!test_espace_prive()) {
     56                $styliser_par_z = charger_fonction('styliser_par_z','public');
     57                $flux = $styliser_par_z($flux);
    6958        }
    70 
    71         // gerer les squelettes non trouves
    72         // -> router vers les /dist.html
    73         // ou scaffolding ou page automatique les contenus
    74         if (!$squelette){
    75 
    76                 // si on est sur un ?page=XX non trouve
    77           if ($flux['args']['contexte'][_SPIP_PAGE] == $fond OR $flux['args']['contexte']['type'] == $fond) {
    78                         // si c'est un objet spip, associe a une table, utiliser le fond homonyme
    79                         if (z_scaffoldable($fond)){
    80                                 $flux['data'] = substr(find_in_path("objet.$ext"), 0, - strlen(".$ext"));
    81                         }
    82                         // sinon, brancher sur contenu/page-xx si elle existe
    83                         // si on est sur un ?page=XX non trouve
    84                         elseif ($flux['args']['contexte'][_SPIP_PAGE] == $fond) {
    85                                 $base = "$z_contenu/page-".$fond.".".$ext;
    86                                 if ($base = find_in_path($base)){
    87                                         $flux['data'] = substr(find_in_path("page.$ext"), 0, - strlen(".$ext"));
    88                                 }
    89                         }
    90                 }
    91 
    92                 // scaffolding :
    93                 // si c'est un fond de contenu d'un objet en base
    94                 // generer un fond automatique a la volee pour les webmestres
    95                 elseif (strncmp($fond, "$z_contenu/", strlen($z_contenu)+1)==0
    96                         AND include_spip('inc/autoriser')
    97                         AND isset($GLOBALS['visiteur_session']['id_auteur']) // performance
    98                         AND autoriser('webmestre')){
    99                         $type = substr($fond,strlen($z_contenu)+1);
    100                         if ($is = z_scaffoldable($type))
    101                                 $flux['data'] = z_scaffolding($type,$is[0],$is[1],$is[2],$ext);
    102                 }
    103 
    104                 // sinon, si on demande un fond non trouve dans un des autres blocs
    105                 // et si il y a bien un contenu correspondant ou scaffoldable
    106                 // se rabbatre sur le dist.html du bloc concerne
    107                 else{
    108                         if ( $dir = explode('/',$fond)
    109                                 AND $dir = reset($dir)
    110                                 AND $dir !== $z_contenu
    111                                 AND in_array($dir,$z_blocs)){
    112                                 $type = substr($fond,strlen("$dir/"));
    113                                 if (find_in_path("$z_contenu/$type.$ext") OR z_scaffoldable($type))
    114                                         $flux['data'] = substr(find_in_path("$dir/dist.$ext"), 0, - strlen(".$ext"));
    115                         }
    116                 }
    117                 $squelette = $flux['data'];
    118         }
    119         if ($fond=='body' AND substr($squelette,-strlen($fond))==$fond){
    120                 if (isset($flux['args']['contexte']['type'])
    121                   AND (
    122                                 (isset($flux['args']['contexte']['composition'])
    123                                 AND file_exists(($f=$squelette."-".$flux['args']['contexte']['type']."-".$flux['args']['contexte']['composition']).".$ext"))
    124                                 OR
    125                                 file_exists(($f=$squelette."-".$flux['args']['contexte']['type']).".$ext")
    126                                 ))
    127                         $flux['data'] = $f;
    128         }
    129         // chercher le fond correspondant a la composition
    130         elseif (isset($flux['args']['contexte']['composition'])
    131           AND substr($squelette,-strlen($fond))==$fond
    132           AND $dir = explode('/',$fond)
    133           AND $dir = reset($dir)
    134                 AND in_array($dir,$z_blocs)
    135           AND $f=find_in_path($fond."-".$flux['args']['contexte']['composition'].".$ext")){
    136                 $flux['data'] = substr($f,0,-strlen(".$ext"));
    137         }
     59       
    13860        return $flux;
    13961}
    14062
    141 
    142 /**
    143  * Tester si un type est scaffoldable
    144  * cad si il correspond bien a un objet en base
    145  *
    146  * @staticvar array $scaffoldable
    147  * @param string $type
    148  * @return bool
    149  */
    150 function z_scaffoldable($type){
    151         static $scaffoldable = array();
    152         if (isset($scaffoldable[$type]))
    153                 return $scaffoldable[$type];
    154         if (preg_match(',[^\w],',$type))
    155                 return $scaffoldable[$type] = false;
    156         if ($table = table_objet($type)
    157           AND $type == objet_type($table)
    158           AND $trouver_table = charger_fonction('trouver_table','base')
    159           AND
    160                 ($desc = $trouver_table($table)
    161                 OR $desc = $trouver_table($table_sql = $GLOBALS['table_prefix']."_$table"))
    162                 )
    163                 return $scaffoldable[$type] = array($table,$desc['table'],$desc);
    164         else
    165                 return $scaffoldable[$type] = false;
    166 }
    167 
    168 
    169 /**
    170  * Generer a la volee un fond a partir d'une table de contenu
    171  *
    172  * @param string $type
    173  * @param string $table
    174  * @param string $table_sql
    175  * @param array $desc
    176  * @param string $ext
    177  * @return string
    178  */
    179 function z_scaffolding($type,$table,$table_sql,$desc,$ext){
    180         include_spip('public/interfaces');
    181         $primary = id_table_objet($type);
    182         if (!$primary AND isset($desc['key']["PRIMARY KEY"])){
    183                 $primary = $desc['key']["PRIMARY KEY"];
    184         }
    185 
    186         // reperer un titre
    187         $titre = 'titre';
    188         if (isset($GLOBALS['table_titre'][$table])){
    189                 $titre = explode(' ',$GLOBALS['table_titre'][$table]);
    190                 $titre = explode(',',reset($titre));
    191                 $titre = reset($titre);
    192         }
    193         if (isset($desc['field'][$titre])){
    194                 unset($desc['field'][$titre]);
    195                 $titre="<h1 class='h1 #EDIT{titre}'>#".strtoupper($titre)."</h1>";
    196         }
    197         else $titre="";
    198 
    199         // reperer une date
    200         $date = "date";
    201         if (isset($GLOBALS['table_date'][$table]))
    202                 $date = $GLOBALS['table_date'][$table];
    203         if (isset($desc['field'][$date])){
    204                 unset($desc['field'][$date]);
    205                 $date = strtoupper($date);
    206                 $date="<p class='info-publi'>[(#$date|nom_jour) ][(#$date|affdate)][, <span class='auteurs'><:par_auteur:> (#LESAUTEURS)</span>]</p>";
    207         }
    208         else $date = "";
    209 
    210         $content = array();
    211         foreach($desc['field'] as $champ=>$z){
    212                 if (!in_array($champ,array('maj','statut','idx',$primary))){
    213                         $content[] = "[<div><strong>$champ</strong><div class='#EDIT{".$champ."} $champ'>(#".strtoupper($champ)."|image_reduire{500,0})</div></div>]";
    214                 }
    215         }
    216         $content = implode("\n\t",$content);
    217 
    218         $scaffold = "#CACHE{0}
    219 <BOUCLE_contenu($table_sql){".$primary."}>
    220 [(#REM) Fil d'Ariane ]
    221 <p id='hierarchie'><a href='#URL_SITE_SPIP/'><:accueil_site:></a>[ &gt; <strong class='on'>(#TITRE|couper{80})</strong>]</p>
    222 
    223 <div class='contenu-principal'>
    224         <div class='cartouche'>
    225                 $titre
    226                 $date
    227         </div>
    228 
    229         $content
    230 
    231 </div>
    232 
    233 [<div class='notes surlignable'><h2 class='h2 pas_surlignable'><:info_notes:></h2>(#NOTES)</div>]
    234 </BOUCLE_contenu>";
    235 
    236         $dir = sous_repertoire(_DIR_CACHE,"scaffold",false);
    237         $dir = sous_repertoire($dir,"contenu",false);
    238         $f = $dir."$type";
    239         ecrire_fichier("$f.$ext",$scaffold);
    240         return $f;
    241 }
    24263
    24364
     
    25172 * @return string
    25273 */
    253 function Z_pre_propre($flux){
     74function zcore_pre_propre($flux){
    25475        static $init = false;
    25576        if (!$init){
     
    27293 * @return string
    27394 */
    274 function Z_insert_head($flux){
     95function zcore_insert_head($flux){
    27596        if (find_in_path('inc-insert-head.html')){
    27697                $flux .= recuperer_fond('inc-insert-head',array());
     
    306127        return $p;
    307128}
    308 
    309 /**
    310  * #BOITE_OUVRIR{titre[,type]}
    311  * Racourci pour ouvrir une boite (info, simple, pour noisette ...)
    312  *
    313  * @param <type> $p
    314  * @return <type>
    315  */
    316 function balise_BOITE_OUVRIR_dist($p) {
    317         $_titre = interprete_argument_balise(1,$p);
    318         $_class = interprete_argument_balise(2,$p);
    319         $_head_class = interprete_argument_balise(3,$p);
    320         $_class = ($_class?", $_class":", ''");
    321         $_head_class = ($_head_class?", $_head_class":"");
    322 
    323         $p->code = "Z_box_open($_titre$_class$_head_class)";
    324         $p->interdire_scripts = false;
    325         return $p;
    326 }
    327 
    328 /**
    329  * #BOITE_PIED{class}
    330  * Racourci pour passer au pied de la boite, avant sa fermeture
    331  *
    332  * @param <type> $p
    333  * @return <type>
    334  */
    335 function balise_BOITE_PIED_dist($p) {
    336         $_class = interprete_argument_balise(1,$p);
    337         $_class = ($_class?"$_class":"");
    338 
    339         $p->code = "Z_box_foot($_class)";
    340         $p->interdire_scripts = false;
    341         return $p;
    342 }
    343 
    344 /**
    345  * #BOITE_FERMER
    346  * Racourci pour fermer une boite ouverte
    347  *
    348  * @param <type> $p
    349  * @return <type>
    350  */
    351 function balise_BOITE_FERMER_dist($p) {
    352         $p->code = "Z_box_close()";
    353         $p->interdire_scripts = false;
    354         return $p;
    355 }
    356 
    357 /**
    358  * Ouvrir une boite
    359  *
    360  * @param string $titre
    361  * @param string $class
    362  * @return <type>
    363  */
    364 function Z_box_open($titre, $class='', $head_class=''){
    365         $class = "box $class";
    366         $head_class = "hd $head_class";
    367         return '<div class="'.$class.'">'
    368         .'<b class="top"><b class="tl"></b><b class="tr"></b></b>'
    369         .'<div class="inner">'
    370         .($titre?'<div class="'.$head_class.'">'.$titre.'</div>':'')
    371         .'<div class="bd">';
    372 }
    373 
    374 /**
    375  * Passer au pied d'une boite
    376  * @param <type> $class
    377  * @return <type>
    378  */
    379 function Z_box_foot($class){
    380         $class = "ft $class";
    381         return  '</div>'
    382         .'<div class="'.$class.'">';
    383 }
    384 
    385 /**
    386  * Fermer une boite
    387  * @return <type>
    388  */
    389 function Z_box_close(){
    390         return '</div></div>'
    391         .'<b class="bottom"><b class="bl"></b><b class="br"></b></b>'
    392         .'</div>';
    393 }
    394 
    395129?>
Note: See TracChangeset for help on using the changeset viewer.