qpfsoft/phtml

QPF Htmc Upgraded version

v1.0.1 2019-06-14 00:54 UTC

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___()