Newsgroup: it.comp.www.php
Titolo: Come ripetete il codice HTML ? Sembra stupida come cosa..

E' comune a tutti il doversi un giorno, con php, trovarsi a dover ripetere
dei frammenti di codice HTML.
Un esempio classico è l'inserimento di dati in una tabella HTML.
Pur avendo un po' di esperienza mi trovo sempre nel dubbio sul 'come operare
?' perchè molte delle soluzioni a cui ho pensato non mi soddisfano.
Semplificando:
[NB Questo è un esempio semplice,ma pensate di avere a che fare con una
pagina HTML molto incasinata ed è MOLTO importante anche il DOVE scrivere il
codice php, tenete magari anche presente che un grafico che non siete voi
magari dovrà poterci mettere le mani con un software di web design]
Tabella esempio:
<table>
<tr><td><?=$var1;?></td><td><?=$var2;?></td>...</tr>
</table>
Problema: Ripetere la riga <tr>...</tr> X volte... le soluzioni potrebbero
essere:
Soluzione 1) Creare 3 files HTML (head,body,foot) con dentro le tre righe,
una per file, e scrivere una pagina Php con:
include("head");
for (ciclo){
    include("body")
    }
include("foot");
Soluzione 2) Mettere direttamente nella pagina HTML i tag
<table>
<?php for(ciclo){ ?>
<tr><td><?=$var1;?></td><td><?=$var2;?></td>...</tr>
<? } ?>
</table>
Soluzione 3) Creare una funzione di ripetizione da includere:
<table>
<?=ripeti("<tr><td>$var1</td><td>$var2</td>...</tr>");?>
</table>
[Ovviamente la funzione 'ripeti($stringa)' dovrà esistere nel contesto, e il
codice HTML dovrà essere backslashato se contiene virgolette o caratteri
strani]
Per quanto mi riguarda tutte le soluzioni (a parte fattori 'di stile') sono
valide ma:
Soluzione 1) Il grafico non ha modo di modificare la pagina perchè la
tabella è spaccata in 3 pezzi e ricomposta in una pagina php
Soluzione 2) Bisogna elaborare il ciclo ed eventuali incrementi/cambi di
status di un flag dentro il codice Html,
Soluzione 3) Come già introdotto, essendo il <tr>..</tr> dentro il codice
html un editor html non fa vedere un bel tubo e il grafico non può
modificare le celle/righe ed inoltre il contenuto deve essere backslashato
(se magari una cella contiene una immagine, il tag src deve esserlo e
l'immagine non è visualizzata dall'editor)
Voi come operate in questi casi ? Avete idee diverse ? Esperienze diverse ?
Conoscenze più strutturate ?
Grazie
J

 PHP <  un editor html non fa vedere un bel tubo e il grafico non può


 </table>
[cut]
Io sono per la soluzione 2, che uso per fare pagine che visualizzano il 
risultato di una query sql. Anche se è un po' uno "sbattimento" (ma le 
altre non mi sembrano da meno) questa soluzione permette anche al grafico 
di toccare la pagina in maniera piu' facile per lui (DreamWeaver MX 
visualizza la tabella senza problemi).
Usando magari un po' di CSS si facilita ulteriormente il lavoro al grafico.
La soluzione 1 (quella degli include) IMHO mi sembra un po' macchinosa, 
mentre scarterei la 3 ("funzione di ripetizione") per i difetti che hai già  
specificato.
Spero di averti aiutato almeno un po', ciao...
-- 
turaz
mailto: turaz at turaz dot net

Anche io sono per la seconda soluzione.
Nei vari siti e software che ho fatto in php ho sempre utilizzato questa
soluzione.
Ciao
--
Webmaster - Bob4Ever.com
http://www.bob4ever.com
webm...@bob4ever.com
"TuRaZ" <tu...@NOSPAMturaz.net> ha scritto nel messaggio
news:Xns9302639E68BACt...@213.140.2.16...


Io avrei scritto così:
<?php
$l= "numero da limite contatore";
$c = 0; //contatore
print "<table>";
while($c <= $l)
{
print "<tr><td>Testo</td><td>Oppure variabili</td></tr>";
$c++;
}
print "</table>";
?>
se ho capito bene il problema questa è una possibile soluzione.
Ciao ciao
Ivan
"J" <j...@thecloud.or> ha scritto nel messaggio
news:avt4r8$hi8$1...@serv1.iunet.it...


 magari dovrà poterci mettere le mani con un software di web design]
Solitamente non mi pongo il problema in quanto grafico e coder sono cmq io.
In ogni caso dipende dal contesto il tipo di approccio che uso. Spesso, se
devo ripetere sezioni di codice HTML, mi comporto esattamente come in
programmazione canonica. Ovvero metto quella porzione di codice in una
funzione, e richiamo la funzione quando mi serve:
<? function foo(){?> <span>HTML</span> <?}?>
Se e' ad esempio una tabella con una lista presa da un DB che devo stampare
piu' volte, magari al cambiare di una variabile, o soprattutto se devo
generare un albero tramite la ricorsione, utilizzo questo tipo di metodo.
Questo spesso nello sviluppo di webapp.
Se invece devo sviluppare un sito "a strati indipendenti", quindi dove
contenuto, paginazione, codice e grafica devono essere entita' separate, in
modo da poter essere modificate da persone diverse con skills differenti,
faccio uso di XML/XSLT lato server (tramite un linguaggio server side di
supporto), XHTML/CSS2 lato client.
--------------------------------
Inviato via 
http://usenet.libero.it

 soddisfano.
prendi spunto dal progetto PHP-PET su sourceforge.
http://php-pet.sourceforge.net/english_index.html
non è il massimo ma rende l'idea di come separare contenuti e forma.
(simile al modello di template che consiglia Jurgen, quindi dovrebbe bastare 
a convincervi tutti! :-) )
ciao
-- 
Punkarruso
mail:punkarruso chiocchiolona despammed punto com
pubblicità progresso:
http://groups.google.com

 non è il massimo ma rende l'idea di come separare contenuti e forma.
Continuo a preferire XML/XSLT/CSS :)


Ovvero il designer non vede proprio nulla....
Direi che hai integrato il codice html in una pagina php e non viceversa
come si vorrebbe nel problema
Grazie lo stesso
J

Interessante la soluzione XML lato server.
Avresti qualche link di semplice comprensione a cui posso dare un'occhio ?

La soluzione a mo' di '
fasttemplate.pl
', comunque già esistente come
'fasttemplate.php' non è esattamente quello che si richiede
Infatti una cosa è sostituire le cose all'interno di una pagina html, una
cosa è ripetere parte di una pagina :-)
Con fasttemplate (o simili) toccherebbe andare a creare una stringa di 10k
con tutte le righe, poi passarla al motore per la sostituzione.
J

 Avresti qualche link di semplice comprensione a cui posso dare un'occhio ?
Direi che con il "boom" che c'e' ultimamente sull'XML, XSLT, CSS2 e XHTML
(come se fossero una novita'..) una ricerca su Google ti possa dare piu'
link soddisfacenti di quanto possa fare io a memoria.. :)
Cmq se vuoi affrontare l'argomento (link a parte.. ehm), ben volentieri :)


 </table>
Semplificato (ma la strada usata e' grosso modo questa):
Faccio creare del codice html dai designer con commenti strategici 
(loro vedono la tabella come verra' con una riga sola): 
<table>
<!-- table row start -->
  <tr>
    <td class="boo"> $var1 </td>
    <td class="foo"> $var2 </td>
  </tr>
<!-- table row end -->
  <tr>
    <td class="boo"> Testo come verra'</td>
    <td class="foo"> Valori vari </td>
  </tr>
<!-- table row ignore -->
</table>
carico l'html in memoria.
Una preg prende la parte centrale: 
  "/<!-- table row start --> (.*) <!-- table row end -->/siU"
la parte centrale contiene le righe da ripetere e vengono 
salvati in una variabile. Il contenuto della variabile viene sostituito
con i commenti (fino ignore) e la sua parte centrale.
Ovviamente qualche make-up se devi gestire varie tabelle, altri blocchi, 
oppure tabelle in tabelle.
Altra soluzione: usare XML...
-- 
I'm not a signature.