frankx: outputbuffering - wann braucht man das - oder ist das "böse"?

Beitrag lesen

Hellihello

Hier mal ein Beispiel für ein kleines Projekt. MVC ist dabei übertrieben und kommt auch eher aus der Desktop-Programm-Welt. So ein Webseiten-Request läuft doch mehr gradlinig durch, eher nach dem guten, alten EVA-Prinzip. Bei der Verarbeitung seien die beiden Arrays $errors und $data entstanden. Beide können leer oder gefüllt sein. Bei $errors ist der Fall klar. Wenn $errors leer ist und $data ebenfalls, ergab die Abfrage einfach nur eine leere Menge. Der folgende Teil wird vom Controller-Teil des Scripts inkludiert, nachdem die Daten ermittelt wurden. Da das Projekt überschaubar klein ist, sind die Variablen einfach global angelegt.

<html>

<head><title>Beispiel</title></head>
<body>
  <div>Navigation usw.</div>

<?php if ($errors): ?>

<div>Es sind Fehler aufgetreten:
    <ul class="errors">
      <?php foreach ($errors as $error): ?>
        <li><?php echo htmlspecialchars($error) ?></li>
      <?php endforeach; ?>
    </ul>
  </div>

<?php else: ?>

<?php if ($data): ?>

<table>
      <tr>
        <th>Überschrift</th>
        <th>Überschrift</th>
      </tr>
      <?php foreach ($data as $record): ?>
        <tr>
          <td><?php echo htmlspecialchars($record[0]) ?></td>
          <td><?php echo htmlspecialchars($record[1]) ?></td>
        </tr>
      <?php endforeach; ?>
    </table>

<?php else: ?>

<div>Die Anfrage brachte kein Ergebnis.</div>

<?php endif; ?>

<?php endif; ?>
</body>
</html>


>   
  
Macht es ggf. Sinn, die Einzelteile (wie zB. Menü, Fehlermeldungen, eine Sammlung von Contentinhalten) erst seperat zu erstellen? Also eine Funktion, die zB erstmal die Tabelle generiert:  
  
~~~php
  
<?php  
function Tabelize($data) {  
ob_start();  
?>  
 <table>  
<?php foreach ($data as $record): ?>  
         <tr>  
           <td><?php echo htmlspecialchars($record[0]) ?></td>  
           <td><?php echo htmlspecialchars($record[1]) ?></td>  
         </tr>  
<?php endforeach; ?>  
 </table>  
<?php  
 $html_table=ob_get_clean();  
 return $html_table; //oder auch HTML::content_add($html_table) bzw $html->content_add($html_table)  
}  
?>  

Damit dann die Einzelteile später im letzen Schritt nur noch ausgechot werden könnten. Das aber wiederum lässt sich ja wohl nur über outputbuffering lösen, oder?

Um es dann im letzten Schritt als Variable einbauen zu können:

  
...  
  
</head>  
<body>  
 <div class="menu">  
  <?php echo $menu;?>  
 </div>  
 <div class="content">  
  <?php echo $table1;?>  
  <?php echo $table2;?>  
 </div>  
</body>  
  

Oder ist das Käse?

Dank und Gruß,

frankx

--
tryin to multitain  - Globus = Planet != Welt