qpfsoft / phtml
QPF Htmc Upgraded version
Requires
- php: >=7.1.0
This package is auto-updated.
Last update: 2024-04-14 12:17:14 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___()