tôi có một phiên bản không OO lúc này trông như thế này:
<?php
/**
* HTML Abstraction
*/
// html
function html($html) {
return tag("html",$html,-1,0);
}
// body
function body($body,$indent=1) {
return tag("body",$body,$indent,$indent);
}
// head
function head($head,$indent=1) {
return tag("head",$head,$indent,$indent);
}
// image
function img($src,$alt,$width,$height,$indent=-1) {
return attrtag("img",attr("src",$src).attr("alt",$alt).attr("width",$width).attr("height",$height),"",$indent,$indent);
}
// table
function table($lt,$indent=3) {
return tag("table",$lt,$indent,$indent);
}
// title
function title($title,$indent=2) {
return tag("title",$title,$indent,-1);
}
// tag with possible indentation
function tag($tag,$ltagcontent,$openindent=-1,$closeindent=-1) {
return attrtag($tag,"",$ltagcontent,$openindent,$closeindent);
}
function td($ltd,$indent=5) {
return tag("td",$ltd,$indent,$indent);
}
function th($lth,$indent=5) {
return tag("th",$lth,$indent,$indent);
}
function tr($ltr,$indent=4) {
return tag("tr",$ltr,$indent,$indent);
}
function a($href,$la,$indent=-1) {
return attrtag("a",attr("href",$href),$la,$indent,$indent);
}
function h($h,$lh,$indent=-1) {
if ($indent<0)
$indent=$h+1;
return tag("h".$h,$lh,$indent,-1);
}
// an attribute with a given value
// or empty if value is not set
function attr($attr,$value) {
if (empty($value))
return "";
else
return " ".$attr."='".$value."'";
}
// attributed tag, possibly indented
function attrtag($tag,$attr,$ltagcontent,$openindent=-1,$closeindent=-1) {
$html="<".$tag.$attr;
if ($openindent>=0)
$html="\n".indentation($openindent).$html;
if (empty($ltagcontent)) {
$html.="/>";
if ($closeindent>=0)
$html.="\n".indentation($closeindent);
} else {
$html.=">".$ltagcontent;
if ($closeindent>=0) {
$html.="\n".indentation($closeindent);
}
$html.="</".$tag.">";
}
return $html;
}
// indent the given lines
function indent($html,$indent) {
$result="";
$lines=explode("\n",$html);
foreach($lines as $line) {
$result.=indentation($indent).$line."\n";
}
return $result;
}
// indentation by the given count
function indentation($count) {
return str_repeat(" ",$count);
}
// adds a newline
function line($line) {
return $line."\n";
}
?>
Nó không có vẻ như quá khó khăn của một dự án để thực hiện của riêng bạn - đó là cách tiếp cận của tôi. – Vulcan
có thể trùng lặp của [Cách phân tích và xử lý HTML bằng PHP?] (Http://stackoverflow.com/questions/3577641/how-to-parse-and-process-html-with-php) – Gordon
không, tôi không muốn để phân tích hoặc xử lý HTML mỗi lần - tôi quan tâm đến thư viện HTML * tạo * hướng đối tượng. Nó cũng không phải là quá nhiều về các mẫu nhưng về sự phân tách các mối quan tâm. Giải pháp tốt nhất sẽ hoàn toàn dựa trên các giao diện và tách riêng việc triển khai để có thể có đầu ra khác nhau từ cùng một mã. Việc triển khai dựa trên DOM chỉ là một tùy chọn có thể. –