symedit/widget-bundle

该软件包最新版本(v0.11)没有可用的许可信息。

提供可重用的模板小部件

安装: 9

依赖项: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 0

类型:symfony-bundle

v0.11 2015-11-06 18:31 UTC

This package is auto-updated.

Last update: 2024-09-24 09:11:20 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,则可以缓存页面的其余部分,除了小部件。