symedit / widget-bundle
该软件包最新版本(v0.11)没有可用的许可信息。
提供可重用的模板小部件
v0.11
2015-11-06 18:31 UTC
README
配置
symedit_widget: driver: doctrine/orm # Fragment stategy to use fragment: strategy: inline classes: widget: model: SymEdit\Bundle\WidgetBundle\Model\Widget controller: SymEdit\Bundle\WidgetBundle\Controller\WidgetController respository: ~ form: SymEdit\Bundle\WidgetBundle\Form\Type\WidgetType widget_area: model: SymEdit\Bundle\WidgetBundle\Model\WidgetArea repository: ~ form: SymEdit\Bundle\WidgetBundle\Form\Type\WidgetAreaType
创建策略
构建策略类
namespace SymEdit\Bundle\WidgetBundle\Widget\Strategy; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; class MyStrategy extends AbstractWidgetStrategy { public function execute(WidgetInterface $widget) { return $this->render($widget, array( 'number' => $widget->getOption('number'), )); } public function getDefaultOptions(OptionsResolver $resolver) { $resolver->setDefaults(array( 'template' => 'MyBundle:Widget:mywidget.html.twig', 'number' => 5, )); } /** * Return array of options to pass to Response::setCache, * if it should not be cached return array('private' => true) */ public function getCacheOptions(WidgetInterface $widget) { return array( 'public' => true, 'last_modified' => $widget->getUpdatedAt(), ); } public function buildForm(FormBuilderInterface $builder) { $builder ->add('number', 'integer') ; } public function getName() { return 'number'; } public function getDescription() { return 'widget.number'; // Translated } }
将其添加到您的服务中
<service id="mywidget.number" class="%mywidget.number.class%"> <tag name="symedit_widget.widget_strategy" alias="number" /> </service>
渲染小部件
这会渲染一个小部件区域
{{ symedit_widget_area_render('footer') }}
在您的小部件区域模板中,您应该使用
{% for widget in widgets %} {{ symedit_widget_render(widget) }} {% endfor %}
这是一个片段渲染器的透明通道,因此如果您开启 ESI,则可以缓存页面的其余部分,除了小部件。