PHP生成HTML文件, SummerHtml
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头部的一些标签
//生成头部
$html = Html::ini()->setLang('en')->setTitle('自动生成HTML文件')->setMetaName('keyword', '自动生成HTML')
->css('http://aaa.css')
->css('http://bbb.css')
->js('http://jquery1.js')
->js('http://jquery2.js')
->setHead();
2. 生成 table 标签
//生成table
$data = [
['a', 'b', 'c', 'd'],
['a', 'b', 'c', 'd'],
['a', 'b', 'c', 'd'],
['a', 'b', 'c', 'd'],
['a', 'b', 'c', 'd'],
]; $body = new body();
$table = table::ini()->setClass('mytable'); foreach ($data as $k1 => $tds) {
$tr = tr::ini()->setId('tr_'.$k1);
foreach ($tds as $k2 => $v2) {
$td = td::ini()->setText($v2)->setId('td_'.$k1.'_'.$k2);
$tr->append($td);
}
$table->append($tr);
} $body->append($table);
3. 生成 select/option, 并默认选中其中一项
$select = select::ini()->setId('select_id');
$options = ['a1' => 1, 'a2' => 2, 'a3' => 3];
foreach ($options as $name => $value) {
$option = option::ini()->setText($name)->setValue($value);
$value == 2 && $option->setSelected(TRUE);
$select->append($option);
}
4. 将 select / input 加入到 form标签中
$form = form::ini()->setId('myform')->setClass('formclass')->setMethod('post')->setAction('http://www.test5.com/submit');
$form->append(input::ini()->setId('a1')->setType('hidden')->setName('a1')->setValue(1));
$form->append(input::ini()->setId('a2')->setType('text')->setName('a2')->setValue(2));
...
$form->append($select);
5. 自定义标签(以<li>为例)
//自定义标签嵌套(li)
$ul = tag::ini('ul')->setClass('ul1');
$li1 = tag::ini('li')->append(label::ini()->setText('li1')); //这里不能直接调用setText()去给li添加文字
$li2 = tag::ini('li')->append(label::ini()->setText('li2'));
$ul->append($li1)->append($li2);
$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代码中显示出来
trait attribute
{
//公用
private $id = '';
private $width = '';
private $height = '';
private $style = ''; //未用, 建议写成单独的style文件
private $disabled = '';
private $text = ''; //文字内容 //input
private $type = '';
private $name = '';
private $value = '';
private $checked = '';
private $selected = '';
private $class = '';
private $placeholer = ''; // tr, td
private $colspan = '';
private $rowspan = '';
private $align = '';
private $valign = ''; // table
private $caption = '';
private $thead = '';
private $tbody = ''; // form
private $action = '';
private $method = '';
private $enctype = ''; //其他
public $indent = ' '; //缩进
public $eol = PHP_EOL; //换行
public $tag = ''; public $arrOther = array(); // array('data-x' => '123', 'align' => 'left', ...)
//组装非空属性
public function getAttrs(){...} //清空属性
public function init(){...}
PHP生成HTML文件, SummerHtml的更多相关文章
- Android 解析XML文件和生成XML文件
解析XML文件 public static void initXML(Context context) { //can't create in /data/media/0 because permis ...
- SQL*Plus生成html文件
最近使用SQL*Plus命令生成html文件,遇到一些有意思的知识点,顺便记录一下,方便以后需要的时候而这些知识点又忘记而捉急.好记性不如烂笔头吗! 为什么要用SQL*Plus生成html文件? ...
- vim保存文件时,生成.un~文件
在用vim保存文件时,文件夹下生成.un~文件 怎么删除这些文件呢 在网上搜索的答案: http://stackoverflow.com/questions/15660669/what-is-a-un ...
- WPF根据Oracle数据库的表,生成CS文件小工具
开发小工具的原因: 1.我们公司的开发是客户端用C#,服务端用Java,前后台在通讯交互的时候,会用到Oracle数据库的字段,因为服务器端有公司总经理开发的一个根据Oracle数据库的表生成的cla ...
- 简单生成svg文件
this.fileSaveSync = function (file, data) { var fs = require('fs-extra'); fs.writeFileSync(file, dat ...
- 使用Free Spire.Presentation生成PowerPoint文件
使用Free Spire.Presentation生成PowerPoint文件 前言 之前有写过一篇使用Free Spire.XLS生成图表的文章,朋友圈内反应还不错,都希望我能继续写下去,把类似 ...
- caffe的python接口学习(5):生成deploy文件
如果要把训练好的模型拿来测试新的图片,那必须得要一个deploy.prototxt文件,这个文件实际上和test.prototxt文件差不多,只是头尾不相同而也.deploy文件没有第一层数据输入层, ...
- 利用 autoconf 和 automake 生成 Makefile 文件
一.相关概念的介绍 什么是 Makefile?怎么书写 Makefile?竟然有工具可以自动生成 Makefile?怎么生成啊?开始的时候,我有这么多疑问,所以,必须得先把基本的概念搞个清楚. 1.M ...
- linux下使用automake工具自动生成makefile文件
linux环境下,当项目工程很大的时候,编译的过程很复杂,所以需要使用make工具,自动进行编译安装,但是手写makefile文件比较复杂,所幸在GNU的计划中,设计出了一种叫做Autoconf/Au ...
随机推荐
- git完全cli指南之详细思维导图整理分享
一直以来都觉得 在开发过程中 能用命令行的还是用命令行 能用快捷键的就要快捷键 前期可能要点学习成本 但是熟练后带来的好处还是非常可观的 所以一直坚持使用命令行的方式来使用git 基本上每个操作都能心 ...
- JAVA获取计算机CPU、硬盘、主板、网络等信息
通过使用第三方开源jar包sigar.jar我们可以获得本地的信息 1.下载sigar.jar sigar官方主页 sigar-1.6.4.zip 2.按照主页上的说明解压包后将相应的文件copy到j ...
- h5-canvas 单像素操作
###1. 自定义获取指定坐标像素 var canvas = document.querySelector("#cav"); if(canvas.getContext){ var ...
- python 基本数据类型以及运算符操作
一.基本数据类型 为何要区分类型? 数据类型的值是变量值得类型,变量值之所以区分类型,是因为变量的值 用来记录事物的状态,而事物的状态有不同的种类,对应着,也必须用不 用类型去区分它们. 1.数字类型 ...
- Android NDK(C++) 双进程守护
双进程守护如果从进程管理器观察会发现新浪微博.支付宝和QQ等都有两个以上相关进程,其中一个就是守护进程,由此可以猜到这些商业级的软件都采用了双进程守护的办法. 什么是双进程守护呢?顾名思义就是两个进程 ...
- apt-get软件包管理命令 和 apt-key命令
apt-get命令是Debian Linux发行版中的APT软件包管理工具. 所有基于Debian的发行都使用这个包管理系统.deb包可以把一个应用的文件包在一起,大体就如同Windows上的安装文件 ...
- P1962 斐波那契数列
题面是这样的,其实斐波那契我们之前也有接触过,并不是什么太陌生的玩意,第一个想到的方法其实是用递归来做,这样的话其实是非常轻松的,but同志们你们有没有关注过这样一个鬼东西 你以为蓝题是让你切着玩的吗 ...
- Zabbix通过Orabbix监控Oracle数据库
一.背景 公司业务使用的是一直Oracle数据库,因为多次出现表空间满的时候不能及时发现,每次都是业务组的人员通知处理,这样下来DBA这边就比较被动,所以老大要求监控表空间剩余大小并且当剩余过小时能够 ...
- IDEA 破解
推荐三篇文章 : 1: https://blog.csdn.net/nishiwodebocai21/article/details/71359619?fps=1&locationNu ...
- 第十三节:实际开发中使用最多的监视锁Monitor、lock语法糖的扩展、混合锁的使用(ManualResetEvent、SemaphoreSlim、ReaderWriterLockSlim)
一. 监视锁(Monitor和lock) 1. Monitor类,限定线程个数的一把锁,两个核心方法: Enter:锁住某个资源. Exit:退出某一个资源. 测试案例:开启5个线程同时对一个变量进行 ...