PHP statt Frames – Silbentrennung

Neben den Nachteilen, die das Frame-Kon­zept hat, gab es we­nig­stens den Vor­teil, daß man mit ei­ner Da­tei für das Menü der Web­sei­te aus­kom­men kann, wenn man mal den Schön­heits­feh­ler au­ßen vor läßt, daß man nicht auf die ak­tu­el­le Sei­te ver­lin­ken soll. Die übri­gen Nach­tei­le las­sen sich zum Teil da­durch aus­glei­chen, daß man zum einen die Na­vi­ga­tion noch­mal in den No­frames-Be­reich des Frame­sets über­nimmt, wo­durch die Sei­te auch für Be­su­cher be­nutz­bar ist, de­ren Brau­ser kei­ne Frames be­herrscht. Zum an­de­ren kann man für jede The­men­sei­te ein ei­ge­nes Frame­set mit pas­sen­der Na­vi­ga­tions­da­tei an­le­gen, das die Be­su­cher dann auch book­mar­ken kön­nen. Aber das macht deut­lich mehr Ar­beit, weil bei Er­wei­te­run­gen der Sei­te die Na­vi­ga­tion in vie­len Da­tei­en ein­zeln an­ge­paßt wer­den muß.

Um Abhilfe zu schaffen, aber die Auf­tei­lung in ver­schie­de­ne Da­tei­en zu er­hal­ten, bin ich auf PHP um­ge­stie­gen. Aus dem Frame­set ist jetzt sinn­ge­mäß die index.php, stw.php usw. ge­wor­den, die den Grund­auf­bau (Kopf- und Fuß­be­reich) ent­hält und die über URL-Pa­ra­me­ter ge­steu­ert die je­wei­li­ge In­halts­da­tei nach­lädt. Zur Aus­ga­be der Na­vi­ga­tion wird au­ßer­dem eine indexn.php, stwn.php usw. nach­ge­la­den. Die mög­li­chen URL-Pa­ra­me­ter und an­de­re Va­ria­blen zur Steue­rung der Na­vi­ga­tions- und In­halts­aus­ga­be sind je­weils in ei­ner indexv.php, stwv.php usw. ab­ge­legt, in der die URL-Pa­ra­me­ter auf vor­ge­se­hen Wer­te über­prüft wer­den und die eben­falls in der index.php usw. als er­ste, noch vor den an­de­ren Da­tei­en nach­ge­la­den wird. Für sei­ten­spe­zi­fi­sches CSS zu den In­halts­sei­ten gibt es au­ßer­dem eine indexc.php, stwc.php usw. Die ei­gent­li­chen In­halts­da­tei­en ent­hal­ten au­ßer ei­ner Zei­le, die ver­hin­dert, daß sie al­leine auf­ge­ru­fen wer­den kön­nen, nur noch den aus­zu­ge­ben­den Text. Durch die­se Auf­tei­lung bleibt das auch ohne CMS re­la­tiv über­sicht­lich.

Um das alles testen zu können, bevor es auf den Web­ser­ver des Ho­sters hoch­ge­la­den wird, habe ich auf mei­nem Rech­ner einen lo­ka­len Web­ser­ver lau­fen. Das er­mög­licht auch Tests der Web­sei­te mit an­de­ren Ge­rä­ten und Be­triebs­sy­ste­men über das LAN. Au­ßer­dem nut­ze ich die lo­ka­le Ver­sion des WDG-Va­li­da­tors, um die Sei­ten auf gül­ti­ges HTML zu te­sten. Dazu wer­den mit wget lo­cal­host HTML-Da­tei­en er­zeugt und per Skript au­to­ma­ti­siert ein­zeln mit dem Vali­da­tor ge­te­stet.

Gleichzeitig mit der oben beschriebenen Um­stel­lung woll­te ich mei­ne Tex­te mit be­ding­ten Trenn­stri­chen er­gän­zen, die dem Brau­ser an die­sen Stel­len eine Sil­ben­tren­nung er­mög­li­chen. Man sehe sich mal Web­sei­ten an, die bei ei­nem Lay­out mit schma­len Text­spal­ten auch noch Block­satz ver­wen­den, mich graust es da je­des­mal. Zwar ist vor­ge­se­hen, daß die Brau­ser Sil­ben­tren­nung künf­tig al­leine be­herr­schen, aber bis heu­te kön­nen das nicht alle gän­gi­gen Pro­gram­me. Fire­fox kann es, IE, Chrome und Sa­fa­ri da­ge­gen nur mit brow­ser­spe­zi­fi­schem CSS, Ope­ra an­schei­nend gar nicht. Pro­ble­me mit den be­ding­ten Trenn­stri­chen er­ge­ben sich of­fen­bar bei der Sprach­aus­ga­be mit Screen­rea­dern, denn die­se le­sen den Text dann sil­ben­wei­se vor. Das ist je­doch ein Pro­blem der Soft­ware, die die be­ding­ten Trenn­stri­che zu igno­rie­ren hät­te.

Um die Trenn­stri­che nicht ma­nu­ell er­gän­zen zu müs­sen, was bei der Men­ge Text auch zu feh­ler­an­fäl­lig ge­we­sen wäre, ver­wen­de ich da­für ein PHP-Skript im Brau­ser. Da­mit wird eine In­halts­da­tei Wort für Wort durch­lau­fen und je­des Wort, das län­ger als 4 Zei­chen ist, mit ei­ner Li­ste be­reits ge­spei­cher­ter Wör­ter ver­gli­chen. Ist das Wort in der Li­ste ent­hal­ten, so wird es durch die Trenn­strich­ver­sion er­setzt, wenn nicht, stoppt das Skript. Dann läßt sich das neue Wort mit Trenn­stri­chen er­gän­zen und wird eben­falls in der Li­ste ge­spei­chert. Bei der Ein­ga­be wird als Trenn­strich das Zei­chen | ver­wen­det, denn das Uni­code-Zei­chen für den Trenn­strich wäre nicht sicht­bar. Für Wör­ter, die län­ger als 4 Zei­chen sind, die aber nicht ge­trennt wer­den dür­fen, gibt es eine Aus­las­sungs­li­ste. Wör­ter mit Schreib­feh­lern, die ja eben­falls nicht in der Li­ste sind, kön­nen kor­ri­giert wer­den und wer­den dann er­neut ge­gen die Li­ste ge­prüft. Das Skript ar­bei­tet die Da­tei zei­len­wei­se ab, wo­bei die er­sten 40 Zei­chen je Zei­le über­sprun­gen wer­den, der Wert läßt sich an­pas­sen. Man soll­te also kei­ne un­nö­ti­gen Um­brü­che (New­lines, \n) im Quell­text ha­ben.

Zwei Einfabefelder mit Fehlermeldung, weil das Feld Dateiname leer ist
Eingabe der zu verarbeitenden Da­tei

Um Dateien, die um einen Abschnitt er­wei­tert wor­den sind, nicht er­neut von an­fang an durch­lau­fen zu müs­sen, kann beim Start die Zei­len­num­mer an­ge­ge­ben wer­den, ab der die Sil­ben­tren­ner er­gänzt wer­den sol­len.

Formular mit großem Textfeld oben, das ein Textfragment mit gelb hinterlegtem Wort enthält, darunter mehrere Textfelder und Schaltflächen
Zusammensetzung aus in der Li­ste vor­han­de­nen Wör­ter er­kannt

Als HTML-Editor verwende ich noch immer Blue­fish 1.0.2, des­sen Ein­stel­lun­gen zum Syn­tax-High­light­ing ich so er­gänzt habe, daß der be­ding­te Trenn­strich far­big ge­kenn­zeich­net wird. Die ak­tu­el­len Blue­fish-Ver­sio­nen ver­wen­den eine neu­ere GTK-Ver­sion, bei der das Uni­code-Zei­chen des be­ding­ten Trenn­strichs im Edi­tor nicht mehr sicht­bar ist.


Letzte Änderung am 17.3.2017
© Steffen Buhr