Pagina 1 di 1

non visualizzare i campi vuoti

Inviato: 16/10/2012, 10:27
da alex75
Ciao ragazzi ;-)
Vorrei che in una lista di risultati, non venissero visualizzati i campi vuoti; ma soltanto quelli compilati.
Cercando su google, credo di aver trovato la soluzione, ma non riesco ad applicarla.
Questa è la stringa che ho inserito nella riga 15:

Codice: Seleziona tutto

('show_empty_elements' => false));
Questo è il mio codice:

Codice: Seleziona tutto

<?php
if (!defined('IN_PHPBB'))
{
exit;
}
$sql = "SELECT ut.user_id, ut.username, ut.user_from, pt.user_id, pt.pf_nome, pt.pf_vettura, pt.pf_foto, pt.pf_fotoa, pt.pf_fotob, pt.pf_fotoc, pt.pf_fotod, pt.pf_fotoe, pt.pf_fotof, pt.pf_fotog, pt.pf_fotoh, pt.pf_fotoi, pt.pf_fotol, pt.pf_fotom, pt.pf_foton, pt.pf_fotoo, pt.pf_fotop
FROM " . USERS_TABLE . " ut, " . PROFILE_FIELDS_DATA_TABLE . " pt 
WHERE pf_foto like '[%' 
AND ut.user_id = pt.user_id 
ORDER BY pt.user_id";
        
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$template->assign_block_vars('lista_foto',array(('show_empty_elements' => false));
'USERNAME_COR'   => $row['username'],
'USER_COR'    => $row['user_id'],
'NOME'    => $row['pf_nome'],
'LOCALITA'    => $row['user_from'],
'VETTURA'    => $row['pf_vettura'],
'FOTO'         => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_foto'])),
'FOTO_A'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotoa'])),
'FOTO_B'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotob'])),
'FOTO_C'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotoc'])),
'FOTO_D'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotod'])),
'FOTO_E'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotoe'])),
'FOTO_F'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotof'])),
'FOTO_G'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotog'])),
'FOTO_H'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotoh'])),
'FOTO_I'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotoi'])),
'FOTO_L'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotol'])),
'FOTO_M'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotom'])),
'FOTO_N'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_foton'])),
'FOTO_O'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotoo'])),
'FOTO_P'       => preg_replace('/\[img\](.+)\[\/img\]/', '$1', strtolower($row['pf_fotop']))
));
}
?>
Ho provato in diversi modi... ma va sempre in errore.
Premetto che il campo

Codice: Seleziona tutto

WHERE pf_foto like '[%'
é stato compilato volutamente con questa sintassi a prescindere dalla mia richiesta; mi serve a dare un primo controllo ai risultati. In pratica in questo modo visualizzo solo i risultati degli utenti, che abbiano compilato quel campo.

Re: non visualizzare i campi vuoti

Inviato: 17/10/2012, 19:53
da alex75
Sto provando ad ottenere lo stesso risultato (non visualizzare i campi vuoti) in maniera forse più semplice.
Invece di intervenire lato php, sto tentando dal lato del template, anteponendo una "if" al codice, in questa maniera:

Codice: Seleziona tutto

<!-- [if "{lista_foto.FOTO_P}" !== "0"] --><a href="{lista_foto.FOTO_P}" class=highslide onclick="return hs.expand(this)" title="Vitara Gallery"><img src="{lista_foto.FOTO_P}" width=150 alt="" title="Foto 15 vitara gallery  Click per ingrandire / ridurre"></a><!-- [endif] -->
In pratica il valore di default è 0 quindi sto provando (in html) a far elaborare il codice <a href= etc etc, solo se il campo è compilato, quindi diverso da 0.
Ma anche così non ho avuto successo. Cosa sbaglio?

Re: non visualizzare i campi vuoti

Inviato: 19/10/2012, 18:00
da alex75
Niente... proprio non riesco. :frustrante: Ho provato, sia da php con if !empty ed isset; che da template con un centinaio di tipi di "if".
Ma che voi sappiate, si può fare in modo di avere una lista di array, senza avere righe vuote?

Re: non visualizzare i campi vuoti

Inviato: 21/10/2012, 15:12
da alex75
Comincio a vedere uno spiraglio di speranza :)
Sul file html dove richiamo il ciclio di array con un begin; ho aggiunto una condizione prima del codice href.
In questo modo però non visualizzo più il risultato, in ogni caso (sia che l'array sia vuota sia che sia piena)

Codice: Seleziona tutto

<!-- IF "{lista_foto.FOTO_P}" > 0 --><a href="{lista_foto.FOTO_P}" etc etc etc etc etc</a><!-- ENDIF -->
Mentre in questo modo, visualizzo sempre il risultato dell'array (sia che l'array sia vuota sia che sia piena)

Codice: Seleziona tutto

<!-- IF "{lista_foto.FOTO_P}" != '' --><a href="{lista_foto.FOTO_P}" etc etc etc etc etc</a><!-- ENDIF -->
Deduco che la condizione "IF" funzioni, ma semplicemente non stiamo parlando la stessa lingua!
Qualcuno sa come risolvere?

Risolto: non visualizzare i campi vuoti

Inviato: 27/10/2012, 18:04
da alex75
Risolto!
commettevo 2 errori.
Il primo era quello di usare le graffe nella condizione IF
Il secondo quello di cercare confronti ad un valore che se è presente è già esistente!
In pratica mi è bastato scrivere semplicemente questo prima del codice href:

Codice: Seleziona tutto

<!-- IF lista_foto.FOTO_P -->