sebastopolys / ginsenghtml
PHP 的 HTML 构建引擎
Requires
- php: >=7.4
README
提供 PHP 函数,您可以在代码中使用这些函数,以更简单、有效和有组织的方式构建大型且复杂的 HTML 结构。
安装
- 使用以下终端命令使用 composer 进行安装。
composer require sebastopolys/ginsenghtml
- 手动安装
将 ginsenghtml.php
文件保存在您的 PHP 应用程序中的某个位置。
使用
安装后,在类的构造函数中实例化 ginsenghtml
类
<?php
namespace MyNamespace;
use GinsengHtml\ginsenghtml;
class myclass
{
public function __construct(){
new ginsenghtml();
}
}
注意
ginsenghtml()
是一个静态类,因此只需在第一个加载的模板文件中实例化一次。
由于函数用于构建 HTML 元素,因此需要调用 HTML 函数。
<?php
namespace MyNamespace;
use GinsengHtml\ginsenghtml;
use function GinsengHtml\{p,h1,h2,span,a};
在每个模板文件中添加必要的 HTML 函数。
如果您将 ginsenghtml 类的命名空间更改为与您的项目命名空间匹配,则不需要添加 use function
声明。
之后,HTML 函数将在您的类的后续方法中可用
<?php
namespace MyNamespace;
use GinsengHtml\ginsenghtml;
use function GinsengHtml\{h2,div};
class MyTemplateFileClass
{
public function print_some_html(){
return div(['id'=>'head_div','style'=>'background-color:yellow;','content'=>
h2('CONTENT HERE!')]);
}
}
HTML 函数
函数名称引用要在 HTML 函数输出的 HTML 标记上使用的 HTML 标签。例如
p( 'A paragraph' );
将输出以下 HTML
<p>A paragraph<p>
使用 HTML 函数
在上面的示例中,通过传递一个字符串到函数中构建了一个段落
您还可以向函数传递一个数组并添加 HTML 元素的属性
$array = [
'id'=>'12',
'class'=>'theclass class1'
];
print_r( span( $array ) );
这将打印出
<span id="12" class="theclass class1">
其他函数: close()
注意,在上面的示例中,HTML 内部没有内容,也没有关闭 HTML 标签(</span>
)
提供额外的 close()
函数是为了对 HTML 元素的关闭和打开有更多的控制
使用此函数关闭任何打开的 HTML 标签
close( 'p' );
这将输出一个自闭合的段落元素
print_r(
p( $array )
. 'A paragraph'
. close( 'p') );
结果
<p id="12" class="theclass class1">
A paragraph
</p>
其他函数: content()
content()
函数获取在给定的数组下引用的 'content'
索引的内容值。然后它使用此值在 HTML 元素中插入它
此函数接受一个非关联数组,由一个或多个关联数组组成
当调用内容函数时,它将包含内容并使用相应的关闭标签关闭 HTML 元素
内容函数的用法;
$array2 = [
[
'id'=>'the_id',
'tag'=>'p'
'content'=>'The paragraph'
]
];
print_r( content( $array2 ) );
将输出
<p id="the_id">The paragraph</p>
注意
当在模板文件上使用 content()
函数时,'content' 和 'tag' 索引是必需的
打开和关闭的 HTML 元素
在某些情况下,HTML 函数可以返回自闭合 HTML 标签或不返回
不带关闭标签
- 当使用不包含 'content' 索引的数组时,任何 HTML 函数
div(['id'=>'div_id']);
- 如果传递了一个布尔值给函数
div( FALSE );
带关闭标签
- 当传递一个字符串给任何函数,而不是数组时
label( 'A label string' );
- 如果传递给函数的参数数组包含 'content' 索引
$array3 = [
'class'=>'label',
'content'=>'The content here'
];
label( $array3 );
- 如果传递了一个布尔值
div( TRUE );
请注意,如果任何 HTML 元素没有关闭标签打印出来,浏览器将自动将其添加到 <body>
的末尾
使用单个 HTML 函数打印多个元素
可以使用单个 HTML 函数输出多个 HTML 标签。
为了实现这一点,传递给函数的数组必须是无索引的
array(3,5,7,10);
因此,您可以构建数组如下
$array4 = [
'id'=>['id3','id5','id7','id10'],
'class'=>'theclass',
'content'=>[
'The content of the 3',
'Text of content 5',
'Another text 7',
'Some more content 10'
],
'custom'=>[3,5,7,10]
];
将此数组传递给函数将打印出数组上表示的元素数量,即第一个数组的计数。
在上面的示例数组中,这将是 "id" 值的计数,即 4
print_r( div( $array4 ) );
结果
<div id="id3" class="theclass" custom="3">The content of the 3</div>
<div id="id5" class="theclass" custom="5">Text of content 5<div>
<div id="id7" class="theclass" custom="7">Another text 7</div>
<div id="id10" class="theclass" custom="10">Some more content 10</div>
支持的 HTML 标签(函数)
请随意编辑 ginsenghtml.php
文件并添加任何缺失的 HTML 标签。
键和概念
函数和数组
解析器的关键在于理解您可以通过使用函数在 PHP 模板文件中构建 HTML 结构,或者构建由控制器提供的函数的数据数组。
例如。
$array5 = [
'id'=>'dataid',
'class'=>'theclass'
];
$args = [
'class'=>'par'
];
div( $array5 )
. div( $args )
. p( FALSE )
. 'text here'
. close('p')
. close('div')
. close('div');
和
$array6 = [
'id'=>'dataid',
'class'=>'theclass',
'content'=>[
[
'tag'=>'div',
'class'=>'par',
'content'=>[
[
'tag'=>'p',
'content'=>'text here'
]
]
]
]
];
div( $array6 );
都将输出相同的 HTML
<div id="dataid" class="theclass">
<div class="par">
<p>text here</p>
</div>
</div>
嵌套函数
可以在函数内部嵌套函数。
div( div( p('A nested string' ) ) );
将输出
<div>
<div>
<p>
A nested string
</p>
</div>
</div>
嵌套参数数组
需要同时提供 'tag' 和 'content' 索引,以便执行 content()
函数的递归。
在您的数组中使用 'tag' 和 'content' 索引来创建和嵌套 HTML 元素。
$array6;
传递给函数的参数数组
您可以动态构建传递给函数的数组,但请注意,这可能会损害页面加载速度。尽量使参数数组尽可能小。
变更日志
- 1.0.0
- 1.1.0
初始发布
- 1.0.0
最新版本
- 1.1.0
作者
sebastopolys