digitalstate/platform-widget-bundle

DigitalState Widget Bundle

安装: 155

依赖项: 6

建议者: 0

安全性: 0

星标: 0

关注者: 4

分支: 0

类型:symfony-bundle

0.3.0 2017-02-21 00:36 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:31:29 UTC


README

Widget包为开发人员提供了一种在用户界面中定义小部件的方法。

Code Climate Test Coverage

目录

Widget实体

小部件由一个标题和要在特定位置显示在模板中的内容组成。本质上,它允许开发人员在不直接修改模板文件的情况下自定义模板。小部件类似于ORO占位符,具有两个额外功能:添加标题和上下文过滤器的能力。

注意:最终,如果可能,我们将合并小部件的概念到ORO占位符中,并添加我们的额外功能。

创建小部件

小部件可以在任何包中创建。它们与Symfony中的任何其他服务一样定义,使用服务容器。为了使系统将其识别为小部件,开发人员需要将服务标记为ds.widget。最后,开发人员需要在模板文件中定义小部件应显示的位置。

小部件类 src/Gov/Bundle/BlogBundle/Widget/LatestPostsWidget.php

<?php

namespace Gov\Bundle\BlogBundle\Widget;

use Ds\Bundle\WidgetBundle\Widget\Widget;

class LatestPostsWidget extends Widget
{
    public function getTitle()
    {
        return 'Latest Posts';
    }

    public function getContent(array $data = [])
    {
        return '<ul><li><a href="">Post 1</a></li><li><a href="">Post 2</a></li></ul>';
    }
}

小部件服务 src/Acme/Bundle/TestBundle/Resources/config/services.yml

services:
    gov.blog.widget.latest_posts:
        parent: ds.widget.widget.abstract
        class: Gov\Bundle\BlogBundle\Widget\LatestPostsWidget
        tags:
            - { name: ds.widget, position: aside }

模板位置:

<html>
    <body>
        <aside>
            {% for widget in ds_widgets({ position: 'aside' }) %}
                <h3>{{ widget.title }}</h3>
                {{ widget.content|raw }}
            {% endfor %}
        </aside>
    </body>
</html>

上下文过滤器

上下文过滤器是一个可选参数,允许开发人员定义小部件何时应该渲染。

让我们通过一个真实世界的例子来解释这个概念

DigitalState-Platform通过DsServiceBundle引入了政府服务的概念。该包的核心是创建、编辑和删除通用服务的基本操作。编辑操作使用小部件概念来显示通用服务的核心表单字段。

DigitalState-Platform还通过DsServiceBpmBundle引入了BPM服务的概念。这个包在DsServiceBundle之上进行嫁接,为业务用户创建基于BPM的服务提供额外的BPM相关功能。BPM服务与通用服务相同,具有额外的字段来映射BPM流程定义ID和其他BPM特定配置。DsServiceBpmBundle定义了一个额外的用于额外表单字段的小部件,并将小部件的上下文标记为bpm,这意味着这个小部件仅应在BPM的特定上下文中显示。

定义上下文的模板位置:

<html>
    <body>
        <main>
            <form>
                {% for widget in ds_widgets({ position: 'main', context: 'bpm' }) %}
                    <h3>{{ widget.title }}</h3>
                    {{ widget.content|raw }}
                {% endfor %}
            </form>
        </main>
    </body>
</html>

待办事项

引入自定义twig标签用于小部件位置。

示例 1

{% position *position_name* with { variable: value } %}

示例 2

{% position *position_name* %}
    {{ widget.title }}
    {{ widget.content|raw }}
{% endposition %}

允许将小部件定义为模板或回调,而不是类。