Einzelnen Beitrag anzeigen
  #4  
Alt 07.04.2012, 15:04:08
Benutzerbild von urvater
urvater urvater ist offline
Senior Member
 
Registriert seit: Feb 2006
Ort: Wallrabenstein
Alter: 55
Beiträge: 1.044
AW: dynamische Tabelle oder dynamische DIV's

Da ich oben leider nicht mehr editieren kann möchte ich das obige hier noch einmal erweitern.
PHP-Code:
class My_Class{
    
/*****
     *Die Methode erstellt aus einem eindimensionalen Array eine dynamische Tabelle aus einzelnen DIV's
     *@param array $daten Die Daten, welche ausgegeben werden solle
     *@param int $spalten Die Anzahl der Spalten welche die Tabelle später haben soll
     *@param string|false $cssClass Die CSS Klasse, welche dem DIV zugeordnet werden soll
     *@return string $ausgabe Ein formatierter String mit allen HTML Tags incl. dem Inhalt für die Ausgabe
     */
    
public function divTabelle(array $daten,$spalten,$cssClass=false){
        
$ausgabe '';
        if(!
is_int($spalten)) {return 'Die Anzahl der gewünschten Spalten wurde  nicht als Integer übergeben!';}
        if(
$cssClass){$cssClass ' class="'.$cssClass.'"';}
        
$anzahlDaten count($daten);
        
$maxZeilen $anzahlDaten/$spalten;
        if(
is_float($maxZeilen)){
            
$check round($maxZeilen);
            
/*Wenn abgerundet wurde muss die Zeilenanzahl um 1 erhöht werden*/
            
if($check<$maxZeilen){$maxZeilen $check+1;} else {$maxZeilen $check;}
        }
        
/*interner Zähler. Wird für eine neue Zeile benötigt*/
        
$numFeld 1;
        for(
$i=0;$i<$anzahlDaten;$i++) {
            
$ausgabe .= '<div'.$cssClass.'>'$daten[$i].'</div>'."\n";
            
/*Ausgabe einer neuen Zeile, wenn die maximale Spaltenmenge erreicht ist
            und noch nicht alle Elemente ausgegeben wurden*/
            
if(($numFeld === $spalten) and (($i+1)/$numFeld $maxZeilen)){
                
$ausgabe .= '<div style="clear:both;"></div>'."\n";
                
$numFeld 0;
            }
            
$numFeld++;
        }
        
/*Menge der zusätzlich benötigten DIV's um eine komplette Zeile erzeugen zu können*/
        
$minFelder $spalten*$maxZeilen-$anzahlDaten;
        if(
$minFelder >0) {
            for(
$zus=0;$zus<$minFelder;$zus++) {
                
$ausgabe .= '<div '.$cssClass.'></div>'."\n";
            }
        }
        
/*zusätzlicher DIV um den letzten float aufzuheben*/
        
$ausgabe .= '<div style="clear:both;">';
        return 
$ausgabe;
    }

In diesem Fall ist es eine Methode innerhalb einer Klasse. Die Methode funktioniert auch, wenn man sie ausserhalb einer Klasse setzt und funktional aufruft.
Änderung zum oberen Beispiel:
1. es wird eine vollständige Tabelle ausgegeben, was wichtig ist, wenn man mit Rahmen arbeiten möchte bzw. muss.
2. alles etwas kompakter und individuel nutzbarer
Beispiel CSS
HTML-Code:
<style type="text/css">
.kat_tab{
	width:220px;
	height:45px; /*Oder auf padding umstellen*/
	float:left;
}
</style>
Beispiel in PHP
PHP-Code:
$view = new My_Class();
$tabelle $view->divTabelle($testdata,4,'kat_tab');
echo 
$tabelle
Im CSS muss width und float:left; bzw. float:right; immer angegeben werden.
Will man optisch eine "echte" Tabelle erzeugen ist zusätzlich die CSS Angabe height zwingend erforderlich. Ansonsten reicht es die Zeilenhöhe mittels padding bzw. margin den gewünschten Anforderungen einzustellen.
Wer zwingend die Anzahl der Spalten auch bei minimierter Ansicht beibehalten muss, sollte die Ausgabe innerhalb eines Blockelementes (z.B. div) setzen und diesem eine Mindestbreite per CSS verpassen. Die Tabelle klappt ansonsten zusammen, was nur schlimm ist, wenn die Zeilen optisch zusammen bleiben müssen.
Mit Zitat antworten