3 /***************************************************************************\
4 * SPIP, Systeme de publication pour l'internet *
6 * Copyright (c) 2001-2011 *
7 * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
9 * Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
10 * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
11 \***************************************************************************/
14 // Production dynamique d'un squelette lorsqu'il ne figure pas
15 // dans les dossiers de squelettes mais que son nom est celui d'une table SQL:
16 // on produit une table HTML montrant le contenu de la table SQL
17 // Le squelette produit illustre quelques possibilites de SPIP:
18 // - pagination automatique
19 // - tri ascendant et descendant sur chacune des colonnes
20 // - critere conditionnel donnant l'extrait correspondant a la colonne en URL
23 if (!defined('_ECRIRE_INC_VERSION')) return;
25 // nomme chaque colonne par le nom du champ,
26 // qui sert de lien vers la meme page, avec la table triee selon ce champ
27 // distingue champ numerique et non numerique
29 // http://doc.spip.org/@vertebrer_sort
30 function vertebrer_sort($fields, $direction)
33 foreach($fields as $n => $t) {
35 . ((sql_test_int($t) OR sql_test_date($r)) ?
'tri_n' : 'tri');
37 $url = vertebrer_sanstri($tri)
38 . "|parametre_url{" . $tri . ",'" . $n . "'}";
40 $res .= "\n\t\t<th style='text-align: center'>"
41 . "\n\t\t\t<a href='[(#SELF$url)]'>$n</a>"
47 // http://doc.spip.org/@vertebrer_sanstri
48 function vertebrer_sanstri($sauf='')
51 foreach (array('tri', 'tri_n', '_tri', '_tri_n') as $c) {
52 if ($sauf != $c) $url .= "|$c";
54 return '|parametre_url{"' . substr($url,1) .'",""}';
57 // Autant de formulaire que de champs (pour les criteres conditionnels)
59 // http://doc.spip.org/@vertebrer_form
60 function vertebrer_form($fields)
63 $url = join('|', array_keys($fields));
64 $url = "#SELF|\n\t\t\tparametre_url{'$url',''}";
65 foreach($fields as $n => $t) {
66 $s = sql_test_int($t) ?
11
67 : (preg_match('/char\s*\((\d)\)/i', $t, $r) ?
$r[1] : '');
69 $res .= "\n\t\t<td><form action='./' method='get'>"
70 . "<div style='text-align: center;' >"
71 . "\n\t\t\t<input name='$n'"
72 . ($s ?
" size='$s'" : '')
73 . " />\n\t\t\t[($url|\n\t\t\tform_hidden)]"
74 . "\n\t\t</div></form></td>";
79 // Autant de criteres conditionnels que de champs
81 // http://doc.spip.org/@vertebrer_crit
82 function vertebrer_crit($v)
85 foreach($v as $n => $t) { $res .= "\n\t\t{" . $n . " ?}"; }
90 // Class CSS en fonction de la parite du numero de ligne.
91 // Style text-align en fonction du type SQL (numerique ou non).
92 // Filtre de belle date sur type SQL signalant une date ou une estampille.
93 // Si une colonne reference une table, ajoute un href sur sa page dynamique
94 // (il faudrait aller chercher sa def pour ilustrer les jointures en SPIP)
96 // http://doc.spip.org/@vertebrer_cell
97 function vertebrer_cell($fields)
100 foreach($fields as $n => $t) {
101 $texte = "#" . strtoupper($n);
102 if (preg_match('/\s+references\s+([\w_]+)/' , $t, $r)) {
103 $url = "[(#SELF|parametre_url{page,'" . $r[1] . "'})]";
104 $texte = "<a href='$url'>" . $texte . "</a>";
106 if (sql_test_int($t))
107 $s = " style='text-align: right;'";
110 if (sql_test_date($t))
111 $texte = "[($texte|affdate_heure)]";
113 $res .= "\n\t\t<td$s>$texte</td>";
118 // http://doc.spip.org/@public_vertebrer_dist
119 function public_vertebrer_dist($desc)
121 $nom = $desc['table'];
122 $surnom = $desc['id_table'];
123 $connexion = $desc['connexion'];
124 $field = $desc['field'];
129 $form = vertebrer_form($field);
130 $crit = vertebrer_crit($field);
131 $cell = vertebrer_cell($field);
132 $sort = vertebrer_sort($field,'');
133 $tros = vertebrer_sort($field,'_');
134 $titre = "[(#ENV{page}|image_typo{police=dustismo_bold.ttf,taille=36,couleur=4433bb})]";
135 $distant = !$connexion ?
'' : "&connect=$connexion";
136 $skel = "./?"._SPIP_PAGE
."=table:$surnom$distant&var_mode=debug&var_mode_affiche=squelette#debug_boucle";
140 <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
141 <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='#LANG' lang='#LANG' dir='#LANG_DIR'>
143 <title>[(#NOM_SITE_SPIP|textebrut)] - #ENV{page}</title>
144 <INCLURE{fond=inc-head}>
146 <body class='page_rubrique'><div id='page'>
147 <INCLURE{fond=inc-entete}>
149 <h1 style='text-align:center'>$titre</h1><br />
151 [<p class='pagination'>(#PAGINATION)</p>]
152 <table class='spip' border='1' width='90%'>
154 <th><:info_numero_abbreviation:></th>$sort
159 <BOUCLE1($surnom){pagination}
160 {par #ENV{tri}}{!par #ENV{_tri}}{par num #ENV{tri_n}}{!par num #ENV{_tri_n}}$crit>
161 <tr class='[row_(#COMPTEUR_BOUCLE|alterner{'odd','even'})]'>
162 <td style='text-align: right;'>#COMPTEUR_BOUCLE</td>$cell
166 <th><:info_numero_abbreviation:></th>$tros
169 </B1>\n<h2 style='text-align:center'><:texte_vide:></h2>
171 <INCLURE{fond=inc-pied}{skel='$skel'}>