문제

나는있다 Document 결국 gzipped 한 다음 페이지에 인쇄 될 문서를 담당하는 클래스. 이 문서에는 문서의 문서가 있습니다. 내가 직면하고있는 문제는 DocType를 올바르게 구현하는 방법입니다.

예를 들어 : 가장 자주 사용되는 인기있는 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;
         }
    }

그것을하는 또 다른 방법은 단순히 전체 문서를 매번 입력 해야하는 것입니다.

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

이 문제를 어떻게 처리 하시겠습니까?

도움이 되었습니까?

해결책

사용자 정의 문서 입력을 허용하는지 여부에 따라 다릅니다. 그 상황을 예외로 생각하면 누군가가 정의되지 않은 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');
        }
    }
}

DocType 정의를 입력 해야하는 두 번째 솔루션은 Imo Ugly이며 피할 수 있습니다.

다른 팁

DocType W3C 목록을 확인해야한다고 생각합니다.http://www.w3.org/qa/2002/04/valid-dtd-list.html

사용자는 사용자 정의 문서를 입력 할 수 있습니까?

아마도 기본 클래스를 만듭니다

문서

각 유형으로 확장하십시오.

StrictDoc은 DOC 등을 확장합니다.

그리고 각각에 대한 자체 문서 유형을 설정합니다. DOC 유형에 추가하려면 DOC를 확장하는 다른 클래스를 작성하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top