anvii/htmlelement

一个用于在PHP中创建HTML代码的库

1.1.1 2023-04-08 09:18 UTC

This package is auto-updated.

Last update: 2024-09-12 15:08:35 UTC


README

HtmlElement 提供了一种简单高效的方法,用于在PHP中构建HTML代码

如果你想在PHP中交替使用HTML代码,如模块化架构,并且希望程序源代码优雅,HtmlElement 将非常有用。

先决条件

HtmlElement 需要 PHP v7.3 或更高版本

构建HTML

示例代码

use anvii\HtmlElement\HtmlElement;

// Create an element
$div = new HtmlElement('div', ['class'=>'class1 class2'], 'Hello, World!');

// Build sample menu
$menu = HtmlElement::ul(['id'=>'sample-menu', 'class'=>'menu'], [
    HtmlElement::li(['class'=>'active'],
        HtmlElement::a(['href'=>'...'], 'New')
    ),
    HtmlElement::li(['class'=>''],
        HtmlElement::a(['href'=>'...'], 'Open')
    ),
    HtmlElement::li(['class'=>'disabled'],
        HtmlElement::a(['href'=>'...'], 'Save')
    )
]);

// Add one more element(s)
$menu->add([
    HtmlElement::hr(),
    HtmlElement::li(
        HtmlElement::a(['href'=>'...', '_if'=>$hasHelp], 'Help')
    )
]);

// Query elements like in jQuery
$menu->query('a')->addClass('awesome');
$menu->query('li.disabled a')->removeClass('awesome');

// Send menu to browser
echo $menu;

查询元素

该库具有类似jQuery的简单查询引擎。它允许动态地通过模块交替HTML代码。

$form = $html->first('form#login');
$form->query('input[type="submit"]')->addClass('nice-button');

HtmlQuery 类也支持回调函数,但由于安全原因,禁止使用函数名字符串。

$form->query(function($e) {
    return ($e instanceof \my\Button::class);
});

注意,HtmlElement中的查询非常受限。它只支持一个类和一个属性。

特殊属性

以下划线 '_' 开头的HTML属性是特殊的。它们不会被渲染,但用于构建文档。

echo HtmlElement::a(['href'=>'/user/profile', '_if'=>isUserRegistered()], 'Profile');

以下特殊属性由 HtmlElement 使用

  • _if - 条件元素。该属性的值可以是布尔值或函数。
  • _raw - 不编码元素的内容。
  • _weight - 用于定义元素的顺序。请参阅下面的 '排序元素'。
  • _hideempty - 如果元素的内容为空,则不显示元素。

排序元素

你可以通过使用特殊属性 '_weight' 来对元素进行排序。例如,你可以从模块动态构建菜单。

$userMenu->add([
    HtmlElement::a(['href'=>'/user/profile', '_weight'=>10], 'Profile'),
    HtmlElement::a(['href'=>'/user/password', '_weight'=>12], 'Change Password'),
    HtmlElement::a(['href'=>'/user/Logout', '_weight'=>100], 'Logout'),
]);

// From module:
HtmlElement::first('#userMenu')->add(
    HtmlElement::a(['href'=>'gallery', 'weight'=>30])
);