用于HTML标记生成的PHP库

时间:2012-06-23 22:08:57

标签: php html

我是一个PHP新手。对不起,如果这是常见问题...

假设我有这个HTML表格:

<table width="100%" cellpadding="12" cellspacing="0" border="0">
  <tr bgcolor="black">
    <td align="left">
      <img src="logo.gif" />
    </td>
    <td>
      <h1>Hello</h1>
    </td>
    <td align="right">
      <img src="logo.gif" />
    </td>
  </tr>
</table>

我想使用PHP函数生成代码,而不是转义为HTML(?> ... <?php)或使用带有手动字符串构造的echo。我cooked up a library这样就可以生成上面的例子:

echo table(
  array('width' => '100%', 'cellpadding' => '12', 'cellspacing' => '0', 'border' => '0'),
    tr(
      array('bgcolor' => 'black'),
      td(
        array('align' => 'left'),
        img(array('src' => 'logo.gif'))),
      td(array(), h1(array(), 'Hello')),
      td(array('align' => 'right'), img(array('src' => 'logo.gif')))));

我的问题是,是否有一个流行的或常用的库可以做到这一点?

5 个答案:

答案 0 :(得分:3)

您可以使用Codeigniter html tablesform helper,但这就是它。其余的由你决定。

答案 1 :(得分:2)

codeigniter做了这种事情。 我建议你研究一下。

答案 2 :(得分:2)

虽然不是完全匹配,但Yii框架使用the CHtml class来帮助生成html。

答案 3 :(得分:2)

我没有找到图书馆,所以我继续更新自己的HTML tab library

答案 4 :(得分:2)

请参见PHP HTML Creation Library的非OO答案:

使用example.php:

<?php
require ("html.php");
  // crete a header
  $head=head(title("This is an example"));
  // and a body
  $body=body(h(1,"This is a header 1").pre("With some preformatted text").hr());
  // wrap it in html
  echo html($head.$body);
?>

html.php:

<?php
/**
 * HTML Abstraction
 */

   // anchor   
   function a($href,$la,$indent=-1) {
     return attrtag("a",attr("href",$href),$la,$indent,$indent);
   }

   // break
   function br($indent=-1) {
     return tag("br","",$indent,$indent);
   }

   // header
   function h($h,$lh,$indent=-1) {
     if ($indent<0) 
       $indent=$h+1;
     return tag("h".$h,$lh,$indent,-1);
   }

   // horizontal ruler
   function hr($indent=-1) {
     return tag("hr","",$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);
   }

   // pre formatted content
   function pre($content,$indent=-1) {
     return tag("pre",$content,$indent);
   }

   // table 
   function td($ltd,$indent=5) {
     return tag("td",$ltd,$indent,$indent);
   }

   // table header
   function th($lth,$indent=5) {
     return tag("th",$lth,$indent,$indent);
   }

   // table row
   function tr($ltr,$indent=4) {
     return tag("tr",$ltr,$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);
   }

   // head
   function head($head,$indent=1) {
     return tag("head",$head,$indent,$indent);
   }

   // body
   function body($body,$indent=1) {
     return tag("body",$body,$indent,$indent);
   }

   // html
   function html($html) {
     return tag("html",$html,-1,0);
   } 
   // indentation by the given count
   function indentation($count) {
     return str_repeat("  ",$count);
   }

   // adds a newline    
   function line($line) {
     return $line."\n";
   }

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

   // tag with possible indentation
   function tag($tag,$ltagcontent,$openindent=-1,$closeindent=-1) {
      return attrtag($tag,"",$ltagcontent,$openindent,$closeindent);
   }

    // indent the given lines
   function indent($html,$indent) {
     $result="";
     $lines=explode("\n",$html);
     foreach($lines as $line) {
       $result.=indentation($indent).$line."\n"; 
     }
     return $result;
   }

?>