elendev/widget-bundle

提供简单的小部件管理

安装: 488

依赖项: 0

建议者: 0

安全: 0

星标: 4

关注者: 2

分支: 2

开放问题: 1

类型:symfony-bundle

0.4.1 2017-03-13 12:49 UTC

This package is auto-updated.

Last update: 2024-09-09 12:45:58 UTC


README

ElendevWidgetBundle 允许将小部件(独立HTML代码)添加到现有模板中,而不依赖任何其他东西。

安装

ElendevWidgetBundle 通过composer提供。您只需在您的composer.json中添加elendev/widget-bundle即可。

配置

elendev_widget:
	enable_annotations:   true # false : disable annotation support
	scan_services:        true # false : don't check annotations on services
	scan_widget_directory:  true # false : don't scan Widget directory
	widget_directory:     'Widget' # name of the widget directory at bundle's root
	hinclude:
		force: none              	# Force use of hinclude
									# none       : use widgets to load synchronous widget, widgets_async to load them asynchronously
									# enabled    : force widgets method to load asynchronously using hinclude
									# disabled   : force widgets_asynch method to load synchronously

注册新的小部件

小部件是一个返回简单HTML代码的服务方法。您只需给服务方法标记

tags:
        - {name: elendev.widget, tag: your_tagname, method: method_name, priority: optional_integer_priority}

还提供了注解,您可以在widget_directory子目录中注解任何服务方法或类的任何方法。

namespace Acme\DemoBundle\Widget;
use Elendev\WidgetBundle\Annotation\Widget;

class MyTestWidget {
	/**
 	* @Widget(tag="main", priority=99)
 	*/
	public function myYoupiWidget(){
		return "This is a simple widget";
	}
}

小部件的默认值是标签值。widget_directory子目录中的小部件作为服务实例化,并支持ContainerAwareInterface接口(容器会自动注入)。

使用Twig的扩展widget方法

要包含小部件在视图中,只需调用此方法

{{ widgets('your_tagname') }}

可以使用hinclude

{{ widgets_async('your_tagname') }}

请注意:只能传递标量参数给widgets_async方法。要启用hinclude,请参阅symfony的文档:https://symfony.com.cn/doc/current/book/templating.html#asynchronous-content-with-hinclude-js

您可以在项目中添加多个小部件位置,指定它们的tagname

某些小部件位置可以提供参数。您可以在widgets调用中添加所需数量的参数,它们将被传递给小部件。

#services.yml
services:
    my_service:
        class: Some/Class/MyWidgets
            tags:
                - {name: elendev.widget, method: memberDatas, tag: member_profile}
{# Template twig #}
{{ widgets('member_profile', member) }}
//PHP code
class MyWidgets{
    public function memberDatas(Member $member){
        return 'some templates';
    }
}