저는 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를 사용한다는 것을 명시하는 오래된 게시물을 발견했습니다. 그래서 어떻게 이것을 덮어 쓸 수 있을지 궁금합니다.
나는 어떤 조언을 감사하고 내가 뭔가에 대해 명확하지 않은 경우 알려 주시면 수정하겠습니다 것입니다.