source: spip-zone/_plugins_/ajax_nav/ajax_nav_balises.php @ 58261

Last change on this file since 58261 was 58261, checked in by bystrano@…, 9 years ago

v0.9.0 - gere tous les types d'urls, et utilise le mecanisme de cache de spip

File size: 3.9 KB
Line 
1<?php
2include_spip('lib/phpQuery/phpQuery/phpQuery');
3
4function balise_RECUPERER_FOND ($p) {
5        $p->code = "calculer_balise_RECUPERER_FOND(@\$Pile[0])";
6        return $p;
7}
8
9function calculer_balise_RECUPERER_FOND ($env) {
10        /* spip_log('DEBUG'); */
11        // On cherche le type d'objet correspondant a la page. Si #ENV contient une cle 'page',
12        // c'est la bonne valeur.
13        if (isset($env['page'])) {
14                /* spip_log('page renseignee dans env'); */
15                $fond = $env['page'];
16                // Sinon, il faut ruser avec les id_objets pour trouver sur quelle page on est.
17        } else if (isset($env['id_article'])) {
18                /* spip_log('id_article trouve'); */
19                $fond = 'article';
20                // Si env contient un cle de type id_objet, on teste si objet est dans la liste des pages a
21                // ajaxifier. Si oui, c'est que c'est un type d'objet valide. Sinon, ca l'est peut-etre, mais
22                // pas moyen de savoir, alors on oublie, c'est de toute facon pas important pour nous,
23                // puisqu'on en aura besoin     que pour les pages ajax.
24        } else if (isset($GLOBALS['meta']['ajax_nav_config'])) {
25                $pages_ajax = unserialize($GLOBALS['meta']['ajax_nav_config']);
26                $pages_ajax = preg_split('/ /', $pages_ajax['pagesToAjaxify']);
27                foreach ($pages_ajax as $i => $page_ajax) {
28                        // le cas des articles est deja traite
29                        if ($page_ajax !== 'article') {
30                                foreach ($env as $parametre => $valeur) {
31                                        if (preg_replace('/^id_/', '', $parametre) === $page_ajax) {
32                                                /* spip_log('trouve dans la liste des pages ajax'); */
33                                                $fond = $page_ajax;
34                                        }
35                                }
36                        }
37                }
38        }
39        // si rien de tout ca n'a fonctionne, on est probablement sur le sommaire, qui a ma connaissance
40        // est le seul a ne rien renseigner.
41        if ( ! isset($fond) ) {
42                // on verifie que vraiment rien n'est renseigne.
43                foreach ($env as $parametre => $valeur) {
44                        if (preg_match('/^id_/', $parametre)) {
45                                /* spip_log('trouve malgre tout'); */
46                                $fond = preg_replace('/^id_/', '', $parametre);
47                        }
48                }
49                if ( ! isset($fond) ) {
50                        /* spip_log('rien a faire, c\'est le sommaire'); */
51                        $fond = 'sommaire';
52                }
53        }
54
55        return $fond;
56}
57
58function balise_EXTRAIRE_INFOS_PAGE ($p) {
59  $objet = interprete_argument_balise(1, $p);
60  $id_objet = interprete_argument_balise(2, $p);
61  $p->code = 'calculer_balise_EXTRAIRE_INFOS_PAGE(' . $objet .', ' . $id_objet . ')';
62  return $p;
63}
64
65function calculer_balise_EXTRAIRE_INFOS_PAGE($objet, $id_objet) {
66  if ($id_objet) {
67    $params = array('id_'.$objet => $id_objet);
68  } else {
69    $params = array();
70  }
71  $page = recuperer_fond($objet, $params);
72
73  // Ceci devrait marcher, mais en fait non, probablement parce que dans la spec HTML, body
74  // ne peut pas avoir d'attribut class...
75
76  //    phpQuery::newDocumentHTML($page);
77  //    $bodyClass = pq('body')->attr('class');
78
79  // ...mais comme SPIP utilise les class sur le body par defaut (le vilain!), on fait un
80  // truc moche comme ca :
81  $bodyClass = preg_replace('/(\r\n|\n|\r)/m', '', $page);
82  if (preg_match('/.*<body[^>]class=[\'\"]([^\'\"]*).*/', $bodyClass)) {
83    $bodyClass = preg_replace('/.*<body[^>]class=[\'\"]([^\'\"]*).*/', '$1', $bodyClass);
84  } else {
85    $bodyClass = '';
86  }
87
88  phpQuery::newDocumentHTML($page);
89  $title = pq('title');
90  $title = $title->html();
91
92  $tableau_resultat = serialize(array('body_classes'    => $bodyClass,
93                                      'title'           => $title,
94                                      ));
95
96  return "$tableau_resultat";
97}
98
99function balise_GET_BY_ID ($p) {
100  $get_by_id = interprete_argument_balise(1, $p);
101  $objet = interprete_argument_balise(2, $p);
102  $id_objet = interprete_argument_balise(3, $p);
103  $p->code = 'calculer_balise_GET_BY_ID(' . $get_by_id . ', ' . $objet .', ' . $id_objet . ')';
104  return $p;
105}
106
107function calculer_balise_GET_BY_ID($get_by_id, $objet, $id_objet) {
108  if ($id_objet) {
109    $params = array('id_'.$objet => $id_objet);
110  } else {
111    $params = array();
112  }
113  $page = recuperer_fond($objet, $params);
114  phpQuery::newDocumentHTML($page);
115  $bloc = pq('#' . $get_by_id);
116  $bloc = $bloc->html();
117
118  return "$bloc";
119}
120
121?>
Note: See TracBrowser for help on using the repository browser.