2012-10-26 30 views
9

Tôi đang tìm một giải pháp PHP mà sẽ cho phép tạo ra HTML trong phong cách sau đây:PHP Thư viện Creation HTML

$head=new Head(); 
$title=new Title("The title of the page"); 
$head->setTitle($title); 

$body=new Body(); 
$h1=new H(1,"Header 1"); 
$body->add($h1); 

$html=new HTML(); 
$html->setHead($head); 
$html->setBody($body); 

echo $html->asHTMLString(); 

gì PHP Thư viện có một API tương tự? Tôi không quan tâm đến "Cái gì là tốt nhất ...?" thực tế là API có thể so sánh được là những gì tôi muốn biết.

+0

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

+0

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

+0

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ể. –

Trả lời

1

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

?> 
0

php http://php.net/manual/en/class.domdocument.php sẽ tốt cho việc này. đó là các lớp học tích hợp php

+0

Mục đích là để có các thuộc tính trực tiếp có sẵn và đặt tên là html "tương thích" ví dụ /** * một hình ảnh */ lớp Image { \t công cộng $ src;. \t công cộng $ alt; \t công cộng $ title; \t \t function __construct ($ psrc, $ palt, $ ptitle) { \t \t $ this-> src = $ psrc); \t \t $ this-> alt = $ alt; \t \t $ this-> title = $ title; \t} \t } –

+0

Tôi hiểu. Theo ý kiến ​​của tôi, tốt nhất trong trường hợp này sẽ được thực hiện bằng tay mã html bạn cần. – albanx

0

Đối với điều này, bạn có thể sử dụng DOM object hoặc viết lớp riêng của chúng tôi những gì dễ dàng hơn tôi thnik. Nhưng những gì bạn thử là chức năng của một hệ thống mẫu bình thường như Smarty, Twig hoặc khác.

nếu bạn muốn ngắn mã HTML của bạn, bạn có thể sử dụng HAML

+0

Cảm ơn bạn đã trỏ đến HAML - điều đó rõ ràng sẽ là một candiate cho phần mẫu (nếu quá được thêm vào thực hiện). Như đã nêu trong nhận xét của tôi, phần mẫu không phải là điều thú vị nhất đối với tôi nhưng có thể có ý nghĩa. –

Các vấn đề liên quan