webfiori / ui
一个提供创建HTML文档基本实用工具的库。
Requires
- php: >=7.0
- webfiori/collections: 1.1.x
Requires (Dev)
- phpunit/phpunit: ^5
- dev-master
- v2.6.3
- v2.6.2
- v2.6.1
- v2.5.6
- v2.5.5
- v2.5.4
- v2.5.3
- v2.5.2
- v2.5.1
- v2.5.0
- v2.4.0
- v2.3.5
- v2.3.4
- v2.3.3
- v2.3.2
- v2.3.1
- v2.3.0
- v2.2.3
- v2.2.2
- v2.2.1
- v2.2.0
- v2.1.0
- v2.0.6
- v2.0.5
- v2.0.4
- v2.0.3
- v2.0.2
- v2.0.1
- v2.0.0
- v1.9.7
- v1.9.6
- v1.9.5
- v1.9.4
- v1.9.3
- v1.9.2
- v1.9.1
- v1.9.0
- v1.8.9
- v1.8.8
- v1.8.7
- v1.8.6
- v1.8.5
- v1.8.4
- v1.8.3
- v1.8.2
- v1.8.1
- dev-dev
- dev-github-actions
- dev-bug-fix
This package is auto-updated.
Last update: 2024-09-08 22:17:32 UTC
README
一组类,除了创建网页的DOM外,还提供创建基本网页创建实用工具。
内容
支持的PHP版本
特性
- 能够以面向对象的方法创建自定义HTML UI元素。
- 通过PHP实现虚拟DOM。
- 使用PHP构建动态HTML模板。
- 支持渲染XML文档。
使用方法
基本使用
基本用例是拥有一个包含文本的HTML文档的体。类 HTMLDoc
代表HTML文档。简单来说,创建此类的实例并使用它来构建整个HTML文档。该类可以使用以下方式使用
use webfiori\ui\HTMLDoc; //This code will create HTML5 Document, get the <body> node and, add text to it. $doc = new HTMLDoc(); $doc->getBody()->text('Hello World!'); echo $doc;
此代码的输出是HTML 5文档。文档的结构将类似于以下HTML代码
<!DOCTYPE html> <html> <head> <title> Default </title> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> </head> <body itemscope itemtype="http://schema.org/WebPage"> Hello World! </body> </html>
构建更复杂的DOM
所有HTML元素都表示为 HTMLNode
类的实例。开发者可以扩展此类以创建自定义UI组件作为类。库已经预置了一些组件,在下一个代码示例中使用。此外,该类有方法可以利用这些组件并加快将它们添加为任何HTML元素子元素的过程。以下代码显示了创建基本登录表单的代码。
use webfiori\ui\HTMLDoc; //Create new instance of "HTMLDoc". $doc = new HTMLDoc(); // Build a login form. $body = $doc->getBody(); $body->text('Login to System')->hr(); $form = $body->form(['method' => 'post', 'actiion' => 'https://example.com/login']); $form->label('Username:'); $form->br(); $form->input('text', ['placeholder'=>'You can use your email address.', 'style' => 'width:250px']); $form->br(); $form->label('Password:'); $form->br(); $form->input('password', ['placeholder' => 'Type in your password here.', 'style' => 'width:250px']); $form->br(); $form->input('submit', ['value' => 'Login']); echo $doc;
代码的输出将类似于以下图像。
HTML/PHP模板文件
一些开发者不喜欢所有东西都在PHP中。例如,前端开发者喜欢直接使用HTML,因为它的语法熟悉。因此,该库包括使用HTML或PHP文件作为模板的基本支持。如果模板是纯HTML,则使用插槽在文档中设置变量。如果模板是PHP和HTML的混合,则可以将PHP变量传递给模板。
HTML模板
假设我们有一个HTML文件具有以下标记
<!DOCTYPE html> <html> <head> <title>{{page-title}}</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content="{{page-desc}}"> </head> <body> <section> <h1>{{page-title}}</h1> <p> Hello Mr.{{ mr-name }}. This is your visit number {{visit-number}} to our website. </p> </section> </body> </html>
注意,字符串被包围在 {{}}
之间。任何被 {{}}
包围的字符串被称为插槽。要填充任何插槽,必须在渲染时传递其值。该文件将被渲染为 HTMLNode
类的实例。可以使用静态方法 HTMLNode::fromFile(string $templatePath, array $values)
渲染文件。方法的第一参数是模板路径,第二个参数是一个关联数组,包含插槽的值。数组的键是插槽名称,每个索引的值是插槽的值。以下代码显示了如何将此文档加载为具有插槽值的 HTMLNode
类的实例。
$document = HTMLNode::fromFile('my-html-file.html', [ 'page-title' => 'Hello Page', 'page-desc' => 'A page that shows visits numbers.', 'mr-name' => 'Ibrahim Ali', 'visit-number' => 33, ]); echo $document
上述PHP代码的输出将是以下HTML代码。
<!DOCTYPE html> <html> <head> <title>Hello Page</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content="A page that shows visits numbers."> </head> <body> <section> <h1>Hello Page</h1> <p> Hello Mr.Ibrahim Ali. This is your visit number 33 to our website. </p> </section> </body> </html>
PHP模板
使用带有插槽的原始HTML模板文件的缺点是不能有动态PHP代码。为了克服这一点,模板可以写成HTML和PHP的混合。此功能允许在HTML模板中使用所有PHP功能。此外,这也允许开发者在插槽值之外传递PHP变量。
假设我们有一个以下PHP模板,它显示一系列帖子标题
<div> <?php if (count($posts) != 0) {?> <ul> <?php foreach ($posts as $postTitle) {?> <li><?= $postTitle;?></li> <?php } ?> </ul> <?php } else { echo "No posts.\n"; } ?> </div>
该模板使用一个名为$posts
的变量,如所见。在渲染之前,必须将变量的值传递给模板。在这种情况下,方法HTMLNode::fromFile(string $templatePath, array $values)
的第二个参数将是一个关联数组,数组键是变量名,值是变量值。
模板可以按照以下方式加载到HTMLNode
类型的对象中
$posts = [ 'Post 1', 'Post 2', 'Post 3' ]; $node = HTMLNode::fromFile('posts-list.php', [ 'posts' => $posts ])
创建XML文档
除了表示HTML元素之外,类HTMLNode
还可以用来表示XML文档。HTML与XML的区别在于XML对属性名和元素名是大小写敏感的,并且不像HTML有预定义的元素。要创建XML文档,可以使用与创建HTML元素相同的方法使用类HTMLNode
。最后,可以使用方法HTMLNode::toXML()
将元素转换为XML。
$xml = new HTMLNode('saml:Assertion', [ 'xmlns:saml' => "urn:oasis:names:tc:SAML:2.0:assertion", 'xmlns:xs' => "http://www.w3.org/2001/XMLSchema", 'ID' => "_d71a3a8e9fcc45c9e9d248ef7049393fc8f04e5f75", 'Version' => "2.0", 'IssueInstant' => "2004-12-05T09:22:05Z", ]); $xml->addChild('saml:Issuer')->text('https://idp.example.org/SAML2'); echo $xml->toXML(); //Output: /* <?xml version="1.0" encoding="UTF-8"?> <saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xs="http://www.w3.org/2001/XMLSchema" ID="_d71a3a8e9fcc45c9e9d248ef7049393fc8f04e5f75" Version="2.0" IssueInstant="2004-12-05T09:22:05Z"> <saml:Issuer> https://idp.example.org/SAML2 </saml:Issuer> </saml:Assertion> */
许可证
该库采用MIT许可证。