evgeniy-it / widget-bundle
WidgetBundle 类似于 modx 插件,使你的内容管理系统更加强大。
1.0.0
2017-01-18 16:15 UTC
Requires
- php: >=5.4
- symfony/symfony: >=2.7
Requires (Dev)
- symfony/phpunit-bridge: ~2.7
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