2009-08-17 4 views
0

最終的にgzipされてページに印刷される文書を保持するのは、Documentクラスです。そのドキュメントにはドキュメントのDocTypeが保持されます。私が直面している問題は、Doctypeの表示を正しく実装する方法です。Doctypesの入力

たとえば、最も頻繁に使用される一般的なDoctypesの配列を作成し、 'strict'と入力すると自動的にHTML 4.01 Strictが選択されます。既知のDocTypeがない場合は、カスタムDocTypeを入力し、入力した内容を表示するだけであると見なすことができます。これはエラーが発生しやすく、ぎこちないようです。

 
    $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; 
     } 
    } 

もう1つの方法は、毎回DocType全体を入力するだけです。

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

この問題をどのように処理しますか?

答えて

1

カスタムDoctypeの入力を許可するかどうかによって異なります。その状況を例外と見なした場合、誰かが未定義のdoctypeを使用しようとすると例外がスローされるはずです。実際のdoctypeを設定する前に、カスタムdoctypeを定義してそのメソッドを使用する方法を提供することもできます。あなたはDOCTYPE定義を入力する必要があり

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

第二の溶液は、IMO醜いであり、私はそれを避けるだろう:

私はこのような何かをするだろう。

+0

私が探していたものです。 –

0

ユーザーはカスタムDoctypeを入力できますか?

おそらく

ドク

基本クラスを作成し、元、それぞれのタイプに拡張:

StrictDoc等

ドク を拡張し、それは、独自のドキュメントタイプを設定しますそれぞれについて。ドキュメントタイプに追加する場合は、Docを拡張する別のクラスを作成するだけです。

関連する問題