php unhtml包,PHP生成HTML文件, SummerHtml

这篇博客介绍了如何使用PHP创建HTML文档,支持标签的嵌套和缩进。作者实现了一个类系统,每个标签对应一个类,通过设置属性和方法来构造HTML结构。示例中展示了生成HTML头部、表格、select/option、form以及自定义标签的过程。代码设计允许添加自定义标签,并能灵活处理属性和缩进。
摘要由CSDN通过智能技术生成

2018-6-27 20:13:04 星期三

作用: 用PHP生成HTML文档, 支持标签嵌套缩进

起因: 这个东西确实也是心血来潮写的, 我很满意里边的实现缩进的机制, 大家有用到的可以看看

现在都是真正的前后端分离了(vue, nodejs, webpack...), 这个东西喜欢就用, 不喜欢就算了~

目前支持的标签有html, head, meta, title, body, input, select/option, form, table, div, 注释, 以及 自定义标签(成对出现的标签), 还有一大堆属性(在下边有介绍)

源码: 码云

看其中的test.php文件,是介绍他的用法

缩进原理介绍:

每个标签我都设计了一个类, 比如 input 标签, 就有一个叫input的类与之对应

每个类里边一般都有以下3个重要成员:

1: 本标签的缩进值

2: 输出本标签最终字符串的方法, out()

3: 给本标签添加子标签的方发, append()

其中append()接收的是子标签的对象, 在最终调用$html->out()的时候, 每个子标签对象里的out()方法会被依次调用, 缩进值也会从上层类传递到最下层类并累加;

另外, 每个类都包含了属性类(calss attribute ), 每个类的缩进值是从属性类里继承而来的,  所以如果修改了属性类里的缩进量, 所有类的缩进量就跟着改变了

你也可以给标签类添加一个自己的缩进值来覆盖统一的缩进值

1. 生成HTML头部的一些标签

1 //生成头部

2 $html = Html::ini()->setLang('en')->setTitle('自动生成HTML文件')->setMetaName('keyword', '自动生成HTML')3 ->css('http://aaa.css')4 ->css('http://bbb.css')5 ->js('http://jquery1.js')6 ->js('http://jquery2.js')7 ->setHead();

2. 生成 table 标签

1 //生成table

2 $data =[3 ['a', 'b', 'c', 'd'],

4 ['a', 'b', 'c', 'd'],

5 ['a', 'b', 'c', 'd'],

6 ['a', 'b', 'c', 'd'],

7 ['a', 'b', 'c', 'd'],

8 ];9

10 $body = newbody();11 $table = table::ini()->setClass('mytable');12

13 foreach ($data as $k1 => $tds) {14 $tr = tr::ini()->setId('tr_'.$k1);15 foreach ($tds as $k2 => $v2) {16 $td = td::ini()->setText($v2)->setId('td_'.$k1.'_'.$k2);17 $tr->append($td);18 }19 $table->append($tr);20 }21

22 $body->append($table);

3. 生成 select/option, 并默认选中其中一项

1 $select = select::ini()->setId('select_id');2 $options = ['a1' => 1, 'a2' => 2, 'a3' => 3];3 foreach ($options as $name => $value) {4 $option = option::ini()->setText($name)->setValue($value);5 $value == 2 && $option->setSelected(TRUE);6 $select->append($option);7 }

4. 将 select / input 加入到 form标签中

1 $form = form::ini()->setId('myform')->setClass('formclass')->setMethod('post')->setAction('http://www.test5.com/submit');2

3 $form->append(input::ini()->setId('a1')->setType('hidden')->setName('a1')->setValue(1));4 $form->append(input::ini()->setId('a2')->setType('text')->setName('a2')->setValue(2));5

7 ...

8

9

10 $form->append($select);

5. 自定义标签(以

为例)

1 //自定义标签嵌套(li)

2 3 $ul = tag::ini('ul')->setClass('ul1');4 $li1 = tag::ini('li')->append(label::ini()->setText('li1')); //这里不能直接调用setText()去给li添加文字

5 $li2 = tag::ini('li')->append(label::ini()->setText('li2'));6 $ul->append($li1)->append($li2);7 $body->append($ul);

6. 将标签添加到 body 标签中

//将表单加入body

$body->append($form);

7. 将body标签加入到html标签中, 并返回最终的HTML文档

//将body加入html

$str = $html->setBody($body)->out();

8. 标签中的属性

我这里的方案是定义一个类, 里边有

1. 标签可能拥有的属性

2. 对应的setXxx方法

3. 组装非空的属性拼成字符串的方法

4. 为了不影响下次显示, 会有专门的清空方法, 把之前赋值的属性都清空

这样的话, 在定义标签属性的时候, 需要的就赋上值, 不需要的不赋值就不会在最终的HTML代码中显示出来

1 trait attribute2 {3 //公用

4 private $id = '';5 private $width = '';6 private $height = '';7 private $style = ''; //未用, 建议写成单独的style文件

8 private $disabled = '';9 private $text = ''; //文字内容10

11 //input

12 private $type = '';13 private $name = '';14 private $value = '';15 private $checked = '';16 private $selected = '';17 private $class = '';18 private $placeholer = '';19

20 //tr, td

21 private $colspan = '';22 private $rowspan = '';23 private $align = '';24 private $valign = '';25

26 //table

27 private $caption = '';28 private $thead = '';29 private $tbody = '';30

31 //form

32 private $action = '';33 private $method = '';34 private $enctype = '';35

36 //其他

37 public $indent = ' '; //缩进

38 public $eol = PHP_EOL; //换行

39 public $tag = '';40

41 public $arrOther = array(); //array('data-x' => '123', 'align' => 'left', ...)42 //组装非空属性

43 public function getAttrs(){...}44

45 //清空属性

46 public function init(){...}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值