lukaszmakuch / table-renderer
允许将树结构渲染为表格(例如 HTML)。
v0.5
2016-04-24 14:11 UTC
Requires
- lukaszmakuch/class-based-registry: ^0.0.2
- lukaszmakuch/math: ^0.1.0
- lukaszmakuch/object-attribute-container: ^0.1.0
- lukaszmakuch/property-setter: ^0.2.0
Requires (Dev)
- phpdocumentor/phpdocumentor: 2.*
- phpunit/phpunit: 4.7.*
This package is not auto-updated.
Last update: 2024-09-18 19:06:27 UTC
README
表格渲染器
允许将树结构渲染为表格。
HTML 示例
树
元素
每个树的主要有3个元素
原子值
它们是不可分割的。
TextValue
它简单地保存一些文本,这些文本将被渲染在某个单元格中。
use lukaszmakuch\TableRenderer\TextValue; $flowers = new TextValue("roses");
容器
它们包含其他元素。
HorizontalContainer
其元素是叠放在彼此之上的。
use lukaszmakuch\TableRenderer\HorizontalContainer; use lukaszmakuch\TableRenderer\TextValue; $column = (new HorizontalContainer()) ->add(new TextValue("top")) ->add(new TextValue("bottom"));
HorizontalContainer
其元素是并排的。
use lukaszmakuch\TableRenderer\VerticalContainer; use lukaszmakuch\TableRenderer\TextValue; $row = (new VerticalContainer()) ->add(new TextValue("left")) ->add(new TextValue("right"));
构建树
可以构建任何复杂性的组合。
use lukaszmakuch\TableRenderer\HorizontalContainer; use lukaszmakuch\TableRenderer\VerticalContainer; use lukaszmakuch\TableRenderer\TextValue; $table = (new HorizontalContainer()) ->add((new VerticalContainer()) ->add(new TextValue("top left")) ->add(new TextValue("top middle")) ->add(new TextValue("top right")) ) ->add((new VerticalContainer()) ->add(new TextValue("bottom left")) ->add(new TextValue("bottom right")) );
渲染器
允许根据树结构渲染表格。
HTMLRenderer
渲染 HTML 代码。
获取渲染器
use lukaszmakuch\TableRenderer\HTMLRenderer\HTMLRendererBuilder; $builder = new HTMLRendererBuilder(); $htmlRenderer = $builder->buildRenderer();
基本用法
use lukaszmakuch\TableRenderer\VerticalContainer; use lukaszmakuch\TableRenderer\TextValue; use lukaszmakuch\TableRenderer\HTMLRenderer\HTMLRenderer; $tree = (new VerticalContainer()) ->add(new TextValue("left")) ->add(new TextValue("right")); /* @var $renderer HTMLRenderer */ echo $renderer->renderHTMLBasedOn($tree);
添加 HTML 属性
可以将 HTML 属性分配给原子值以及整个表格。使用 ObjectAttributeContainer 来实现这一点。
构建支持额外属性的渲染器
首先,需要使用某些属性容器构建渲染器。
use lukaszmakuch\TableRenderer\HTMLRenderer\HTMLRendererBuilder; use lukaszmakuch\ObjectAttributeContainer\Impl\ObjectAttributeContainerImpl; //source of attributes $attrs = new ObjectAttributeContainerImpl(); //building with the attribute container $builder = new HTMLRendererBuilder(); $builder->setAttributeContainer($attrs); $htmlRenderer = $builder->buildRenderer();
向树添加属性
use lukaszmakuch\ObjectAttributeContainer\ObjectAttributeContainer; use lukaszmakuch\TableRenderer\VerticalContainer; use lukaszmakuch\TableRenderer\TextValue; lukaszmakuch\TableRenderer\HTMLRenderer\HTMLRenderer; /* @var $attrs ObjectAttributeContainer */ //table with border 1 $tree = $attrs->addObjAttrs( (new VerticalContainer()) //cell with no extra style ->add(new TextValue("left")) //cell with red text ->add($attrs->addObjAttrs( new TextValue("right"), ["attrs" => ["style" => "color: #f00"]] )), ["attrs" => ["border" => 1]] ); /* @var $renderer HTMLRenderer */ echo $renderer->renderHTMLBasedOn($tree);
支持自定义原子值
此渲染器支持自定义原子值。自定义值应扩展 AtomicCellValue 并由 AtomicValueRenderer 的实例支持。然后可以注册新的原子值渲染器,如下所示
use lukaszmakuch\TableRenderer\HTMLRenderer\HTMLRendererBuilder; /* @var @builder HTMLRendererBuilder */ $builder->addAtomicValueRenderer( NewAtomicType::class, new NewAtomicTypeRenderer() );
ScalarRenderer
它将表格模型渲染为标量值或标量值的数组(或其他数组)。
获取渲染器
use lukaszmakuch\TableRenderer\ScalarRenderer\ScalarRendererBuilder; $renderer = (new ScalarRendererBuilder())->build();
基本用法
use lukaszmakuch\TableRenderer\VerticalContainer; use lukaszmakuch\TableRenderer\TextValue; use lukaszmakuch\TableRenderer\ScalarRenderer\ScalarRenderer; $tree = (new VerticalContainer()) ->add(new TextValue("first")) ->add(new TextValue("second")); /* @var $renderer ScalarRenderer */ var_dump($renderer->getScalarRepresentationOf($tree)); //[ // 'type' => 'vertical-container', // 'value' => [ // ['type' => 'text', 'value' => 'first'], // ['type' => 'text', 'value' => 'second'] // ] //]
支持自定义元素
此渲染器支持自定义元素。自定义元素应扩展 AtomicCellValue 并由 ScalarRenderer 的实例支持。然后可以注册新的元素渲染器,如下所示
use lukaszmakuch\TableRenderer\ScalarRenderer\ScalarRendererBuilder; /* @var @builder ScalarRendererBuilder */ $builder->addRenderer( NewAtomicType::class, new NewAtomicTypeRenderer() );
示例
查看 示例目录 中的示例
安装
使用 composer 获取最新版本
$ composer require lukaszmakuch/table-renderer