Frage

Ich habe eine Document Klasse, die zum Halten des Dokuments verantwortlich ist, die schließlich im gzip werden und dann auf der Seite gedruckt. In diesem Dokument hält die DocType des Dokuments. Das Problem Ich bin vor ist, wie man richtig umzusetzen, um die Doctype angezeigt wird.

Zum Beispiel: Ich könnte eine Reihe von populären Doctypes erstellen, die die am häufigsten verwendeten sind, und dann, wenn Sie ‚strenge‘ eingeben, würde es automatisch HTML 4.01 Strict holen. Wenn es keine bekannte DocType ist, könnte es annehmen, dass Sie in einem benutzerdefinierten DocType eingeben, und nur zeigen, was Sie eingegeben haben. Dies scheint ein fehleranfällig und clumbsy.

    $document->setDoctype("strict");

    ..... in a class far, far, away........
    function setDocType($type)
    {
        if(in_array($type, $this->doctypes))
         {
             $this->doctype = $this->doctypes[$type];
         }
         else
         {
             $this->doctype = $type;
         }
    }

Eine andere Möglichkeit, es zu tun wäre, einfach in der gesamten DocType jedes Mal eingeben müssen.

$document->setDoctype('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">');

Wie würden Sie dieses Problem zu lösen?

War es hilfreich?

Lösung

Es hängt davon ab, wenn Sie benutzerdefinierte doctypes Eingabe zulassen möchten. Wenn Sie diese Situation eine Ausnahme betrachten sollten Sie vielleicht eine Ausnahme auslösen, wenn jemand mit undefinierten Doctype versucht. Sie könnten auch ein Verfahren zum Definieren eines benutzerdefinierten Doctype bieten und Kraft unter Verwendung dieses Verfahren vor der eigentlichen Doctype Einstellung.

Ich würde so etwas tun:

class Document {
    private $doctypes = array(
        'html4' => '...',
        'xhtml1strict' => '...'
    );

    private $doctype = null;

    public function addCustomDocType($name, $definition) {
        if (empty($this->doctypes[$name])) {
            $this->doctypes[$name] = $definition;
        } else {
            throw new Exception('Definition already exists');
        }
    }

    public function setDocType($name) {
        if (!empty($this->doctypes[$name])) {
            $this->doctype = $this->doctypes[$name];
        } else {
            throw new Exception('Doctype not found');
        }
    }
}

Die zweite Lösung, wo Sie Doctype Definition eingeben müssen IMO hässlich ist, und ich würde es vermeiden.

Andere Tipps

Ich denke, Sie sollten nur den Doctype w3c Liste der Kasse. http://www.w3.org/QA/2002/ 04 / gültig-dtd-list.html

Dürfen Benutzer eine benutzerdefinierte Doctype eingeben?

erstellen Vielleicht eine Basisklasse

Doc

und erweitern sie auf jede Art, zB:

StrictDoc erstreckt Doc etc.

Und es wird einen eigenen doc Typ für jeden Satz. Wenn Sie auf die doc-Typen hinzufügen möchten, einfach eine andere Klasse, die Doc erstreckt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top