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];
- 您的 HTML 中声明的第一个节点位于
节点
- 调用
$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)未在之后关闭(?>),则会导致中断。