Guten morgen.., [Intro:] Ich hab langsam irgendwie die schnautze voll, per PHP ein HTML (oder etc...) ausgeben zu lassen! Manchmal vergess ich z.B. paar "Html-closing-Tags", weil der PHP-Code mit den vielen "HTML-String-Fetzen" dazwischen recht unübersichtlich wird... [Eigentlich brauche ich immer wieder die selben Ausgaben, insbesondere Menüs, und Tabellen.] Desshalb hab ich mich entlich dazu entschlossen, ein paar Klassen zu schreiben, die mir diese Ausgaben machen (und damit wieder etwas Ordnung in den Code kommt). Die Klassen kann man fast sehen wie "Komponenten" in einer Applikation, z.B eine List-Komponente, oder eine Menü-Komponente, (oder etc..)! Um diese Komponenten mit Daten zu befüllen, hab ich mir eine art Data-Provider überlegt! Siehe erster Anhang: BeispielClass.PNG Derzeit bau ich mir eine Komponente für Tabellen, ... Optisch vergleichbar wie die "relativ" großen Tabellen aus PHPmyAdmin.. [Schöne Geschichte...] Nun zum Problem: Wenn mein DataProvider lücken enthält, dann wird der "rest" einfach ignoriert! Siehe zweiter Anhang: GehtNetClass.PNG... Ich gehe den DataProvider mit forEach durch, bzw hol ich mir vorher den count($DataProvider). Wenn jetzt ein paar Einträge im DataProvider zwischendrinn fehlen, kann ich sachen wie Count oder ForEach nicht mehr benutzen, weil der Count zu niedrig ist, und die Schleife einfach aufhört... Das rot eingezeichnete fehlt !! Mein bisheriger Code ist unbrauchbar, es macht warscheinlich wenig Sinn das hier zu Posten. Ich habe versucht den "höchsten" Wert des Dataproviders zu bekommen, mit max(); Allerdings komm ich total mit meinen verschachtelten Schleifen durcheinader, und hab irgendwie gerade eine Denk-Blockade o.ä. Ich komm da einfach nimma weiter ;-D Ich brauch die maximale Größe der entgültigen Tabelle laut Dataprovider, und muss HINTERHER die Schleifen durchlaufen lassen, um die Tabelle aufzubauen!?!?!?... Habt ihr da evtl eine Lösung für mich? Kann auch in Form eines Templates sein, oder ähnliches... Ich hoffe das war einigermaßen verständlich, und jemand kann helfen ^^ Gruß
Tim S. schrieb: > Meine bisheriger Code ist unbrauchbar, es macht warscheinlich > wenig Sinn das hier zu Posten Was spricht dann dagegen gleich eine TemplatEngine wie z.B. Smarty zu verwenden? Dann hat man gleich eine passende Trennung zwischen Code und Daten (wenn man es den richtig macht). Tim S. schrieb: > Allerdings komm ich total mit > meinen verschachtelten Schleifen durcheinader Dann solltest du dein Programm besser strukturieren... Tim S. schrieb: > kann ich sachen wie Count oder ForEach nicht mehr > benutzen, weil der Count zu niedrig ist, und die Schleife einfach Doch, du musst dann nur damit klarkommen das schlüssel fehlen und vermutlich die
1 | foreach($x as $key=> $value) |
Variante nehmen. Die Funktion array-keys http://php.net/manual/en/function.array-keys.php könnte in diesem Zusammenhang auch nützlich sein. Tim S. schrieb: > Habt ihr da evtl eine Lösung für mich? Siehe oben... da was selber zu stricker erfordert etwas Erfahrung, und wenn du so schon "durcheinader" kommst...
Läubi .. schrieb: > Was spricht dann dagegen gleich eine TemplatEngine wie z.B. Smarty zu > verwenden? Smarty kannte ich noch nicht ^^. Ich wollte es auch mal ohne Templates oder andere fertige Scripts versuchen. (Soll sowas CMS-Mäßiges werden) Läubi .. schrieb: > du musst dann nur damit klarkommen das schlüssel fehlen und > vermutlich die foreach($x as $key=> $value) Variante nehmen. Die Funktion > array-keys http://php.net/manual/en/function.array-keys.php > könnte in diesem Zusammenhang auch nützlich sein. OK, das werde ich mir mal anschauen, verinnerlichen, und anschließend ausprobieren! xD Dankeschön ^^
Läubi .. schrieb: > Was spricht dann dagegen gleich eine TemplatEngine wie z.B. Smarty zu > verwenden? Dass Smarty im Grunde eine Neuimplementierung von PHP mit anderer Syntax ist...
So könnte es gehen:
1 | $items = array(); |
2 | echo '<table><tr>'; |
3 | |
4 | // lokale Übernahme aller validen Spalten |
5 | // und Ausgabe des Headers |
6 | foreach($DataProvider['table'] as $n => $text) { |
7 | if (isset($DataProvider['Item'][$n])) |
8 | $items[$n] = $DataProvider['Item'][$n]; |
9 | |
10 | echo '<th>' . $text . '</th>'; |
11 | } |
12 | echo '</tr>'; |
13 | |
14 | $i = 0; |
15 | while (!empty($items)) { |
16 | echo '<tr>'; |
17 | foreach($DataProvider['table'] as $n => $dummy) { |
18 | if (isset($items[$n]) && isset($items[$n][$i])) { |
19 | echo '<td>' . $items[$n][$i] . '</td>'; |
20 | unset($items[$n][$i]); |
21 | if (empty($items[$n]))unset($items[$n]); |
22 | } else echo '<td></td>'; |
23 | } |
24 | |
25 | $i++; |
26 | echo '</tr>'; |
27 | } |
28 | echo '</table>'; |
Ich denke dass Problem ist "<td></td>" -ohne Inhalt werden die Rahmen nicht dargestellt, deswegen z.B. mit   ein Leerzeichen erzwingen... Also "<td> </td>" ausgeben damit ein leeres Kästchen dargestellt wird.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.