Domanda

Ho una classe Document che è responsabile in possesso del documento che saranno eventualmente gzip e poi stampato sulla pagina. In quel documento tiene DOCTYPE del documento. Il problema che sto affrontando è come implementare correttamente la visualizzazione del Doctype.

Per esempio: ho potuto creare un array di DOCTYPE popolari che sono il più utilizzato, e quindi se si inserisce 'rigorosa', sarebbe raccogliere automaticamente HTML 4.01 Strict. Se non c'è un DOCTYPE noto, potrebbe assumere si sta entrando in un DOCTYPE personalizzato, e solo mostrare quello che hai inserito. Questo sembra un soggetto a errori e 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;
         }
    }

Un altro modo per farlo sarebbe quello di avere semplicemente per entrare in tutta la DocType ogni volta.

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

Come si affrontare questo problema?

È stato utile?

Soluzione

Dipende se si desidera consentire di entrare DOCTYPE personalizzati. Se si considera che la situazione un'eccezione si dovrebbe probabilmente un'eccezione quando qualcuno cerca utilizzando doctype indefinito. Si potrebbe anche fornire un metodo per definire un doctype personalizzato e la forza usando quel metodo prima di impostare il doctype reale.

vorrei fare qualcosa di simile a questo:

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 seconda soluzione in cui è necessario digitare definizione doctype è IMO brutta e vorrei evitarlo.

Altri suggerimenti

Credo che si dovrebbe solo checkout la lista doctype W3C. http://www.w3.org/QA/2002/ 04 / valid-dtd-list.html

Sono gli utenti autorizzati a entrare in un doctype personalizzato?

Forse creare una classe di base

Doc

E estenderlo a ogni tipo, es:

StrictDoc estende Doc ecc.

E sarà impostato il proprio tipo doc per ciascuno. Se si desidera aggiungere ai tipi doc, è sufficiente creare un'altra classe che si estende Doc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top