digitalstate / platform-widget-bundle
DigitalState Widget Bundle
Requires
- php: >=5.6
- oro/platform: 2.0.*
- oro/platform-serialised-fields: 2.0.*
This package is not auto-updated.
Last update: 2024-09-14 19:31:29 UTC
README
Widget包为开发人员提供了一种在用户界面中定义小部件的方法。
目录
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 %}
允许将小部件定义为模板或回调,而不是类。