GlisWeb framework
_prodotti.elenco.php
Vai alla documentazione di questo file.
1 <?php
2 
13  // seleziono le sottocategorie
14  if( isset( $ct['page']['metadati']['id_categoria_prodotti'] ) && ! empty( $ct['page']['metadati']['id_categoria_prodotti'] ) ) {
15 
16  // parametri di base
17  $params = array(
18 #1 array( 's' => $ct['page']['metadati']['id_categoria_prodotti'] ),
19 #1 array( 's' => $cf['localization']['language']['id'] )
20  array( 's' => $cf['localization']['language']['id'] ),
21  array( 's' => $ct['page']['metadati']['id_categoria_prodotti'] )
22  );
23 
24  // impostazioni di base
25  $perpg = 50;
26  $filters = array();
27  $order = $orders = array();
28 
29  // ordinamento di default
30  if( empty( $orders ) ) {
31  $orders = array( 'prodotti_categorie.ordine' => 'ASC' );
32  }
33 
34  // paginazione (SDF modificato $_REQUEST['pg'] in $_REQUEST['__curpg__'] per uniformità con documentazione
35  if( isset( $_REQUEST['__curpg__'] ) ) {
36  $pg = $_REQUEST['__curpg__'] * $perpg;
37  } else {
38  $pg = $_REQUEST['__curpg__'] = 0;
39  }
40 
41 
42  // congiunzione
43  if( isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['__inclusivo__'] ) ) {
44  $conj = ' OR ';
45  } else {
46  $conj = ' AND ';
47  }
48 
49  // filtro larghezza/lunghezza inclusivo
50  if( isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['__inclusivo__'] ) ) {
51 
52  if( isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['larghezza_max'] ) && ! empty( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['larghezza_max'] ) ) {
53  if( ! isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['lunghezza_max'] ) || empty( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['lunghezza_max'] ) ) {
54  $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['lunghezza_max'] = $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['larghezza_max'];
55  }
56  }
57 
58  if( isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['lunghezza_max'] ) && ! empty( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['lunghezza_max'] ) ) {
59  if( ! isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['larghezza_max'] ) || empty( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['larghezza_max'] ) ) {
60  $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['larghezza_max'] = $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['lunghezza_max'];
61  }
62  }
63 
64  if( ! empty( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['lunghezza_max'] ) && ! empty( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['larghezza_max'] ) ) {
65  $filters = array( '( ( larghezza_prodotto <= ? AND lunghezza_prodotto <= ? ) OR ( larghezza_prodotto <= ? AND lunghezza_prodotto <= ? ) )' );
66  $params[] = array( 's' => $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['larghezza_max'] );
67  $params[] = array( 's' => $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['lunghezza_max'] );
68  $params[] = array( 's' => $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['lunghezza_max'] );
69  $params[] = array( 's' => $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['larghezza_max'] );
70  $orders = array( 'somma_dimensioni' => 'DESC' );
71  }
72 
73  } else {
74 
75  // filtro larghezza
76  if( isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['larghezza_max'] ) ) {
77  if( ! empty( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['larghezza_max'] ) ) {
78  $filters[] = ' larghezza_prodotto <= ? ';
79  $params[] = array( 's' => $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['larghezza_max'] );
80  }
81  }
82 
83  // filtro lunghezza
84  if( isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['lunghezza_max'] ) ) {
85  if( ! empty( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['lunghezza_max'] ) ) {
86  $filters[] = ' lunghezza_prodotto <= ? ';
87  $params[] = array( 's' => $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['lunghezza_max'] );
88  }
89  }
90 
91  }
92 
93 
94 
95  // SDF filtro per marchio
96  if( isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['marchio'] ) ) {
97 
98  $marchi_richiesti = array();
99  foreach( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['marchio'] as $idmarchio => $marchio ) {
100  if($marchio == 1) {
101  $marchi_richiesti[] = $idmarchio;
102  }
103  }
104 
105  if(count($marchi_richiesti)) {
106  $cond = array();
107  foreach( $marchi_richiesti as $marchio_richiesto ) {
108  $cond[] = ' prodotti.id_marchio = ? ';
109  $params[] = array( 's' => $marchio_richiesto );
110 
111  }
112  $filters[] = ' (' . implode( ' OR ', $cond ) . ') ';
113  }
114  }
115 
116  // SDF filtro per taglia
117  if( isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['taglia'] ) ) {
118  $taglie_richieste = array();
119  foreach( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['taglia'] as $idtaglia => $taglia ) {
120  if($taglia == 1) {
121  $taglie_richieste[] = $idtaglia;
122  }
123  }
124 
125  if(count($taglie_richieste)) {
126  $cond = array();
127  foreach( $taglie_richieste as $taglia_richiesta ) {
128  $cond[] = ' articoli.id_taglia = ? ';
129  $params[] = array( 's' => $taglia_richiesta );
130 
131  }
132  $filters[] = ' (SELECT count(*) as numArt FROM articoli where id_prodotto = prodotti.id AND (' . implode( ' OR ', $cond ) . '))';
133  }
134  }
135 
136 
137  // SDF filtro per categoria
138  if( isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['categoria'] ) ) {
139  $categorie_richieste = array();
140  foreach( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__filters__']['categoria'] as $idcategoria => $categoria ) {
141  if($categoria == 1) {
142  $categorie_richieste[] = $idcategoria;
143  }
144  }
145 
146  if(count($categorie_richieste)) {
147  $cond = array();
148  foreach( $categorie_richieste as $categoria_richiesta ) {
149  $cond[] = ' prodotti_categorie.id_categoria = ? ';
150  $params[] = array( 's' => $categoria_richiesta );
151  }
152  $filters[] = ' (' . implode( ' OR ', $cond ) . ') ';
153  }
154  }
155 
156  // filtro generico
157  if( isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__search__'] ) ) {
158  if( ! empty( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__search__'] ) ) {
159  foreach( explode( ' ', $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__search__'] ) as $tks ) {
160  $like = "%${tks}%";
161  $cond = array();
162  foreach( array( 'prodotti.id', 'contenuti.title', 'contenuti.h1', 'contenuti.h2', 'contenuti.abstract', 'contenuti.testo' ) as $field ) {
163  $cond[] = $field . ' LIKE ?';
164  $params[] = array( 's' => $like );
165  }
166  $filters[] = ' (' . implode( ' OR ', $cond ) . ') ';
167  }
168  }
169  }
170 
171  // ordinamento per prezzo
172  if( isset( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__sort__']['prezzo'] ) ) {
173  if( ! empty( $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__sort__']['prezzo'] ) ) {
174  $orders['prezzi.prezzo'] = $_SESSION['__view__']['__pages__'][ $ct['page']['id'] ]['__sort__']['prezzo'];
175  }
176  }
177 
178  // ordinamento per dimensioni
179  // TODO
180 
181  // ordinamento
182  foreach( $orders as $fld => $ord ) {
183  $order[] = $fld . ' ' . $ord;
184  }
185 
186  // query di recupero prodotti della pagina
187  $q = 'SELECT SQL_CALC_FOUND_ROWS prodotti.id, contenuti.title, contenuti.h1, contenuti.h2, contenuti.cappello, contenuti.abstract, '
188  .'immagini.path AS immagine, contenuti_immagine.cappello AS didascalia, '
189  .'( prodotti.larghezza_prodotto + prodotti.lunghezza_prodotto ) AS somma_dimensioni, '
190  .'concat( "categorie_prodotti_'.$ct['page']['metadati']['id_categoria_prodotti'].'_prodotti_", prodotti.id ) AS id_pagina, '
191  .'prodotti.id_marchio, marchi.nome as marchio, ' // SDF
192  .'mPiuVenduti.testo AS piu_venduti '
193  .'FROM prodotti '
194 #1 .'INNER JOIN prodotti_categorie ON ( prodotti_categorie.id_prodotto = prodotti.id AND prodotti_categorie.id_categoria = ? ) '
195  .'INNER JOIN prodotti_categorie ON prodotti_categorie.id_prodotto = prodotti.id '
196  .'INNER JOIN contenuti ON ( contenuti.id_prodotto = prodotti.id AND contenuti.id_lingua = ? ) '
197  .'INNER JOIN tipologie_pubblicazione ON tipologie_pubblicazione.id = prodotti.id_tipologia_pubblicazione '
198 #2 TODO il fatto che siano o meno ammissibili prodotti senza prezzo dovrebbe essere un'opzione
199 #2 .'INNER JOIN prezzi ON prezzi.id_prodotto = prodotti.id '
200 #2 .'INNER JOIN iva ON iva.id = prezzi.id_iva '
201  .'LEFT JOIN prezzi ON prezzi.id_prodotto = prodotti.id '
202  .'LEFT JOIN iva ON iva.id = prezzi.id_iva '
203  .'LEFT JOIN immagini ON ( immagini.id_prodotto = prodotti.id AND immagini.id_ruolo = 4 ) '
204  .'LEFT JOIN contenuti AS contenuti_immagine ON ( contenuti_immagine.id_immagine = immagini.id AND contenuti.id_lingua = contenuti.id_lingua ) '
205  .'LEFT JOIN metadati AS mPiuVenduti ON ( mPiuVenduti.id_prodotto = prodotti.id AND mPiuVenduti.nome = "piu_venduti" ) '
206  .'LEFT JOIN marchi ON (prodotti.id_marchio = marchi.id ) ' // SDF
207  .'LEFT JOIN articoli ON prodotti.id = articoli.id_prodotto ' // SDF
208  .'WHERE categorie_prodotti_path_check( prodotti_categorie.id_categoria, ? ) = 1 AND tipologie_pubblicazione.se_pubblicato = 1 '
209  // .'AND articoli.id_taglia IS NOT NULL ' // SDF
210  // .'AND prodotti.se_disponibile = 1 ' // SDF
211  .'AND (SELECT count(*) FROM immagini where id_articolo IN (SELECT articoli.id FROM articoli WHERE id_prodotto = prodotti.id)) ' // SDF
212  // .'OR ( SELECT count(*) FROM immagini where id_prodotto = prodotti.id ) > 0 ) ' // SDF
213  .( ( count( $filters ) ) ? 'AND (' : NULL ) . implode( $conj, $filters ) . ( ( count( $filters ) ) ? ') ' : NULL )
214  .'GROUP BY prodotti.id '
215  .'ORDER BY ' . implode( ', ', $order ) . ' '
216  .'LIMIT ?,?';
217 
218 
219  // SDF query per il conteggio del numero totale di prodotti (stessi parametri della q sopra ma senza paginazione)
220  $qTot = 'SELECT count(prodotti.id) '
221  .'FROM prodotti '
222  .'INNER JOIN prodotti_categorie ON prodotti_categorie.id_prodotto = prodotti.id '
223  .'INNER JOIN contenuti ON ( contenuti.id_prodotto = prodotti.id AND contenuti.id_lingua = ? ) '
224  .'INNER JOIN tipologie_pubblicazione ON tipologie_pubblicazione.id = prodotti.id_tipologia_pubblicazione '
225  .'LEFT JOIN prezzi ON prezzi.id_prodotto = prodotti.id '
226  .'LEFT JOIN iva ON iva.id = prezzi.id_iva '
227  .'LEFT JOIN immagini ON ( immagini.id_prodotto = prodotti.id AND immagini.id_ruolo = 4 ) '
228  .'LEFT JOIN contenuti AS contenuti_immagine ON ( contenuti_immagine.id_immagine = immagini.id AND contenuti.id_lingua = contenuti.id_lingua ) '
229  .'LEFT JOIN metadati AS mPiuVenduti ON ( mPiuVenduti.id_prodotto = prodotti.id AND mPiuVenduti.nome = "piu_venduti" ) '
230  .'LEFT JOIN marchi ON (prodotti.id_marchio = marchi.id ) ' // SDF
231  .'LEFT JOIN articoli ON prodotti.id = articoli.id_prodotto ' // SDF
232  .'WHERE categorie_prodotti_path_check( prodotti_categorie.id_categoria, ? ) = 1 AND tipologie_pubblicazione.se_pubblicato = 1 '
233  // .'AND articoli.id_taglia IS NOT NULL ' // SDF
234  // .'AND prodotti.se_disponibile = 1 ' // SDF
235  .'AND (SELECT count(*) FROM immagini where id_articolo IN (SELECT articoli.id FROM articoli WHERE id_prodotto = prodotti.id)) ' // SDF
236  .( ( count( $filters ) ) ? 'AND (' : NULL ) . implode( $conj, $filters ) . ( ( count( $filters ) ) ? ') ' : NULL )
237  .'GROUP BY prodotti.id ';
238 
239 
240  // SDF leggo il numero totale di prodotti
241  $totpg = count( mysqlQuery( $cf['mysql']['connection'], $qTot, $params ) );
242 
243 
244  // aggiunta della paginazione
245  $params[] = array( 's' => $pg );
246  $params[] = array( 's' => $perpg );
247 
248 
249  // SDF aggiunto numero massimo pagine
250  $_REQUEST['__maxpg__'] = floor( $totpg / $perpg );
251 
252 
253  // selezione dei prodotti
254 # $ct['page']['contents']['prodotti'] = mysqlCachedQuery(
255 # $cf['memcache']['connection'],
256  $ct['page']['contents']['prodotti'] = mysqlQuery(
257  $cf['mysql']['connection'],
258  $q,
259  $params
260  );
261 
262 // echo "pg: " . $pg;
263 // echo "record con limit: " . count($ct['page']['contents']['prodotti']) . PHP_EOL;
264 // echo "record totali" . $totpg;
265 
266 
267  // TODO
268  // ciclo su $ct['page']['contents']['prodotti'] per creare il sotto array di articoli
269  // $ct['page']['contents']['prodotti'][id_prodotto]['contents']['articoli']
270 
271  // SDF leggo il primo articolo (per l'immagine prodotto) e le info sul prezzo
272  foreach( $ct['page']['contents']['prodotti'] as $key => $prod ) {
273 
274  $immagine = mysqlQuery(
275  $cf['mysql']['connection'],
276  'SELECT nome, path, orientamento FROM immagini WHERE id_articolo = ( SELECT id FROM articoli WHERE id_prodotto = ? ORDER BY id LIMIT 1 ) ORDER BY ordine LIMIT 1'
277  ,
278  array(
279  array( 's' => $prod['id'] )
280  )
281  );
282 
283  $ct['page']['contents']['prodotti'][ $key ]['immagine_principale'] = $immagine[0];
284 
285  // leggo il prezzo
286  $prezzi = mysqlQuery(
287  $cf['mysql']['connection'],
288  'SELECT * from prezzi_view WHERE id_prodotto = ?'
289  ,
290  array(
291  array( 's' => $prod['id'] )
292  )
293  );
294 
295  foreach( $prezzi as $prezzo ) {
296  $ct['page']['contents']['prodotti'][ $key ]['prezzi'][ $prezzo['listino'] ] = $prezzo;
297 
298  // SDF 01-07-2020 aggiunta di eventuali sconti
299  $variazione_prezzo = variazionePrezzo( $cf['mysql']['connection'], $prezzo['id_listino'], $prezzo['id_prodotto'], $prezzo['prezzo_lordo'] );
300  $ct['page']['contents']['prodotti'][ $key ]['prezzi'][ $prezzo['listino'] ]['tipo_sconto'] = $variazione_prezzo['tipoSconto'];
301  $ct['page']['contents']['prodotti'][ $key ]['prezzi'][ $prezzo['listino'] ]['sconto'] = $variazione_prezzo['sconto'];
302  $ct['page']['contents']['prodotti'][ $key ]['prezzi'][ $prezzo['listino'] ]['sconto_su'] = $variazione_prezzo['sconto_su'];
303  $ct['page']['contents']['prodotti'][ $key ]['prezzi'][ $prezzo['listino'] ]['importo_sconto'] = $variazione_prezzo['importoSconto'];
304  $ct['page']['contents']['prodotti'][ $key ]['prezzi'][ $prezzo['listino'] ]['prezzo_scontato'] = $variazione_prezzo['prezzoScontato'];
305  }
306  }
307 
308 
309 
310  // SDF costruisco l'array delle categorie (corrente e figlie) per la pagina
311  $ct['etc']['categorie'] = mysqlQuery(
312  $cf['mysql']['connection'],
313  'SELECT id, nome FROM categorie_prodotti '
314  . 'WHERE (id = ? OR id_genitore = ?) AND id_tipologia_pubblicazione = 2 ORDER BY categorie_prodotti.nome'
315  ,
316  array(
317  array( 's' => $ct['page']['metadati']['id_categoria_prodotti'] ),
318  array( 's' => $ct['page']['metadati']['id_categoria_prodotti'] )
319  )
320  );
321 
322 
323  // SDF costruisco l'array dei marchi per la pagina
324  $ct['etc']['marchi'] = mysqlQuery(
325  $cf['mysql']['connection'],
326  'SELECT DISTINCT marchi.id, marchi.nome FROM marchi INNER JOIN prodotti ON marchi.id = prodotti.id_marchio INNER JOIN prodotti_categorie '
327  . 'ON prodotti.id = prodotti_categorie.id_prodotto INNER JOIN categorie_prodotti ON prodotti_categorie.id_categoria = categorie_prodotti.id '
328  . 'WHERE categorie_prodotti.id = ? OR categorie_prodotti.id_genitore = ? ORDER BY marchi.nome'
329  ,
330  array(
331  array( 's' => $ct['page']['metadati']['id_categoria_prodotti'] ),
332  array( 's' => $ct['page']['metadati']['id_categoria_prodotti'] )
333  )
334  );
335 
336  // SDF costruisco l'array delle taglie per la pagina
337  $ct['etc']['taglie'] = mysqlQuery(
338  $cf['mysql']['connection'],
339  'SELECT DISTINCT taglie.id, taglie.it as nome FROM taglie INNER JOIN articoli ON taglie.id = articoli.id_taglia '
340  .'INNER JOIN prodotti ON articoli.id_prodotto = prodotti.id INNER JOIN prodotti_categorie '
341  .'ON prodotti.id = prodotti_categorie.id_prodotto INNER JOIN categorie_prodotti ON prodotti_categorie.id_categoria = categorie_prodotti.id '
342  .'WHERE categorie_prodotti.id = ? OR categorie_prodotti.id_genitore = ? ORDER BY taglie.id'
343  ,
344  array(
345  array( 's' => $ct['page']['metadati']['id_categoria_prodotti'] ),
346  array( 's' => $ct['page']['metadati']['id_categoria_prodotti'] )
347  )
348  );
349 
350  // print_r($ct['etc']['taglie']);
351  }
352 
353 
354 
355 
356  // debug
357  // print_r( $ct['page']['metadati'] );
358  // print_r( $_REQUEST );
359  //print_r($ct['page']['contents']['prodotti']);
360 
361 ?>
if(isset( $cx['contatti'])) if(isset( $cf['site']['contatti'])) $ct['contatti']
Definition: _035.common.php:24
mysqlQuery( $c, $q, $p=false, &$e=array())
$cf['ricerca']['template']
Definition: _030.common.php:7
if(isset( $_REQUEST['amazonCheckoutSessionId'])) $_SESSION['carrello']
variazionePrezzo( $c, $list, $idProd, $prezzoProd, $qtProd=1)
Definition: _mysql.tools.php:7
$_REQUEST['__view__'][ $ct['view']['id']]['__restrict__']['id_progetto']['EQ']