taeluf/phtml

0.1.0 2021-02-27 13:08 UTC

This package is auto-updated.

Last update: 2024-09-09 01:15:13 UTC


README

A DOMDocument 扩展,易于使用,允许 PHP 代码,并为处理文档提供了一些额外的 API。

状态:稳定,测试通过

我不期望现有的功能会中断。我不知道有任何重大错误,但如果您发现了,请创建一个问题,我会尝试修复它。我不知道如果您在 XML 上使用它会发生什么。

安装

  • composer require taeluf/phtml 0.1.* OR {"require": {"taeluf/phtml": "0.1.*"}}
    • 开发版本是 v0.1.x-dev

文档

  • 使用 $doc = new \Taeluf\PHTML($htmlAndPHPSource) 构造,而不是使用 loadHtml()
  • 允许文档中的任何地方使用 PHP
    • 使用 $doc->output(false); 来移除 PHP 代码
  • echo $doc 将显示您的文档。
    • $doc->output(true) 内部调用(true 从占位符中恢复您的 PHP 代码)
  • 调用 $doc->xpath('//tagname[@attributename="value"]', $refNode=null) 来使用 xpath 查询
    • 返回一个节点数组,而不是节点列表
    • $refNode 可以是 null,从文档的根开始搜索,或者是一个文档内的节点,用于在它下面搜索
  • 它是一个 DOMDocument,所以所有函数都可以在 PHP 站点上找到文档
  • $doc->childNodes[0] 是 pHtml 添加的根节点。
    • 您的 HTML 中声明的第一个节点位于 $doc->childNodes[0]->childNodes[0];

节点

  • 调用 $node->attributes() 来获取所有 HTML 属性的数组
  • $node->doc 返回 DOMDocument 实例
  • $node->innerHTML = "whatever"$var = $node->innerHTML 都有效
  • $inputNode->form 返回父表单节点,如果存在的话
  • $node->attribute 返回命名属性
  • $node->attribute = "funny" 将命名属性设置为值
  • unset($node->attribute) 移除属性
  • echo $node 输出外部 HTML
    • 但这不会恢复 PHP。占位符仍然存在
    • 调用 $doc->fillWithPHP("".$node); 来获取包含 PHP 的节点
  • $formNode->addHiddenInput($name,$value) 将执行...
  • $node->boolAttribute('attributeName'); - 当前只是调用 $node->hasAttribute($attrName),但我有其他的计划。不过,那些计划并不符合标准。

编译器

此库不使用编译器。我在另一个库中使用它。我使用它以精细的方式修改 HTML 文档中的 PHP。我不知道这是否会成为 PHTML 的一部分。它使用 PHP 解析器,并提供了一些关于 PHP 的便捷功能,而不使用 DOMDocument

  • 将 PHP + HTML 代码转换为包含占位符的 HTML 代码
  • 输出到文件
  • 在占位符前后或完整代码块前后添加代码

额外功能

  • 调用 $html = $doc->phpPlaceholder('<?php echo "A block of PHP code>?>');
    • 如果只是 PHP 代码,则返回一个字母数字字符串,或者包含占位符的修改后的 HTML
    • 占位符存储在 PHTMLDoc 中,因此您可以添加您的占位代码到文档中,并在输出文档时将其恢复。
    • 稍后调用 $doc->fillWithPHP($html) 来恢复 PHP。
    • 您还可以传递更大的HTML代码块,然后使用fillWithPHP将其恢复到原来的样子。
    • 此功能用于内部使用

奇怪的东西/警告

  • 在创建DOMDocument之前,<!DOCTYPE><html><head>标签被转换为<tlfphtml-doctype><tlfphtml-html><tlfphtml-head>。在__toString()期间,它们会被转换回正确的DOCTYPE!/html/head标签。

xpath相关内容

  • 获取节点的所有子节点:$phtml->xpath('descendant::tagname[@attrName="attrval"]', $contextNode) <- descendant::部分需要保持不变。其余的查询由您自己决定。
  • 要查找doctype、html或head,分别使用//tlfphtml-doctype//tlfphtml-html//tlfphtml-head

待办事项

  • 安装说明
  • 对贡献者的说明
  • 文档网站 & 更好的文档

实现细节

  • 在添加到PHP内置的DOMDocument之前,将PHP编译成字母数字占位符。然后在文档输出后,用原始的PHP代码替换PHP占位符。
  • 将所有代码包裹在<root></root>中,但不会输出。我认为这是为了使__toString()正确工作...

错误

  • 如果PHP标签(<?php)未在之后关闭(?>),则会导致中断。