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

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

ajoute la possibilite de declancher soit meme les remplacements des divs + regle probleme avec sites multilingues.

File size: 4.0 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  $lang = pq('html');
93        $lang = $lang->attr('lang');
94
95  $tableau_resultat = serialize(array('body_classes'    => $bodyClass,
96                                                                                                                                                        'title'         => $title,
97                                                                                                                                                        'lang'    => $lang,
98                                                                                                                                                        ));
99
100  return "$tableau_resultat";
101}
102
103function balise_GET_BY_ID ($p) {
104  $get_by_id = interprete_argument_balise(1, $p);
105  $objet = interprete_argument_balise(2, $p);
106  $id_objet = interprete_argument_balise(3, $p);
107  $p->code = 'calculer_balise_GET_BY_ID(' . $get_by_id . ', ' . $objet .', ' . $id_objet . ')';
108  return $p;
109}
110
111function calculer_balise_GET_BY_ID($get_by_id, $objet, $id_objet) {
112  if ($id_objet) {
113    $params = array('id_'.$objet => $id_objet);
114  } else {
115    $params = array();
116  }
117  $page = recuperer_fond($objet, $params);
118  phpQuery::newDocumentHTML($page);
119  $bloc = pq('#' . $get_by_id);
120  $bloc = $bloc->html();
121
122  return "$bloc";
123}
124
125?>
Note: See TracBrowser for help on using the repository browser.