naucon / htmlbuilder
一个用于PHP生成HTML标记的对象表示的包,无需额外加载domXML或SimpelXML的开销。
Requires
- php: >=5.3.0
- naucon/utility: ~1.0
Requires (Dev)
- phpunit/phpunit: ~4.8
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
类的实例。然后创建一个HtmlElement
或HtmlElementInterface
类的实例。实例通过第一个参数获得标签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标准的常量