Question

J'ai une classe Document qui est responsable de la tenue du document qui sera éventuellement gzippés puis imprimé sur la page. Dans ce document, détient le DOCTYPE du document. Le problème que je suis confronté est de savoir comment mettre en œuvre correctement l'affichage du Doctype.

Par exemple: Je pourrais créer un tableau de Doctypes populaires qui sont les plus fréquemment utilisés, et si vous entrez « stricte », il choisirait automatiquement HTML 4.01 Strict. S'il n'y a pas un DOCTYPE connu, il pourrait supposer que vous entrez dans un DOCTYPE personnalisé et afficher tout ce que vous avez entré. Cela semble être une erreur et sujette 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;
         }
    }

Une autre façon de le faire serait d'avoir simplement d'entrer dans tout Doctype chaque fois.

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

Comment réagiriez-vous ce problème?

Était-ce utile?

La solution

Cela dépend si vous souhaitez autoriser l'entrée doctypes personnalisés. Si l'on considère que la situation une exception, vous devriez probablement jeter une exception quand quelqu'un essaie en utilisant doctype non défini. Vous pouvez également fournir une méthode pour définir un type de document personnalisé et la force en utilisant cette méthode avant de la doctype réelle.

Je ferais quelque chose comme ceci:

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');
        }
    }
}

La seconde solution dans laquelle vous devez saisir la définition de DOCTYPE est l'OMI laide et je l'éviter.

Autres conseils

Je pense que vous devriez juste checkout la liste w3c DOCTYPE. http://www.w3.org/QA/2002/ 04 / valid-dtd-list.html

Les utilisateurs sont autorisés à entrer dans un type de document personnalisé?

Peut-être créer une classe de base

Doc

Et l'étendre à chaque type, ex:

StrictDoc étend Doc etc.

Et il va définir son propre type de doc pour chacun. Si vous souhaitez ajouter aux types de doc, il suffit de créer une autre classe qui étend Doc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top