Originariamente inviato da Grino
Ok tutto giusto, magnifico ma non mi spieghi perchè c'è una freccetta tratteggiata che va dal model fino al controller nello schema di Zend.
Relazione indiretta tramite observer. C'e' scritto. Di sicuro non chiama direttamente il controller, altrimenti avrebbe una linea continua
Originariamente inviato da Grino
Io la mia piccola soluzione per rispondere a chi ha fatto una domanda l'ho data. E' nel terzo post. Non è certo una soluzione da produzione ma è qui. La vostra dov'è? La critica l'accetto se porta soluzioni. Qual'è la vostra soluzione?
Giusto. Per rispondere alla domanda originale: il punto non e' separare codice PHP dal codice HTML, il punto e' separare la logica del programma dalla visualizzazione dell'output in modo che si possa modificare una cosa senza toccare l'altra.
Ci sono molti modi per farlo: il piu' semplice e' scrivere (anche in un unico file) prima tutto il codice che compie le elaborazioni e prepara le variabili coi risultati, e in coda il markup in cui e' presente codice PHP limitatamente all'echo delle variabili ed a strutture di controllo (e qualche saltuaria funzione sempre legata alla visualizzazione). Il passo successivo e' separare fisicamente i file e includere il file di visualizzazione in quello che elabora i dati. Poi si puo' passare ad organizzare il lavoro in classi (la OOP non e' assolutamente necessaria per la separazione dei compiti, e' una scelta) o direttamente considerare la possibilita' di utilizzare un framework, dipende anche dalla dimensione e dalla complessita' del progetto.
Comunque il punto fondamentale e' passare da questo approccio:
Codice PHP:
<?php
echo "<h3 class=\"evidenza\">Elenco dei nomi</h3>";
$result = // qualche query;
echo "<table>";
while ( $line = mysql_fetch_array($result) ) {
echo "<tr class=\"riga\"><td class=\"cella_nome\">".$line['nome']."</td></tr>";
}
echo "</table>";
echo "<hr>";
echo "<a href=\"altra_pagina.php\" class=\"elenco\">Clicca qui</a>";
?>
a questo:
Codice PHP:
<?php
$result = // qualche query
$data = array();
while ( $line = mysql_fetch_array($result) ) {
$data[] = $line['nome'];
}
?>
.........
<h3 class="evidenza">Elenco dei nomi</h3>
<table>
<?php foreach ( $data as $nome ): ?>
<tr class="riga">
<td class="cella_nome"><?php echo $nome; ?></td>
</tr>
<?php endforeach; ?>
</table>
<hr>
[url="altra_pagina.php"]Clicca qui[/url]
tutto il resto puo' venire con calma, ma finche' non ci si abitua a preparare i dati prima e mostrarli poi il codice sara' sempre un casino illeggibile e un inferno da mantenere.