zurück zur Startseite
  


Zurück XHTMLforum > Webentwicklung (außer XHTML und CSS) > Serveradministration und serverseitige Scripte
Seite neu laden Richtige Einrückung bei dynamischem Inhalt (include) realisieren

Antwort
 
LinkBack Themen-Optionen Ansicht
  #1 (permalink)  
Alt 03.12.2008, 04:59
Benutzerbild von domsson
Rookie @ HTML/CSS/PHP/SQL
neuer user
Thread-Ersteller
 
Registriert seit: 11.02.2008
Ort: Berlin
Beiträge: 88
domsson wird schon bald berühmt werden
Standard Richtige Einrückung bei dynamischem Inhalt (include) realisieren

Ich bin ein Fan von Ordnung, darum werden auch alle meine HTML/CSS/PHP-Dateien konsequent eingerueckt, wenn auch nach meinem eigenen Gutduenken. Das ist auch alles wunderbar, nur wenn es dann um dynamischen, also per PHP include eingebundenen Inhalt geht, pisst mir das ein bisschen in die Suppe, da das resultierende Dokument dann nicht mehr so eingerueckt ist, wie ich es vorgesehen hatte.

Ich ruecke mit zwei Leerzeichen ein, wenn nun in meiner index.php zum Beispiel der eigentliche Inhalt der Seite per include eingebunden wird, sieht der entsprechende Abschnitt also etwa so aus:
Code:
<body>
  [...]
  <div id="content">
    <?php include $contentfile; ?>
  </div>
  [...]
</body>
Die eingebundene Datei hat dann (bisher) z.B. einen solchen Inhalt:
Code:
<h3>Inhaltsseite Nr. 3</h3>
<?php
  [...]
  echo "<ul>\n";
  echo "\t<li>Punkt 1</li>\n";
  echo "\t<li>Punkt 2</li>\n";
  echo "</ul>\n";
  [...]
?>
Das Ergebnis (nach dem Parsen) ist dementsprechend leicht demoliert, etwa so:
Code:
<body>
  [...]
  <div id="content">
    <h3>Inhaltsseite Nr. 3</h3>
<ul>
    <li>Punkt 1</li>
    <li>Punkt 2</li>
</ul>
  </div>
  [...]
</body>
Gut, die erste Zeile der eingebundenen Datei liesse sich mit den nachfolgenden gleichsetzen, das ist nicht so schlimm. Aber auch dann wird die Situation die sein, dass der eingebundene Inhalt zwar in sich korrekt, im Kontext der ganzen Datei aber wahrscheinlich falsch eingerueckt sein wird.

Anfangs habe ich die anzahl der "\t" in den include-Dateien deshalb einfach an das Markup der index.php angepasst, doch spaetestens als ich das Markup der index.php das erste mal so veraendern musste, dass sich auch die Einrueckposition des include-Befehls geaendert hat, wusste ich: das ist keine Loesung - ich hatte hunderte Zeilen zu editieren.

Man koennte nun sagen: was soll's, Einrueckung ist eh nur eine Hilfe fuer den Coder, was am Ende dabei rauskommt kann ruhig auch in einer einzigen Zeile stehen. - Das gefaellt mir aber ganz und garnicht, denn wie oben beschrieben, bin ich ein Fan von Ordnung. Abgesehen davon ist es bei mir ein Teil der Webentwicklung, den resultierenden Quelltext im Browser aufzurufen und anhand dessen nach Fehlern zu suchen - bei falscher Einrueckung wird das echt ungemuetlich.

Die Loesung, die ich nach kurzer Ueberlegung nun probiert habe, ist folgende:
Ich habe zwei Konstanten definiert, "CONTENT_INDENT" und "TAB_SIZE", Erste gibt an, wieviele Leerzeichen der include-Befehl eingerueckt ist, Zweite gibt an, wieviele Leerzeichen ein 'Tab' bilden. Das ganze in eine Funktion geschmissen:
Code:
function getIndent($n) {
  $indent = "";
  $i = CONTENT_INDENT+(TAB_SIZE*$n);
  while ($i > 0) {
    $indent .= " ";
    $i--;
  }
  return $indent;
}
Damit wuerde die content-Datei von oben so aussehen:
Code:
<h3>Inhaltsseite Nr. 3</h3>
<?php
  [...]
  echo getIndent(0)."<ul>\n";
  echo getIndent(1)."<li>Punkt 1</li>\n";
  echo getIndent(1)."<li>Punkt 2</li>\n";
  echo getIndent(0)."</ul>\n";
  [...]
?>
Das Ergebnis ist nun das gewuenschte ...
Code:
<body>
  [...]
  <div id="content">
    <h3>Inhaltsseite Nr. 3</h3>
    <ul>
      <li>Punkt 1</li>
      <li>Punkt 2</li>
    </ul>
  </div>
  [...]
</body>
... die Zeilen werden jeweils um $n Tabgroessen eingerueckt. Aendert sich das Markup in der index.php grundlegend, so muss ich nur die CONTENT_INDENT anpassen und alles ist wieder ordentlich. ;} Auch das Einbinden der content-Dateien in andere Projekte, welche andere Tabgroessen benutzen, ist durch Anpassen der TAB_SIZE sofort erledigt.

Doch trotzdem: auch das scheint mir voellig uebertriebener Aufwand. Ich habe das Gefuehl, es muss dafuer einen _viel_ einfacheren Loesungsweg geben, aber ich sehe ihn nicht.

Wie handhabt ihr das? Habt ihr eine Loesung? Ich bin fuer alles offen. ;}
__________________
Wenn Du mich fragst, was mir beim Erlenen von Webentwicklung am meisten Probleme bereitet, dann antworte ich: IE.
Mit Zitat antworten
Sponsored Links
  #2 (permalink)  
Alt 03.12.2008, 09:51
Benutzerbild von inta
free as in freedom
XHTMLforum-Kenner
 
Registriert seit: 04.12.2006
Ort: Berlin
Beiträge: 5.016
inta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz seininta kann auf vieles stolz sein
Standard

Zitat:
Zitat von domsson Beitrag anzeigen
Doch trotzdem: auch das scheint mir voellig uebertriebener Aufwand. Ich habe das Gefuehl, es muss dafuer einen _viel_ einfacheren Loesungsweg geben, aber ich sehe ihn nicht.
Ja, das ist meiner Meinung nach ein zu großer Aufwand. Außerdem förderst du damit nicht die Übersicht, sonder zerstörst sie mit unnützen „\t“ oder gar Funktionen wie „getIndent(0)“. Es gibt keinen einfachen Weg, zumindest keinen der nicht unnötig Resourcen frisst.

Zitat:
Zitat von domsson Beitrag anzeigen
Wie handhabt ihr das? Habt ihr eine Loesung? Ich bin fuer alles offen. ;}
Ich rücke in meinen einzelnen Dateien sauber ein, die Einrückung stimmt dann natürlich im Endergebnis nicht mehr. Ich finde das auch nicht so wichtig, da z.B. Firebug eh einen sauberen Baum darstellt.

Eine Lösung gibt es trotzdem, zumindest wenn dein Aufbau es erlaubt. Du könntest die fertige Ausgabe noch einmal durch einen Parser jagen, der dir die Einrückung korrigiert, bevor du eine Antwort zu Client schickst. Der Nachteil ist hier, dass es unnötig Performance kostet, es sei denn du legst die so entstandenen Dateien irgendwo ab und machst diesen Vorgang nicht bei jedem Aufruf.


PS: „\t“ sind keine zwei Leerzeichen. Mischst du Leerzeichen und Tabs?
Mit Zitat antworten
Sponsored Links
  #3 (permalink)  
Alt 03.12.2008, 12:12
Benutzerbild von David
auch, ja!
XHTMLforum-Kenner
 
Registriert seit: 08.11.2007
Beiträge: 2.626
David ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer AnblickDavid ist ein wunderbarer Anblick
Standard

Ich weis nicht ob das daran liegt, aber ich verzichte weitgehend auf den 'echo' befehlt.
D.h. meine Includes sehen in etwa so aus:
Code:
<h3>Überschrift</h3>
     <p>Blindtext ole...</p>
<?php   if(irgendwas) {?>
             <ul>
                <li>listenpunkt</li>
             </ul>
<?php   }?>
    <p>Zweiter absatz...</p>
usw...
von der Übersichtlichkeit her gehts ganz gut und der ausgegebene Quelltext sieht auch ordentlich aus.
Wenn ich echo nutzen muss, dann nur in der Zeile.
Also so in etwa
Code:
<a href="<?php echo $ziel1;?>">Ziel 1</a>
Mit Zitat antworten
  #4 (permalink)  
Alt 03.12.2008, 12:17
Benutzerbild von Gumbo
XHTMLforum-Kenner
 
Registriert seit: 22.08.2004
Ort: Trier
Beiträge: 2.733
Gumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekanntGumbo ist jedem bekannt
Standard

Du könntest auch einfach Tidy benutzen.
__________________
Markus Wulftange
Mit Zitat antworten
  #5 (permalink)  
Alt 03.12.2008, 17:36
Benutzerbild von domsson
Rookie @ HTML/CSS/PHP/SQL
neuer user
Thread-Ersteller
 
Registriert seit: 11.02.2008
Ort: Berlin
Beiträge: 88
domsson wird schon bald berühmt werden
Standard

Ich weiss, ein "\t" ist ein Tab, keine zwei Leerzeichen. Ich habe das Beispiel aus der aktuellen Praxis genommen, es zeigt perfekt, was passieren kann: frueher habe ich ueberall Tabs genutzt, deshalb auch "\t" fuer die Einrueckung in den PHP-Geschichten. Irgendwann habe ich dann aber auf zwei Leerzeichen umgestellt, beim aktuellen Projekt kombinierte ich eine neue index.php mit alter Inhaltsdatei, schon war das Schlamassel im resultierenden Markup besonders gross, weil "\t" zumeist auch noch andere Abstaende erzeugt, als meine Leerzeichen.

Der Stil von DNA, die PHP-Schnippsel nur dort zu nutzen, wo es wirklich noetig ist, habe ich mir mittlerweile auch angewoehnt. Trotzdem kommt es noch oft vor, dass auch groessere Abschnitte mal komplett von PHP geparsed werden, zum Beispiel wenn ich ein Formular erzeuge, bei dem mehr dynamischer als statischer Inhalt vorhanden ist.

Der Verweis auf Tidy ist sehr interessant, ich bin zwar gerade aufm Sprung und konnte deshalb nur kurz reinschauen, doch wie ich es sehe, liesse sich das damit durchaus machen. Im Prinzip kommt es dann, wenn ich mich nicht irre, der Variante von inta (alles nochmal durch 'n Parser) ja auch nahe. Die Frage, die sich mir jetzt stellt ist nur: wenn es wirklich nicht einfacher (und dementsprechend ressourcenschonender) moeglich ist, lohnt es sich dann? Vermutlich nicht. Vielleicht sollte ich mich vom Ordnungsfimmel befreien und falsche Einrueckung falsche Einrueckung sein lassen...

Danke soweit fuer Eure Meinungen und Ideen!
__________________
Wenn Du mich fragst, was mir beim Erlenen von Webentwicklung am meisten Probleme bereitet, dann antworte ich: IE.
Mit Zitat antworten
  #6 (permalink)  
Alt 03.12.2008, 18:01
Benutzerbild von heiko_rs
Erfahrener Benutzer
XHTMLforum-Kenner
 
Registriert seit: 18.09.2005
Ort: Berlin
Beiträge: 9.848
heiko_rs ist ein wunderbarer Anblickheiko_rs ist ein wunderbarer Anblickheiko_rs ist ein wunderbarer Anblickheiko_rs ist ein wunderbarer Anblickheiko_rs ist ein wunderbarer Anblickheiko_rs ist ein wunderbarer Anblickheiko_rs ist ein wunderbarer Anblick
Standard

Statt falscher Einrückung würde ich eher ganz drauf verzichten. Ich persönlich rücke meinen HTML-Code nur noch in Ausnahmefällen ein (z.B. bei verschachtelten Listen, und dann natürlich auch per "\t"). Denn wenn ich irgendwann mal z.B. noch ein div um alles legen muss, ist die ganze Einrückung zum Teufel, und hätte ich keine Lust, mich dann noch um eine Korrektur der index.php sowie sämtlicher inkludierten Inhalte zu kümmern.

Aber wenn ich einrücken würde, müsste es auch perfekt sein (wenn schon, denn schon), daher würde ich wie gesagt an Deiner Stelle ganz eher drauf verzichten, als eine verquere Einrückung zu haben, denn die nützt niemandem was. Die sieht auch nicht nach Ordnungsfan aus, sondern eher nach dem Gegenteil
__________________
Wer keinen Link auf seine problembehaftete Seite posten kann, weil diese noch nicht online ist: Testcase bauen, online stellen, Link posten.
Internet-Grundregel: Unbekannte Begriffe googeln! (Erspart 99% aller Nachfragen.)

Geändert von heiko_rs (03.12.2008 um 18:04 Uhr)
Mit Zitat antworten
  #7 (permalink)  
Alt 03.12.2008, 18:48
Benutzerbild von domsson
Rookie @ HTML/CSS/PHP/SQL
neuer user
Thread-Ersteller
 
Registriert seit: 11.02.2008
Ort: Berlin
Beiträge: 88
domsson wird schon bald berühmt werden
Standard

Zitat:
Zitat von heiko_rs Beitrag anzeigen
Aber wenn ich einrücken würde, müsste es auch perfekt sein [...]
- korrektamundo!

(Jetzt muss ich mich nur noch zwischen perfekt und garnicht entscheiden...)
__________________
Wenn Du mich fragst, was mir beim Erlenen von Webentwicklung am meisten Probleme bereitet, dann antworte ich: IE.
Mit Zitat antworten
  #8 (permalink)  
Alt 03.12.2008, 21:30
Benutzerbild von Timo
table-layout: none;
XHTMLforum-Kenner
 
Registriert seit: 11.11.2006
Beiträge: 5.345
Timo ist ein LichtblickTimo ist ein LichtblickTimo ist ein LichtblickTimo ist ein LichtblickTimo ist ein Lichtblick
Standard

Ich verfahre genau wie Heiko, ich habs auch aufgegeben. Irgendwann hat man 6 Tabs das is dann auch nicht mehr übersichtlich.
__________________
Um weitere Erklärungen eingeblendet zu bekommen, drücken Sie bitte die Tastenkombination Alt + F4
Mit Zitat antworten
Antwort

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
CSS-Layout der Browsergröße anpassen Jen CSS 3 14.11.2008 08:39
Problem mit position:relative; McCoRmIcK CSS 0 08.04.2007 16:23
dreispaltiges layout, footer soll immer mitwandern sirrpa CSS 14 24.11.2005 18:57
div box bekomme ich nett zentriert??? Hard@Bowl CSS 1 23.05.2005 11:22
height: 100% beim IE [M.o.C]Co CSS 3 12.05.2005 12:58


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:05 Uhr.