GlisWeb framework
_menu.tools.php
Vai alla documentazione di questo file.
1 <?php
2 
19  function buildMenu( $menu, $tree, $pages, $active = NULL ) {
20 
21  // debug
22  // echo print_r( $pages, true );
23  // echo print_r( $tree, true );
24  // echo 'menu -> ' . $menu . PHP_EOL;
25 
26  // array del menu
27  $nav = array();
28 
29  // log
30  logWrite( 'elaboro il menu ' . $menu, 'menu', LOG_DEBUG );
31 
32  // verifico che il livello richiesto dell'albero sia popolato
33  if( is_array( $tree ) ) {
34 
35  // log
36  logWrite( 'voci da elaborare per il menu ' . $menu . ': ' . count( $tree ), 'menu', LOG_DEBUG );
37 
38  // costruisco le voci di menù per questo livello
39  foreach( $tree as $k => $v ) {
40 
41  // log
42  logWrite( 'elaboro la pagina ' . $k . ' per il menu ' . $menu, 'menu', LOG_DEBUG );
43 
44  // debug
45  // echo 'page -> ' . $k . PHP_EOL;
46  // echo print_r( $pages[ $k ], true );
47 
48  // verifico se la pagina ha i requisiti per comparire nel menu
49 /*
50  if(
51  isset( $pages[ $k ]['menu'][ $menu ] )
52  &&
53  ( ! empty( $pages[ $k ]['menu'][ $menu ]['label'] )
54  ||
55  ( count( $v ) > 0 && in_array( $k, $pages[ $active ]['parents']['id'] ) ) )
56  &&
57  ( ! isset( $pages[ $k ]['auth']['groups'] )
58  || ( isset( $_SESSION['account']['gruppi'] )
59  && count( array_intersect( $pages[ $k ]['auth']['groups'], $_SESSION['account']['gruppi'] ) ) > 0
60  )
61  )
62  ) {
63 */
64  if( isset( $pages[ $k ]['menu'][ $menu ] ) ) {
65 
66  if( ! empty( $pages[ $k ]['menu'][ $menu ]['label'] ) || ( count( $v ) > 0 && in_array( $k, $pages[ $active ]['parents']['id'] ) ) ) {
67 
68  if( ! isset( $pages[ $k ]['auth']['groups'] ) || ( isset( $_SESSION['account']['gruppi'] ) && count( array_intersect( $pages[ $k ]['auth']['groups'], $_SESSION['account']['gruppi'] ) ) > 0 ) ) {
69 
70  // debug
71  // echo print_r( $pages[ $k ]['menu'][ $menu ], true );
72  // echo print_r( $pages[ $k ]['menu'][ $menu ]['label'], true );
73  // echo $k . '/' . $active . PHP_EOL;
74  // print_r( $pages[ $k ]['parents']['id'] );
75  // echo $k . '/' . $pages[ $k ]['menu'][ $menu ]['priority'] . PHP_EOL;
76  // print_r( $pages[ $k ]['url'] );
77 
78  // costruisco la chiave per l'ordinamento
79  $key = $pages[ $k ]['menu'][ $menu ]['priority'] . '|' . $k;
80 
81  // log
82  if( empty( $pages[ $k ]['menu'][ $menu ]['label'] ) ) {
83  logWrite( 'voce vuota: ' . $k . ' -> ' . $menu . ': ' . $key, 'menu', LOG_ERR );
84  }
85 
86  // costruisco la voce corrente
87  $nav[ $key ] = array(
88  'label' => $pages[ $k ]['menu'][ $menu ]['label']
89  ,
90  'location' => ( ( isset( $pages[ $k ]['forced'] ) ) ? $pages[ $k ]['url'] : $pages[ $k ]['path'] )
91  ,
92  'target' => ( ( isset( $pages[ $k ]['menu'][ $menu ]['target'] ) && ! empty( $pages[ $k ]['menu'][ $menu ]['target'] ) ) ? $pages[ $k ]['menu'][ $menu ]['target'] : NULL )
93  ,
94  'active' => ( $k == $active ) ? true : false
95  ,
96  'current' => ( in_array( $k, $pages[ $active ]['parents']['id'] ) ) ? true : false
97  );
98 
99  // log
100  logWrite( $k . ' -> ' . $menu . ': ' . $key, 'menu', LOG_DEBUG );
101 
102  // debug
103  // echo $pages[ $k ]['menu'][ $menu ]['subpages'] . PHP_EOL;
104 
105  // contenuto del sottomenù
106  if(
107  count( $v ) > 0
108  && (
109  (
110  in_array( $k, $pages[ $active ]['parents']['id'] )
111  && (
112  ! isset( $pages[ $k ]['menu'][ $menu ]['subpages'] )
113  ||
114  $pages[ $k ]['menu'][ $menu ]['subpages'] != 'NEVER_SHOW'
115  )
116  )
117  ||
118  (
119  isset( $pages[ $k ]['menu'][ $menu ]['subpages'] )
120  &&
121  $pages[ $k ]['menu'][ $menu ]['subpages'] == 'ALWAYS_SHOW'
122  )
123  )
124  ) {
125  logWrite( 'vado in ricorsione per ' . $k . ' -> ' . $menu, 'menu', LOG_DEBUG );
126  $nav[ $key ]['content'] = buildMenu( $menu, $v, $pages, $active );
127  }
128 
129  } else {
130 
131  // log
132  logWrite( 'permessi insufficienti per visualizzare la pagina ' . $k . ' nel menu ' . $menu, 'menu', LOG_DEBUG );
133 
134  }
135 
136  } else {
137 
138  // log
139  logWrite( 'la pagina ' . $k . ' non ha label nel menu ' . $menu . ' e non fa parte del path della pagina attiva', 'menu', LOG_DEBUG );
140 
141  }
142 
143  } else {
144 
145  // log
146  logWrite( 'la pagina ' . $k . ' non appartiene al menu ' . $menu, 'menu', LOG_DEBUG );
147 
148  }
149 
150  }
151 
152  } else {
153 
154  // log
155  logWrite( 'albero malformato (non è un array)', 'menu', LOG_DEBUG );
156 
157  }
158 
159  // riordino l'array
160  ksort( $nav, SORT_NUMERIC );
161 
162  // debug
163  // print_r( $nav );
164 
165  // restituisco il risultato
166  return $nav;
167 
168  }
169 
175  function buildBreadcrumb( $page, $active ) {
176 
177  // array del menu
178  $nav = array();
179 
180  // verifico che la pagina possieda un array dei parents
181  if( is_array( $page['parents'] ) ) {
182 
183  // costruisco le briciole di pane
184  foreach( $page['parents']['id'] as $k => $v ) {
185 
186  // se la pagina non è la radice
187  if( ! empty( $v ) ) {
188 
189  // costruisco la briciola
190  $nav[] = array(
191  'location' => $page['parents']['path'][ $k ],
192  'label' => $page['parents']['h1'][ $k ],
193  'active' => ( $v == $active ) ? true : false
194  );
195 
196  }
197 
198  }
199 
200  }
201 
202  // restituisco il risultato
203  return $nav;
204 
205  }
206 
212  function buildFlags( $page, $lang ) {
213 
214  // array del menu
215  $nav = array();
216 
217  // verifico che la pagina possieda un array dei parents
218  if( isset( $page['path'] ) && is_array( $page['path'] ) ) {
219 
220  // costruisco le bandiere per la selezione della lingua
221  foreach( $page['path'] as $k => $v ) {
222 
223  // costruisco la bandiera
224  $nav[] = array(
225  'location' => $page['path'][ $k ],
226  'country' => strtolower( substr( $k, strpos( $k, '-' ) + 1 ) ),
227  'active' => ( $k == $lang ) ? true : false
228  );
229 
230  }
231 
232  // log
233  logWrite( 'generate ' . count( $nav ) . ' bandiere per il cambio lingua', 'localization', LOG_DEBUG );
234 
235  } else {
236 
237  // log
238  logWrite( 'impossibile generare le bandiere per il cambio lingua', 'localization', LOG_NOTICE );
239 
240  }
241 
242  // restituisco il risultato
243  return $nav;
244 
245  }
246 
247 ?>
buildMenu( $menu, $tree, $pages, $active=NULL)
Definition: _menu.tools.php:19
logWrite( $m, $f='site', $l=LOG_NOTICE, $d=DIRECTORY_LOG, $t=CURRENT_LOG_LEVEL, $s=SITE_STATUS)
scrive un messaggio nei log del sito
Definition: _log.utils.php:48
$page
buildFlags( $page, $lang)
if(isset( $_REQUEST['amazonCheckoutSessionId'])) $_SESSION['carrello']
buildBreadcrumb( $page, $active)