php的完美视图构建器,内置控制语句。

1.0.0-beta 2020-07-31 20:29 UTC

This package is auto-updated.

Last update: 2024-09-29 06:02:44 UTC


README

最灵活的php HTML视图构建器之一。它使用与HTML标签和属性相同的命名约定在PHP文件中构建视图。

安装

这是一个composer包。因此,请将此包添加到您的php/framework项目的composer.json中,或运行以下命令:

composer require amsrafid/tagger

基本使用

非常容易使用。属性和标签名称与普通HTML相同。最值得注意的是,sudo或短名称也作为正常HTML属性工作。

\Html\Tag::{Tag name}([
	'i/id' => 'id-name',
	'c/cls/class' => 'class-name',
	'd-./_./*./data-.' => 'data-value',
	'b/body/txt/text' => string|array|number|bool|function(){} /* tag body*/
	...
]);

数组键指属性名称,键值指属性值。
注意:数据属性也以sudo的方式处理,如[d-name/_name/*name]
在上面的所有情况下,属性名称将是data-name

属性 'body'

属性 body 是标签的嵌套部分。Body可以是五种类型。字符串或数字是基本类型。特殊类型包括:

  • Array 类型
    • 在这里,只允许显示关联数组。在这种情况下,arry key 表示 tag name,而 value 是一个 sequential array,其中每个值是主数组键中命名的每个标签的body。
    • 示例
     use Html\Tag;
    
     Tag::ul(['b' => ['li' => ['one', 'two', 'three']]]);
    • 输出
     <ul>
     	<li>one</li>
     	<li>two</li>
     	<li>three</li>
     </ul>
  • Object 类型
    • 返回要在body中显示的 stringnumberassociative array
    • 主要地,object类型表示一个包含母标签嵌套元素的 function
    • 示例
     Tag::div(function(){
     	Tag::h4("First set:");
     	Tag::hr();
     	Tag::div(['b' => 'Having fun, isn\'t it?']);
     	Tag::div(function(){
     		Tag::span(function(){ return "One"; });
     		Tag::span(2);
    
     		return [
     			'h3' => ['array', 'returned'],
     			'u' => ['test', 'underline'],
     		];
     	});
     });
    • 输出
     <div>
     	<h4>First set:</h4>
     	<hr>
     	<div>Having fun, isn't it?</div>
     	<div>
     		<span>One</span>
     		<span>2</span>
     		<h3>array</h3>
     		<h3>returned</h3>
     		<u>test</u>
     		<u>underline</u>
     	</div>
     </div>
  • Boolean 类型
    • 当body上没有内容显示时,布尔类型工作。但是,标签不是像<img />这样的单标签。在这种情况下,body值应提供为 true
    • 示例
     Tag::script(["s"=>"https://script.js", 'b' => true]);
    • 输出
     <script src="https://script.js"></script>

sudo属性可用

以下列出了 sudo 属性列表。

a 		=	alt,
ac		=	action,
c 		=	class,
cls		=	class,
cont		=	content,
cs 		=	colspan,
d 		=	disabled,
dt 		=	datetime,
f 		=	for,
fa 		=	formaction,
h 		=	href,
i  		=	id,
ln 		=	lang,
m 		=	method,
mx 		=	max,
mn 		=	min,
mxlen		=	maxlength,
mnlen		=	minlength,
mt 		=	muted,
n  		=	name,
p  		=	placeholder,
pt		=	pattern,
r 		=	required,
rs 		=	rowspan,
rw 		=	rows,
s  		=	src,
sc		=	selected,
st		=	style,
t  		=	type,
v 		=	value,
val		=	value

预设功能

Tagger允许预设 attributeswrapper。它减少了在相同标签上使用相同的属性和包装。

相同标签的预设属性

预设功能通过使用 set 方法在常见的属性值上工作。在这里,可以使用 stopSet 方法停止预设,该方法接受 stringarray 的标签名称,或为销毁所有内容留空。

Tag::set([
	'input' => [
		'c/cls/class' => 'form-control mt-2',
		...
	],
	'textarea' => '@input',		/* Same as input tag */
	...
]);

Tag::input(['type' => 'text']);
Tag::input(['type' => 'number']);
Tag::textarea(['b' => 'Text area', 'c' => 'text-danger']);

Tag::stopSet();

输出

<input type = "text" class = "form-control mt-2" />
<input type = "number" class = "form-control mt-2" />
<textarea class = "text-danger form-control mt-2">Text area</textarea>

相同标签的预设包装器

set 包装功能类似,使用 wrap 方法在常见的包装器值上工作。在这里,也可以使用 stopWrap 方法停止标签包装,该方法接受 stringarray 的标签名称,或为销毁所有内容留空。

Tag::wrap([
	'input' => ['div', ['c' => 'col-md-6', ...]],
	'textarea' => 'div',
	'select' => '@input'	/* Same as input tag */
	...
]);

Tag::input(['t' => 'text']);
Tag::textarea();
Tag::select(['b' => ['option' => ['one', 'two']]]);

Tag::stopWrap(['textarea']);	/* OR Tag::stopWrap('textarea'); */
Tag::textarea("Text area value");

输出

<div class = "col-md-6"><input type = "text" /></div>
<div><textarea></textarea></div>
<div class = "col-md-6">
	<select>
		<option>one</option>
		<option>two</option>
	</select>
</div>
<textarea>Text area value</textarea>

特殊用途

标签

可以使用 label 属性在任意标签之前自动添加 <label> 标签。如果标签包含的标签具有预设的包装器,则在此标签之前将创建一个标签标签。

Tag::wrap([
	'input' => ['div', ['c' => 'col-md-6 mb-2']]
]);

Tag::input(['t' => 'text', 'i' => 'name', 'label' => 'Name *', 'p' => "Name"]);
Tag::input(['t' => 'number', 'i' => 'age', 'label' => 'Age *', 'p' => "Age"]);

输出

<div class="col-md-6 mb-2">
	<label for="name">Name *</label>
	<input id="name" type="text" placeholder = "Name">
</div>
<div class="col-md-6 mb-2">
	<label for="age">Age *</label>
	<input id="age" type="number" placeholder = "Age">
</div>

表格

在这里,可以动态生成HTML表格。其中,body 可以传递一个数组,其中 keytag name,而 key value 是标签体的常规 array

$arrs = [
	['id' => 24, 'name' => 'HTML'],
	['id' => 33, 'name' => 'CSS'],
	['id' => 49, 'name' => 'JAVASCRIP']
];
	
Tag::table(['border' => '1', 'b' => function() use($arrs) {
	Tag::tr(['b' => ['th' => ['#', 'ID', 'Name']]]);
	Tag::tr(['foreach' => $arrs, 'offset' => 'i'
		'b' => ['td' => ['@i', '@id', '@name']]
	]);
}]);

输出

<table border = "1">
	<tr><th>#</th><th>ID</th><th>Name</th></tr>
	<tr><td>1</td><td>24</td><td>HTML</td></tr>
	<tr><td>2</td><td>33</td><td>CSS</td></tr>
	<tr><td>3</td><td>49</td><td>JAVASCRIP</td></tr>
</table>

控制语句

控制语句在这里的作用类似于普通的 foreach/if/elseif/else。控制语句用作属性。

foreach

类似于PHP中的正常foreach循环。在这里,offsetstart分别用于循环数组/对象的偏移量,并从哪个值开始计数。

Tag::ul(['if' => $arrs, 'b' => function() use($arrs) {
	Tag::li([
		'foreach' => $arrs, 'offset' => 'i',
		'if' => '@id > 24',
		'v' => '@id', 'b' => '@i. @name'
	]);
}]);

输出

<ul>
	<li value="33">1. CSS</li>
	<li value="49">2. JAVASCRIP</li>
</ul>

@id -> @{数组键名}。
可以捕捉任何属性值。

特殊属性:以下属性只有在存在foreach属性时才有用。

  • 'if' => 字符串

    • 正常的if条件。例如:(@i > 2 && (@age == 50 || @name == 'HTML'))
    • 在这里,@i是偏移量,@name是数组键。
    • 注意:@name的值是字符串类型。所以,比较字符串值必须用双引号括起来。
  • 'then' => 字符串|数组

    • 'if'条件有效时,此属性才会起作用。
    • 字符串类型的值被视为属性值true。多个字符串可以视为相同的属性,用逗号分号空格分隔, OR ; OR . OR \s+
    • 示例
      • 'then' => 'selected disabled'
      • 'then' => ['selected' => true, 'disabled' => true]
    • 这里,数组包含属性集,将在有效的if条件后更改。
  • 'offset' => 字符串

    • 包含循环数组偏移变量名
    • 在逻辑表达式中,从0开始,根据start属性决定可见范围。
  • 'start' => 整数

    • 表示从哪里开始偏移。默认的起始值是1

if

类似于PHP的普通if语句。
注意:foreach特殊属性部分,允许以相同的方式使用属性then。但在这里,只有数组类型值起作用。

$var = 10;
Tag::span(['if' => $var > 10, 'b' => 'Var is greater than 10']);

普通用法

if($var > 10)
	echo "<span>Var is greater than 10</span>

elseif

类似于PHP的普通elseif语句。这里,此条件只有在前面存在if语句时才会起作用。
注意:允许以与if语句相同的方式使用属性then

Tag::span(['elseif' => $var > 5, 'b' => 'Var is greater than 5']);

普通用法

if ($var > 10)
	...
else if ($var > 5)
	echo "<span>Var is greater than 5</span>

else

类似于PHP的普通else语句。值应该给出为true。这里,此条件只有在前面存在if或elseif语句时才会起作用。
注意:这里不允许使用属性then

Tag::span(['else' => true, 'b' => 'Var is less than 5']);

普通用法

if ($var > 10)
	...
else
	echo "<span>Var is less than 5</span>

作者

最初开发 - 萨丹·拉菲德

许可证

标签器是开源软件,根据MIT许可证授权。