evgeniy-it/widget-bundle

WidgetBundle 类似于 modx 插件,使你的内容管理系统更加强大。

1.0.0 2017-01-18 16:15 UTC

This package is not auto-updated.

Last update: 2024-09-28 20:14:39 UTC


README

Widget bundle 类似于 modx 插件,使你的内容管理系统更加强大。

安装

使用 composer

composer require evgeniy-it/widget-bundle

Widget 将准备就绪并开始工作

入门

通过以下短代码渲染小部件

[[widget_name? &setting=`1` &settingArray=`[1,2,3]` &settingAssocArray=`{'item1':'value1','item2':'value2'}`]] 

小部件也可以嵌套多次

[[widget_name? &nestedSetting=`[[widget_name2? &setting1=`value1` &setting2=`[[widget3]]`]]`]]

解析和渲染使用 twig 小部件过滤器,它将找到所有小部件,解析并处理它们

{{ some_string_var|widget}}

确保小部件语法正确

  • 小部件名称必须以 ? 结尾
  • 任何选项必须以 & 开头
  • 任何选项值必须用 ` 包围
  • 小部件必须以 [[ 开始并以 ]] 结束

#使用

##默认小部件

简单小部件

此小部件仅将设置变量渲染到指定的模板中。如果未指定模板,则仅渲染选项 &content。您还可以指定模板。可以将模板指定为链接或字符串。

#####示例

使用默认模板

{{ '[[simple? &content=`Hello world`]]'|widget }}

或嵌套

{{ '[[simple? &content=`[[simple? &content=`Hello world`]]`]]'|widget }}

将输出

Hello world

使用自定义模板

{{ '[[simple? &setting1=`value1` &setting2=`value2` &setting3=`value3` &template=`{{setting1}} - {{setting2}} - {{setting3}}`]]'|widget }}

{{ '[[simple? &setting1=`value1` &setting2=`value2` &setting3=`value3` &template=`AppBundle:Widget:simple.html.twig`]]'|widget }}
{# AppBundle:Widget:simple.html.twig#}
{{setting1}} - {{setting2}} - {{setting3}}

将输出

value1 - value2 - value3

存储库小部件

渲染 doctrine 模型的集合

参数

  • tpl - 单个元素模板
  • model - 实体模型类
  • function - 将被调用的函数
  • args - 函数参数。json 格式

其他参数

  • beforeTpl - 在项目代码结构之前显示的代码片段
  • afterTpl - 在项目代码结构之后显示的代码片段

在指定的模板中,将可用以下变量

  • item - 获取的实体模型
  • idx (int) - 序号
  • isFirst (bool) - 如果元素是第一个
  • isLast (bool) - 如果是最后一个元素

示例

<?php

namespace App\Bundle\ProductBundle\Entity;


class Product
{
    /**
     * @var string
     *
     * @ORM\Column(type="string", nullable=true)
     */
    private $name;

    /**
     * @var string
     *
     * @ORM\Column(type="string", nullable=true)
     */
    private $slug;

    /**
     * @var bool
     *
     * @ORM\Column(type="boolean")
     */
    private $active = false;

    /**
     * @var ArrayCollection
     *
     * @ORM\OneToMany(targetEntity="App\Bundle\ShopBundle\Entity\ProductCategory", mappedBy="product", cascade={"persist"})
     */
    private $categories;
//...
{{ '[[repository? &model=`AppProductBundle:Product` &function=`findBySlug` &args=`["testslug"]` &tpl=`{{item.name}}` &tpl=`{{idx+1}}. {{item.name}}<br/>`]]'|widget }}

将输出

1. product 1
2. product 3
3. product 3
...
n. product n