borisbaer: Wie Darstellung und Inhalt trennen?

Beitrag lesen

problematische Seite

Hallo zusammen,

erst mal Off-Topic:

In den letzten Wochen und Monaten habe ich einiges zu JavaScript (jQuery konnte ich sogar ganz ad acta legen), PHP und SQL gelernt, worüber ich als Laie erst mal wahnsinnig froh bin. Als ich mit dem Bau meiner Website angefangen habe, dachte ich überhaupt nicht, so weit zu kommen. Allein schon ein Login-System zu haben oder etwas Umfangreicheres zu programmieren schien mir utopisch. Sehr viel davon habe ich den Leuten hier zu verdanken (v.a. Gunnar Bittersmann und Rolf B.). Daher möchte ich an dieser Stelle mal meinen ganz herzlichen Dank aussprechen für alles.

On-Topic:

Ich bin jetzt an einem Punkt, an dem sich mir immer mehr und mehr die Frage aufdrängt, wie ich Inhalt und Darstellung am besten trenne. Es scheint hierbei wohl mehrere Möglichkeiten zu geben. Bisher habe ich alles über PHP-Funktionen gemacht. Zum Beispiel so:

MARKER(
    'item', // type
    '324px', // position: top
    '606px', // position: left
    '1-2-1-half-moon-grass', // id bzw. input name
    'width: 94px; height: 74px; right: 4px; bottom: 100%; border-width: 1.5px 1.5px 0 0;', // posLine
    'bottom: calc(100% - 7px); right: calc(100% + 3px);', // posName
    $HALFMOONGRASS . ' × 3' // name
);

Obiger Code bezieht sich auf eine Kartenmarkierung (siehe problematische Seite).

Die HTML-Darstellung dazu sieht so aus:

<?php

function MARKER( $type, $top, $left, $id, $posLine, $posName, $name ) { ?>

    <div class="marker <?= $type ?>" style="top: <?= $top ?>; left: <?= $left ?>;">
        <input name="<?= $id ?>" type="checkbox">
        <div class="line" style="<?= $posLine ?>">
            <div class="name <?= $type ?>" style="<?= $posName ?>"><?= $name ?></div>
        </div>
    </div>

<?php }

Das klappt immerhin. Mir scheint dies eine Trennung von Darstellung und Inhalt zu sein. Die „strings“ (z.B. $name) sind zum Großteil in PHP-Variablen gespeichert. So könnte man wohl auch relativ einfach Mehrsprachigkeit nachträglich implementieren.

Jetzt muss ich aber noch mal betonen: Ich bin Laie. Ich habe keinen „ganzheitlichen“ oder „systematischen“ Zugang zu der Thematik. Daher weiß ich nie ganz genau, ob ich gerade Murks mache. Das ist das Beste, was ich mit meinen aktuellen Kenntnissen in Bezug auf Trennung von Darstellung und Inhalt kenne und kann.

Gunnar hatte mir ja bereits zweimal eine Verlinkung zu seiner Star-Trek-Seite gepostet, wo er die Daten mit JSON-LD einfügt. Ich kenne JSON eigentlich kaum, weiß nur, dass man da sozusagen Rohdaten systematisch abspeichern kann. Der einzige Berührungspunkt damit war, glaube ich, als ich einmal Texte aus dem Spiel Sunless Sea kopieren wollte, die sich in JSON-Dateien befanden.

Jedenfalls stellen sich mir zwei Fragen:

  1. Mache ich Murks mit meiner PHP-Funktionen-Lösung?
  2. Gibt es eine bessere Alternative?

Bei JSON kann ich keine Strings mit HTML-Code rausziehen, oder? Nur reinen Text gewissermaßen, d.h. JSON bietet sich meinem Verständnis nach nicht an, um <span style="letter-spacing: .1em">B</span>aum als String einzufügen, sondern nur Baum. PHP kann Ersteres jedoch. Wie dem auch sei, ich würde mich über Empfehlungen und Meinungen zur Trennung von Darstellung und Inhalt freuen.

Vielen Dank schon mal!