qpfsoft / phtml
QPF Htmc 升级版本
Requires
- php: >=7.1.0
This package is auto-updated.
Last update: 2024-09-14 13:07:42 UTC
README
PHTML 即使用PHP语言来编写HTML代码。
前言
在使用DW时,发现了代码库的功能,但却是无法导出与导入。而且新版本的DW的视图操作也转入到代码模式;
所以就有了Phtml的诞生,(实际上最早htmc
是它的前身)
- 可编写相对完整的html元素与属性的API文档
- 可扩展与复用的代码库
优点
- 可以使用php语言来编写html代码,文档注解更清晰
- 无需创建保持html代码文件
- 可替代作为简单的视图模块
缺点
- 需要使用phtml生成模板,然后缓存模板,再使用模板引擎导入参数
备注
html中存在大量无复杂属性的元素,phtml不会单独写成元素对象,通过快速标签生成器会更快;
html中有一些复用性很高的标签组,phtml采用了集合元素的方式,来生成一组标签。
phtml的核心之一就是将数组转换为元素属性
phtml始终尝试生成代码时,带上合适的间隙。(压缩应该采用第三方来解决)
phtml的元素接口end()
作为闭合元素并返回html代码的方法
元素内添加子元素内容时,才会正确的缩进
phtml中继承了元素对象,生成的代码是不带换行的;
单独继承了元素接口的end()方法,会自带换行!
换行管理
- 为了方便合理的换行,建议代码解析器返回数组,最终再end()方法中添加换行
元素集合
元素集合代表一组相同标签,不同属性的管理集合,不用每次单独创建元素实例对象,为了更快的效率!
- 不按照书写顺序生成代码
- 会按照合理的结构顺序生成代码
- 不再生成前置有后置换行符,
- 即
a, b, c
(这里逗号代表换行符)
- 即
- 元素集合内,采用代码写入器的方式来收集代码
- 方便统一添加换行符
缩进与换行
-
新增元素缩进级别特性
-
元素嵌套特性内置了元素缩进特性!
-
元素集合内生成
a, b, c
间隔换行符(逗号代表换行符) -
元素父级标签
a , 元素集合 , c
(逗号代表换行符,ac为父级的开始与结束标签,需手动添加换行符) -
缩进规则
- 在收集子元素或内容是,不要直接应用缩进级别
- 因为当一个元素添加到另外一个元素时,无法正确应用到缩进级别
- 在end();再统一添加缩进级别,可防止缩进级别的bug
特殊
addSubContent(string, bool)
:添加子内容,会自动前缀缩进,通过设置第二个参数为false将不自动前缀addSubElement(Element)
:添加子元素,会自动设置元素的缩进级别!- 元素对象再生成代码时应用缩进级别
- 元素收集器,需要手动前缀缩进级别
head元素
虽然想尝试将标签元素独立,但是head内需要添加很多内容,将子标签功能代理到该元素内,使用起来回更方便!
- base 标签
- meta 标签
- link 标签
- script标签 - 仅限引入类型
- 单个style标签 - 用于页面内部样式的编写
js与css
-
引入css文件
- 可以在
head()->css()
引入外部样式 - 其它位置,通过手动添加css代码即可,或通过
Css::linkCSS('style.css'
)`生成代码
- 可以在
-
添加网页内嵌style样式
- head中管理了一个style标签,用于定义页面内嵌样式
- 手动的添加代码到元素内容,例如
add()
-
引入js文件
- 可以在
head()->js()
引入外部脚本 - 可以在body()->js() 引入的脚本标签,会始终保持在最后
- 手动添加代码到元素内容,例如
add()
- 可以在
-
添加页面内嵌script脚本
- body中管理了一个script标签,用于添加页面脚本,它会在引入js代码后面
- 其它情况,手动添加代码在任意位置
后续开发
-
元素继承
Element
类- 设置
protected $name = 'tag_name'
标签名称 - 添加
public function <属性名>($value) { $this->attr('属性名', $value);}
方法来添加元素的属性 - 注意保持,一个元素类代表一个html标签
- 设置
-
元素收集类
- 当一个标签需要重复出现多次,就可确定需要进行收集,例如
div, css
等 - 命名空间需要存放在
gather
目录下! - 就算需要收集,也要为其创建单元素类!
- 当一个标签需要重复出现多次,就可确定需要进行收集,例如
-
元素类型
- 非闭合元素
- 普通标签元素
- 仅可设置文本内容
- 可嵌套元素
- 可像内部添加元素与文本
注意:
end()
之前不要确定仍和信息,这样可以不按照书写顺序,不会造成后添加的内容未生效,也可确保正确的缩进级别,
所有的换行也都将在
end()
中添加,a, b, c
父级容器(a,b,c),(a,b,c),(a,b,c)
不会多余换行
- 嵌套元素,需要修改代码结构,应该在
getCode()
中进行操作! - 元素添加子特殊内容格式,方法命名格式
add___()