lukaszmakuch/table-renderer

允许将树结构渲染为表格(例如 HTML)。

v0.5 2016-04-24 14:11 UTC

This package is not auto-updated.

Last update: 2024-09-18 19:06:27 UTC


README

travis

表格渲染器

允许将树结构渲染为表格。

HTML 示例

alt text 点击图片查看更多示例。

元素

每个树的主要有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