Newsgroup: it.comp.www.php
Titolo: Titolo dinamico: problema

Ciao a tutti.
Vorrei impostare il titolo della mia pagina (<title>) con php.
Il problema è che i nomi che vorrei mettere non provengono direttamente 
da variabili in post o in get, ma tali variabili vengono inserite 
tipicamente in una query SQL e i nomi che vorrei sono il prodotto di 
quella query.
Perciò, siccome il title va nell'head e le query le eseguo tutte nel 
corpo, mi viene complicato impostare un titolo che ancora non è stato 
"calcolato".
Dovrei pertanto eseguire le query due volte oppure eseguirle tutte 
nell'header e toglierle dalle rispettiva pagine, opportunamente inserite 
in if in base alle variabili get (per non fare query inutili)
Ci sono altri metodi? Con JS posso risolvere qualcosa?
Grazie

 "calcolato".
La soluzione "definitiva" a questo e a moltissimi altri problemi simili 
č usare un template engine, oppure fare l'echo della pagina alla fine di 
tutte le elaborazioni.
Non e' difficile adattare script gia' scritti a questo ultimo approccio, 
sostituisci tutti gli echo con $page .= e come ultima istruzione stampi 
$page.
Quindi quando stai creando la testata fai
$page .= '<title>'.$titolo.'</title>';
e n righe piu' sotto puoi calcolare il titolo
if ($_POST)
   $titolo = 'xxx';
else
   $titolo = 'yyy';
Ti consiglio comunque di fare un passetto in piu' e usare un template 
engine, una cosa semplice tipo XTemplate, non pseudo-linguaggi come 
smarty :-) ... IMHO !!!
ciao
Mauro


COSA !?!? Ehmm.. sorvoliamo..
Non capisco dove sta la difficoltà di questo problema; sposta il
codice delle query a quando ti serve, no ?
Gg

 Ci sono altri metodi? Con JS posso risolvere qualcosa?
Benche' qualcuno e' inorridito, io faccio generare tutto da PHP, a partire da
eventuali heder HTTP (quelli che vengono prima ancora del HTML).
Di solito uso una funziona tipo   intestazione($titolo)  richiamata da ogni
pagina che si prende cura di scrivere tutto cio' che e' header. Se necessario,
la funzione verifica anche che l'utente attuale abbia i permessi per
visualizzare quella pagina.
In qesto modo posso manipolare le varie intestazioni in un punto solo del codice.
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Save gas, don't use the shell.

 Ci sono altri metodi? Con JS posso risolvere qualcosa?
Anche se è un po' OT:
document.title = "Titolo";
Enrico

 "calcolato".
Non devi mai fare niente nel corpo.
Fai tutto PRIMA del doctype, e sotto metti solo cicli e echo/print che 
stampano i risultati.
<?php
 $db = connect(blabla);
 $righe = query(blablabla);
 $altrerighe = query(blablabla);
?>
<doctype ...>
<html>
<head>
 ...
</head>
<body>
 ...
 <ul>
  <?php foreach($righe as $riga): ?>
   <li><?php print $riga["nome"]; ?></li>
  <?php endforeach; ?>
 </ul>
 ...
</body>
</html>
In questo modo hai tutta la logica dell'applicazione in un punto 
(l'inizio del file) e la presentazione in un altro (sotto).
E` il primo passo verso l'MVC.
Bye.

 
Hai perfettamente ragione, il prossimo lo faccio così, giuro... per 
questo ormai è troppo tardi.
Comunque (e qui apro un'altra discussione piuttosto ampia), in questo 
momento io faccio che l'index "include" altre pagine php, ovvero 
header.php, poi chiama il logo, per esempio, poi chiama il contenuto 
centrale in base alle richieste POST o GET che riceve, poi il footer ecc.
E' un metodo sbagliato? Usandolo mi sembra molto semplice e 
manutenibile, ma non so se sia proprio la cosa migliore!
Grazie

 manutenibile, ma non so se sia proprio la cosa migliore!
Il metodo giusto e' quello che funziona, soddisfa il committente e fa incazzare
 chi tenta di hackerare il sito :)
Poi per fare le cose "by the book" c'e' sempre tempo...
Ciao,
luigi
-- 
/
+--[Luigi Rosa]--
\
Kil: I'm Mr. Kil.
James Bond: Now there's a name to die for.
    --"007 Die Another Day"

 ecc.
E` corretto. Ma cerca di applicare anche ai file inclusi la stessa logica 
(all'inizio il codice, sotto l'HTML), e stai attento ai nomi delle 
variabili. Eventualmente "namespace-ali" :)
$header_news, $footer_message, $body_news, ecc.
In questo modo puoi riciclare i vari include senza rischi.
E` quello che si fa anche in MVC quando crei dei componenti. Lo puoi 
fare, per esempio, per il box delle novita` o per quello delle news, che 
vanno inclusi in diverse pagine ma non in tutte. Ogni "box" ha la sua 
logica per andarsi a prendere la roba nel DB o su disco o in sessione.
Quando passerai all'MVC completo, ognuno di questi componenti avra` 3 
file, appunto il model (che contiene le funzioni che fanno le query sul 
DB, per esempio), il controller (che contiene la parte in PHP che mettevi 
in testa, sostituendo le query con chiamate alle funzioni del model) e la 
view (che contiene solo l'HTML che ora metti in basso).
Il tutto non per complicarsi la vita, ma semplicemente perche` se un 
domani farai un altro sito con le news potrai copiare il model e diversi 
controller sul nuovo sito, e riscrivere solo le view (l'HTML e i css).
E soprattutto perche` se la query ti torna un risultato non voluto sai 
che devi guardare il model, non 2000 righe di PHP per capire dove sia la 
query che da` problemi. :)
Finche` gestisci un sito o due puoi anche ricordarti a memoria il codice 
di tutti. Quando ne hai un centinaio e` umanamente impossibile.
Bye.

> Torakiki