Pagina 1 di 2

Condizione nel template

Inviato: 18/11/2011, 11:57
da Lady R
Avrei bisogno di inserire un IF dentro ad overall_footer.html in modo che, leggendo da un file di configurazione contenente una direttiva (jqr_hidePost = 1) scriva alcune righe di codice nel template.

Come faccio a fare ciò?
Grazie.

Re: Condizione nel template

Inviato: 18/11/2011, 13:19
da Micogian
Secondo me dovresti leggere il file di configurazione nel php, poi creare una variabile che riporti quello che vuoi venga inserito nel template, in questo modo:

Codice: Seleziona tutto

$template->assign_var(
'NOME_VARIABILE'     =>  "quello che va nel template",
);
.
Poi, nel file overall_footer.html ci metti la variabile {NOME_VARIABILE} che è costituita dal codice che ti interessa inserire.
Tutte le variabili phpbb devono essere in Maiuscolo.

Per lo meno penso sia questa la strada.

L'alternativa è creare una variabile con valore "true/false" in base alla condizione ricavata sempre dal PHP.
Nel template poi puoi usare

Codice: Seleziona tutto

<!-- IF NOME_VARIABILE -->eventuale codice da inserire se NOME_VARIABILE è "true"<!-- ENDIF -->

Re: Condizione nel template

Inviato: 18/11/2011, 13:25
da Lady R
Scusa non ho capito molto..
Potresti essere un po più chiaro?

Grazie.

Re: Condizione nel template

Inviato: 18/11/2011, 13:38
da Micogian
Phpbb funziona così: il file php interroga il database, estrae dei dati attraverso query o functions, crea le variabili o un array con i valori estratti e li passa al template associato, un file html, che ha il compito di visualizzare questi dati.
Pertanto, se devi fare una interrogazione, la fai nel php, in index.php o in un file functions (functions.php ad esempio è presente sempre nelle pagine pbpbb).
Questo ti consente di avere una o più variabili che il template interpreta e visualizza.
Ripeto che le variabili devono essere sempre in maiuscolo.

Per spiegarmi meglio, il file index.php è associato a index_body.html. All'interno di index_body.html ci sono degli <INCLIDE> che aggiungono overall_header.html e overall_footer.html, oltre a forumlist_body.html che visualizza la Lista dei Forum.
Se dai un'occhiata alla Guida "Come Creare una Custom Page" potrebbe essere utile per capire come funziona phpbb.

EDIT
ovviamente sono stato sulle generali perchè non so cosa intendi per "condizione if"
La condizione IF la fai nel PHP, si crea una variabile e le funzionr che creano le variabili sono

Codice: Seleziona tutto

$template->assign_var('NOME_VAR', valore);
oppure
$template->assign_vars(array(
'NOME_VAR1'   =>  $valore1,
'NOME_VAR2'   =>  $valore2,
));
oppure un array:
$template->assign_block_vars('nome_array',array(
'NOME_VAR1'   =>  $valore1,
'NOME_VAR2'   =>  $valore2,
));
Nell'ultimo caso le variabili nel template vanno scritte complete del nome dell'array, ad esempio {nome_array.NOME_VAR1}

Re: Condizione nel template

Inviato: 18/11/2011, 13:44
da Lady R
Si credo di aver capito, ma quindi un <!-- IF JQR_HIDEPOST -->
verrebbe tradotto in:

Codice: Seleziona tutto

include ("mio/configuration.php");
if(jqr_hidepost == 1) {
E: <!-- ENDIF --> in:

Codice: Seleziona tutto

}
Giusto?

Re: Condizione nel template

Inviato: 18/11/2011, 13:56
da Micogian
Lady R ha scritto:Si credo di aver capito, ma quindi un <!-- IF JQR_HIDEPOST -->
verrebbe tradotto in:

Codice: Seleziona tutto

include ("mio/configuration.php");
if(jqr_hidepost == 1) {
E: <!-- ENDIF --> in:

Codice: Seleziona tutto

}
Giusto?
La condizione <!-- IF JQR_HIDEPOST --> indica la condizione di JQR_HIDEPOST che può essere "true" o "false", questo dipende dalla condizione originale in php.
Pertanto, se la condizione è "true" elabora quello che viene dopo e che termina con <!-- INDIF -->,
altrimenti non elabora nulla, a meno che non usi un <!-- ELSE -->

Re: Condizione nel template

Inviato: 18/11/2011, 14:06
da Lady R
cioè devo definire nel php una variabile

Codice: Seleziona tutto

include ("mio/configuration.php");
JQR_HIDEPOST = jqr_hidepost;
E in configuration inserisco jqr_hidepost = "false" o "true",

giusto?

Re: Condizione nel template

Inviato: 18/11/2011, 16:29
da Micogian
No, probabilmente non mi sono spiegato.
Io non so qual'è la condizione iniziale, ho fatto l'ipotesi che sia "true" o "false" ma potrebbe essere qualsiasi cosa, anche una stringa, un numero, un pezzo di codice, ecc.
Per creare una variabile che sia poi interpretata dal template bisogna usare la funzione $template->assign_var()
Questa JQR_HIDEPOST = jqr_hidepost; non sarebbe interpretata dal template.
Detto questo il problema sta nella condizione e nel valore che verrà assegnato alla variabile 'JQR_HIDEPOST'
Ammesso che il valore sia "true" o "false" il template si comporterà di conseguenza, sulla base della condizione

Codice: Seleziona tutto

<!-- IF JQR_HIDEPOST -->esegui il codice 1<!-- ELSE -->esegui il codice 2<!-- ENDIF -->
Cioè: se {JQR_HIDEPOST} è true esegui il codice 1 altrimenti esegui il codice 2 perchè IF JQR_HIDEPOST è sinonimo di (IF JQR_HIDEPOST == true)

In pratica, se l'include configuration fornisce la variabile $jqr_hidepost che può essere true o false perchè venga utilizzato dal template devi fare:

Codice: Seleziona tutto

$template->assign_var('JQR_HIDEPOST', $jqr_hidepost);
A questo punto {JQR_HIDEPOST} sarà il valore che intepreterà il template, cioè il valore di $jqr_hidepost

Re: Condizione nel template

Inviato: 18/11/2011, 23:19
da Lady R
Perché JQR_HIDEPOST = jqr_hidepost; non va bene?
Assegno a JQR_HIDEPOST un valor (true o false) e dopodiché faccio l'IF usando <!-- IF JQR_HIDEPOST -->

Lui guarda cosa c'è dentro a JQR_HIDEPOST e si comporta di conseguenza, sbaglio?

Re: Condizione nel template

Inviato: 18/11/2011, 23:30
da Micogian
Prova.
Per me le variabili phpbb vanno create con$template->assign_var() oppure $template->assign_vars(array()
http://wiki.phpbb.com/Using_the_phpBB3. ... -variables
oppure (anche se è phpbb2, ma è la stessa cosa)
http://www.phpbb.com/kb/article/phpbb2- ... -tutorial/

Apri un qualsiasi file php o un file functions e cerca la funzione $template......