2012-12-03 2 views
0

저는 SilverStripe 2.4.7과 DomDocument를 사용하고 있습니다. 독립 실행 형 PHP 파일 내에서 사용될 때 예상대로 작동하는 다음 코드를 작성했습니다. URL이 내가 전화하고있는 실제 URL이 아니라 그것이 나 No DTD given in XML-Document을 알려줍니다 내 페이지 컨트롤러를 추가 할 때 나는, 그러나 그것을 공개적으로SilverStripe에서 DomDocument 사용

$url = "http://www.somesite.com/"; 

    $dom = new DOMDocument(); 
    $dom->validate(); **I took this line out to fix the first error** 
    $dom->loadHTMLFile($url); 

    foreach ($dom->getElementsByTagName('img') as $item) { 
    $value = $item->getAttribute('src'); 
    $item->setAttribute('src', 'http://www.somesite.com/' . $value); 
    } 

    foreach ($dom->getElementsByTagName('script') as $item) { 
    $value2 = $item->getAttribute('src'); 
    $item->setAttribute('src', 'http://www.somesite.com/' . $value2); 
    } 

    foreach ($dom->getElementsByTagName('a') as $item) { 
    $value4 = $item->getAttribute('href'); 
    $item->setAttribute('href', 'http://www.somesite.com/' . $value4); 
    } 

    $s = $dom->getElementById('searchbox_button'); 
    $value5 = $s->getAttribute('src'); 
$s->setAttribute('src', 'http://www.somesite.com/' . $value5); 

$cr = $dom->getElementById('content_right'); 
$cl = $dom->getElementById('content_left'); 
    $fb = $dom->getElementById('siteclock'); 
    $fb->parentNode->removeChild($fb); 

    $content = $dom->getElementById('content'); 
    $dom->appendChild($content); 
    $content->removeChild($cr); 
    $content->removeChild($cl); 

    foreach ($dom->getElementsByTagName('link') as $item) { 
    $value3 = $item->getAttribute('href'); 
    $item->setAttribute('href', 'http://www.somesite.com/' . $value3); 
    } 

    $offers = DataObject::get('AdminOffer'); 

    $div = $dom->createElement('div'); 
    $div->setAttribute("class", "offerBox"); 
    $div->setAttribute("style", "width: 33.33333%; overflow: hidden; border: 2px solid #80bd01"); 

    $content->appendChild($div); 

    $img = $dom->createElement('img'); 
    $img->setAttribute("src", "http://www.somesite.com/$offers->Photo"); 
    $img->setAttribute("alt", "$offers->Title"); 
    $img->setAttribute("width", "120px"); 
    $img->setAttribute("style", "float: left; margin: 5px;"); 

    $div->appendChild($img); 

    $p = $dom->createElement('p'); 
    $p->setAttribute("style", "float: left; word-wrap:normal; width: auto"); 
    $div->appendChild($p); 

    $bTitle = $dom->createElement('b', "Offers->Title"); 

    $p->appendChild($bTitle); 

    $break1 = $dom->createElement('br/'); 
    $p->appendChild($break1); 

    $bPrice = $dom->createElement('b', "Offers->Price"); 

    $p->appendChild($bPrice); 
    $break2 = $dom->createElement('br/'); 
    $p->appendChild($break2); 

    $bExpires = $dom->createElement('b', "Offers->Expires"); 

    $p->appendChild($bExpires); 

    $dom->formatOutput = true; 

    return $dom->saveHTML(); 

를 게시 할 수 있습니다.

나는 다음과 같은 방법으로 DTD를 추가하는 시도했지만 내가 할 때 서버 오류가 발생했습니다.

$dom = DOMImplementation::createDocumentType('html', 
      '-//W3C//DTD XHTML 1.1//EN', 
      'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd'); 

내가 SilverStripe는 XML의 DTD를 지정하고 이것이 내가 validate 메소드를 호출 할 때 HTML에 오류가 수신되는 원인 추측하고있다. 그러나 유효성 검사 호출을 주석 처리 할 때 네임 스페이스가 수신중인 HTML에 정의되어 있지 않다는 오류가 발생합니다. 저는 SilverStripe 템플릿이 XML DTD를 사용한다는 것을 명시하는 오래된 게시물을 발견했습니다. 그래서 어떻게 이것을 덮어 쓸 수 있을지 궁금합니다.

나는 어떤 조언을 감사하고 내가 뭔가에 대해 명확하지 않은 경우 알려 주시면 수정하겠습니다 것입니다.

답변

0

SilverStripe의 오류보고에 문제가있는 것으로 나타났습니다. dev 모드에서 사용하기 때문에 실제로는 문제가되지 않는 오류가 발생했습니다. 당분간 dev 모드에서 계속 작업해야하기 때문에 문제의 원인이되는 줄에 오류를 표시하지 않으려면 @을 포함시켜야했습니다.

@$dom->loadHTMLFile($url); 

나는 또한 내가 있기 때문에 어쨌든 완전히 잘못된 위치에 배운 유효성 검사 라인을 제거했다.

이 정보가 도움이되기를 바랍니다.