naucon/htmlbuilder

一个用于PHP生成HTML标记的对象表示的包,无需额外加载domXML或SimpelXML的开销。

1.0.3 2021-07-15 05:14 UTC

This package is auto-updated.

Last update: 2024-08-29 04:53:09 UTC


README

关于

一个用于PHP生成HTML标记的对象表示的包,无需额外加载domXML或SimpelXML的开销。主要目的是在视图助手中渲染HTML。

特性

  • 锚点
  • 换行
  • 按钮
  • div
  • 字段集
  • 字段集标题
  • 表单
  • 标题
  • 图片
  • 输入
    • 按钮
    • 复选框
    • 文件
    • 隐藏
    • 图片
    • 密码
    • 单选按钮
    • 提交
    • 文本
  • 标签
  • 列表
    • 列表项
    • 无序列表
    • 有序列表
  • 元数据
    • 作者
    • 描述
    • 关键字
    • 机器人
  • 段落
  • 预格式化文本
  • 选择
    • 选项
  • span
  • 表格
    • 表头
    • 表体
    • 表脚
      • 单元格
      • 表头单元格
  • 文本区域
  • 标题

局限性

目前,该库不考虑不同的HTML标准,如HTML4.01、XHTML、HTML5等。同时,一些HTML标记符号缺失。

兼容性

  • PHP5.3

安装

通过composer安装最新版本

composer require naucon/htmlbuilder

使用方法

基础

首先创建一个HtmlBuilder类的实例。然后创建一个HtmlElementHtmlElementInterface类的实例。实例通过第一个参数获得标签h2,第二个参数获得元素的正文内容。

use Naucon\HtmlBuilder\HtmlBuilder;
$htmlBuilder = new HtmlBuilder();

use Naucon\HtmlBuilder\HtmlElement;
$htmlElement = new HtmlElement('h2', 'My Headline');
echo $htmlBuilder->render($htmlElement);

// Output:
// <h2>My Headline</h2>

您可以使用具体的HTML元素,如标题、表单、表格等。在这个例子中,我们创建了一个HtmlHeadline的实例来渲染一个<h2> HTML元素。

use Naucon\HtmlBuilder\HtmlHeadline;
$headline = new HtmlHeadline('My Headline', 2);
echo $htmlBuilder->render($headline);

// Output:
// <h2>My Headline</h2>

内容

HTML元素的内容可以通过构造函数或setContent()方法设置。

$htmlElementObject = new HtmlDiv('foo');
echo $htmlBuilder->render($htmlElementObject);

// Output:
// <div>foo</div>

$htmlElementObject = new HtmlDiv();
$htmlElementObject->setContent('foo');
echo $htmlBuilder->render($htmlElementObject);

// Output:
// <div>foo</div>

HTML元素实例也可以设置为内容。

$htmlElementObject = new HtmlDiv();
$htmlElementObject->setContent(new HtmlHeadline('Main headline', 1));
echo $htmlBuilder->render($htmlElementObject);

// Output:
// <div><h1>Main headline</h1></div>

要添加内容,请使用addContent()方法。

$htmlElementObject = new HtmlDiv('foo');
$htmlElementObject->addContent(new HtmlHeadline('Main headline', 1));
echo $htmlBuilder->render($htmlElementObject);

// Output:
// <div>foo<h1>Main headline</h1></div>

属性

每个HTML元素实例都有以下方法来访问和修改属性:

getAttributes() 获取HTML元素属性(键值对形式)hasAttributes() 检查HTML元素是否有属性 setAttributes() 设置HTML元素属性(键值对形式)getAttribute($key) 返回给定键的HTML元素属性值 hasAttribute($key) 检查HTML元素是否有给定键的属性 setAttribute($key, $value=null) 设置给定键的HTML元素属性值 appendAttribute($key, $value=null, $seperater=null) 添加给定键的HTML元素属性值

示例

$htmlElementObject = new HtmlDiv('foo');
$htmlElementObject->setAttribute('id', 'bar');
echo $htmlBuilder->render($htmlElementObject);

// Output:
// <div id="bar">foo</div>

$htmlElementObject = new HtmlDiv('foo');
$htmlElementObject->setAttribute('class', 'btn');
$htmlElementObject->appendAttribute('class', 'primary', ' ');
echo $htmlBuilder->render($htmlElementObject);

// Output:
// <div class="btn primary">foo</div>

HtmlElementUniversalAbstract的实例,如锚点、换行、按钮、div、字段集、字段集标题、表单、标题、图片、输入、标签、列表、段落、预格式化文本、选择、span、文本区域等,都有以下getter-/setter方法来访问和修改属性:

getId()setId($id)getClass()setClass($class)getStyle()setStyle($style)getTitle()setTitle($title)getOnClick()setOnClick($event)getOnDoubleClick()setOnDoubleClick($event)getOnMouseDown()setOnMouseDown($event)getOnMouseUp()setOnMouseUp($event)getOnMouseOver()setOnMouseOver($event)getOnMouseMove()setOnMouseMove($event)getOnMouseOut()setOnMouseOut($event)getOnKeyPress()setOnKeyPress($event)getOnKeyDown()setOnKeyDown($event)getOnKeyUp()setOnKeyUp($event)

一些HTML元素也有特殊的getter-/setter方法来访问和修改属性。例如,锚点(href、target、name、onblur、onfocus)、按钮(type、name、value、tabindex、disabled、onblur、onfocus)、图片(src、alt、width、height、loading)、元数据(name)、标签(for)、表单(action、method、target、enctype、autocomplete、onreset、onsubmit)、输入(type、name、disabled、readonly、onblur、onchange、onfocus)。

嵌套元素

嵌套HTML元素可以通过addChildElement()方法设置。

use Naucon\HtmlBuilder\HtmlDiv;
$htmlElementObject = new HtmlDiv();
$htmlElementObject->setClass('level1');

$htmlElementChildObject = new HtmlDiv();
$htmlElementChildObject->setClass('level11');
$htmlElementObject->addChildElement($htmlElementChildObject);

$htmlElementChild2Object = new HtmlDiv('Home');
$htmlElementChild2Object->setClass('level111');

$htmlElementChildObject->addChildElement($htmlElementChild2Object);
echo $htmlBuilder->render($htmlElementObject);

// Output:
// <div class="level1">
// <div class="level11">
// <div class="level111">Home</div>
// </div>
// </div>

一些HTML元素在设计上具有嵌套元素,并具有特定的方法来设置选项或项。

例如,选择元素中的选项...

$htmlElementObject = new HtmlSelect('foo');
$htmlElementObject->addOption('Ms.', 'MS');
$htmlElementObject->addOption('Mr.', 'MR', true);
echo $htmlBuilder->render($htmlElementObject);

// Output:
// <select name="foo">
// <option value="MS">Ms.</option>
// <option value="MR" selected="selected">Mr.</option>
// </select>';

...或者有序列表(ol)中的列表项(li)...

$htmlElementObject = new HtmlListOrdered();
$htmlElementObject->addItem('foo');
$htmlElementObject->addItem('Bar', 'bar');
echo $htmlBuilder->render($htmlElementObject);

// Output:
// <ol>
// <li>foo</li>
// <li value="bar">Bar</li>
// </ol>

...或者无序列表(ul)中的列表项(li)...

$htmlElementObject = new HtmlListUnordered();
$htmlElementObject->addItem('foo');
$htmlElementObject->addItem('Bar', 'bar');
echo $htmlBuilder->render($htmlElementObject);

// Output:
// <ul>
// <li>foo</li>
// <li value="bar">Bar</li>
// </ul>

...或者表格。

use Naucon\HtmlBuilder\HtmlTable;

$htmlTable = new HtmlTable();
$htmlTableHeader = $htmlTable->addHeader();
$htmlTableRow = $htmlTableHeader->addRow();
$htmlTableRow->addHeader('fruit')
    ->addHeader('quantity');

$htmlTableBody = $htmlTable->addBody();
$htmlTableRow = $htmlTableBody->addRow();
$htmlTableRow->addData('apple')
    ->addData('3');

$htmlTableRow = $htmlTableBody->addRow();
$htmlTableRow->addData('banana')
    ->addData('4');

$htmlTableRow = $htmlTableBody->addRow();
$htmlTableRow->addData('orange')
    ->addData('2');

$htmlTableFooter = $htmlTable->addFooter();
$htmlTableRow = $htmlTableFooter->addRow();
$htmlTableRow->addData('total')
    ->addData('9');

echo $htmlBuilder->render($htmlTable);

// Output:
// <table>
//   <thead>
//     <tr>
//       <th>fruit</th>
//       <th>quantity</th>
//     </tr>
//   </thead>
//   <tbody>
//     <tr>
//       <td>apple</td>
//       <td>3</td>
//     </tr>
//     <tr>
//       <td>banana</td>
//       <td>4</td>
//     </tr>
//     <tr>
//       <td>orange</td>
//       <td>2</td>
//     </tr>
//   </tbody>
//   <tfoot>
//     <tr>
//       <td>total</td>
//       <td>9</td>
//     </tr>
//   </tfoot>
// </table>

渲染

HTML元素可以通过以下方式渲染:

使用render()可以渲染完整的HTML元素及其内容。

$htmlElementObject = new HtmlDiv(new HtmlHeadline('Main headline', 1));
echo $htmlBuilder->render($htmlElementObject);

// Output:
// <div><h1>Main headline</h1></div>

使用renderContent()仅渲染内容。

$htmlElementObject = new HtmlDiv(new HtmlHeadline('Main headline', 1));
echo $htmlBuilder->renderContent($htmlElementObject);

// Output:
// <h1>Main headline</h1>

使用renderStartTag()仅渲染HTML元素的起始标签。

$htmlElementObject = new HtmlDiv(new HtmlHeadline('Main headline', 1));
echo $htmlBuilder->renderStartTag($htmlElementObject);

// Output:
// <div>

使用renderEndTag()仅渲染HTML元素的结束标签。

$htmlElementObject = new HtmlDiv(new HtmlHeadline('Main headline', 1));
echo $htmlBuilder->renderEndTag($htmlElementObject);

// Output:
// </div>

路线图

  • 用于定义HTML标准的常量