# 动态解析器语法
### [](https://octobercms.com/docs/services/parser#dynamic-syntax-parser)动态语法解析器
动态语法是十月份独有的模板引擎,从根本上支持两种渲染模式。解析模板将产生两个结果,即**视图**或**编辑器**模式。以该模板文本为例,`{text}...{/text}`标签的内部部分表示**视图**模式的默认文本,而内部属性`name`和`label`用作**编辑器**模式的属性。
~~~
<h1>{text name="websiteName" label="Website Name"}Our wonderful website{/text}</h1>
~~~
该解析器没有外观,因此`October\Rain\Parse\Syntax\Parser`应将完全限定的类与该`parse`方法一起使用。该`parse`方法的第一个参数将模板内容作为字符串并返回一个`Parser`对象。
~~~
use October\Rain\Parse\Syntax\Parser as SyntaxParser;
$syntax = SyntaxParser::parse($content);
~~~
### [](https://octobercms.com/docs/services/parser#syntax-view-mode)查看模式
假设我们使用上面的第一个示例作为模板内容,调用该`render`方法本身将使用默认文本呈现模板:
~~~
echo $syntax->render();
// <h1>Our wonderful website</h1>
~~~
就像任何模板引擎一样,将变量数组传递给的第一个参数`render`将替换模板中的变量。此处的默认值`websiteName`替换为我们的新值:
~~~
echo $syntax->render(['websiteName' => 'OctoberCMS']);
// <h1>OctoberCMS</h1>
~~~
作为一项额外功能,调用该`toTwig`方法将以准备好的状态输出模板,以供[Twig引擎](https://octobercms.com/docs/services/parser#twig-parser)渲染。
~~~
echo $syntax->toTwig();
// <h1>{{ websiteName }}</h1>
~~~
### [](https://octobercms.com/docs/services/parser#syntax-editor-mode)编辑器模式
到目前为止,动态语法解析器与常规模板引擎没有太大区别,但是在编辑器模式下,动态语法的实用性变得更加明显。编辑器模式开启了一个新的可能性领域,例如,[布局将自定义表单字段注入到](http://octobercms.com/plugin/rainlab-pages)属于它们的[页面](http://octobercms.com/plugin/rainlab-pages)或用于[电子邮件活动中动态生成的表单](http://octobercms.com/plugin/responsiv-campaign)。
继续上面的示例,`toEditor`在`Parser`对象上调用方法将返回一个PHP属性数组,该数组定义应如何使用表单生成器填充变量。
~~~
$array = $syntax->toEditor();
// 'websiteName' => [
// 'label' => 'Website name',
// 'default' => 'Our wonderful website',
// 'type' => 'text'
// ]
~~~
您可能会注意到,这些属性与[表单字段定义中](https://octobercms.com/docs/backend/forms#form-fields)的选项非常相似。这是有意的,因此这两个功能可以相互补充。现在,我们可以轻松地将上面的数组转换为YAML并写入`fields.yaml`文件:
~~~
$form = [
'fields' => $syntax->toEditor()
];
File::put('fields.yaml', Yaml::render($form));
~~~
### [](https://octobercms.com/docs/services/parser#syntax-supported-tags)支持的标签
动态语法解析器可以使用多种标记类型,这些标记类型旨在匹配常见的[表单字段类型](https://octobercms.com/docs/backend/forms#field-types)。
#### 文本
单行输入,用于较小的文本块。
~~~
{text name="websiteName" label="Website Name"}Our wonderful website{/text}
~~~
#### 文字区
多行输入用于较大的文本块。
~~~
{textarea name="websiteDescription" label="Website Description"}
This is our vision for things to come
{/textarea}
~~~
### 落下
呈现一个下拉表单字段。
~~~
{dropdown name="dropdown" label="Pick one" options="One|Two"}{/dropdown}
~~~
呈现具有独立值和标签的下拉表单字段。
~~~
{dropdown name="dropdown" label="Pick one" options="one:One|two:Two"}{/dropdown}
~~~
使用静态类方法(该类必须是完全命名空间的类)返回的数组呈现下拉表单字段。
~~~
{dropdown name="dropdown" label="Pick one" options="\Path\To\Class::method"}{/dropdown}
~~~
### 无线电
渲染单选表单字段。
~~~
{radio name="radio" label="Thoughts?" options="y:Yes|n:No|m:Maybe"}{/radio}
~~~
#### 变量
完全按照`type`属性中的定义呈现表单字段类型。此标记将仅设置一个变量,并在视图模式下呈现为空字符串。
~~~
{variable type="text" name="name" label="Name"}John{/variable}
~~~
#### 丰富的编辑
用于丰富内容的文本输入(WYSIWYG)。
~~~
{richeditor name="content" label="Main content"}Default text{/richeditor}
~~~
在Twig中呈现为
~~~
{{ content|raw }}
~~~
#### 降价促销
Markdown内容的文本输入。
~~~
{markdown name="content" label="Markdown content"}Default text{/markdown}
~~~
在Twig中呈现为
~~~
{{ content|md }}
~~~
#### 媒体搜寻器
媒体库项目的文件选择器。该标记值将包含文件的相对路径。
~~~
{mediafinder name="logo" label="Logo"}defaultlogo.png{/mediafinder}
~~~
在Twig中呈现为
~~~
{{ logo|media }}
~~~
#### 上传文件
文件的文件上传器输入。该标记值将包含文件的完整路径。
~~~
{fileupload name="logo" label="Logo"}defaultlogo.png{/fileupload}
~~~
#### 直放站
渲染一个包含其他字段的重复节。
~~~
{repeater name="content_sections" prompt="Add another content section"}
<h2>{text name="title" label="Title"}Title{/text}</h2>
<p>{textarea name="content" label="Content"}Content{/textarea}</p>
{/repeater}
~~~
在Twig中呈现为
~~~
{% for fields in repeater %}
<h2>{{ fields.title }}</h2>
<p>{{ fields.content|raw }}</p>
{% endfor %}
~~~
调用`$syntax->toEditor`将为转发器字段返回不同的数组:
~~~
'repeater' => [
'label' => 'Website name',
'type' => 'repeater',
'fields' => [
'title' => [
'label' => 'Title',
'default' => 'Title',
'type' => 'text'
],
'content' => [
'label' => 'Content',
'default' => 'Content',
'type' => 'textarea'
]
]
]
~~~
转发器字段还支持组模式,该组模式可与动态语法解析器一起使用,如下所示:
~~~
{variable name="sections" type="repeater" prompt="Add another section" tab="Sections"
groups="$/author/plugin/repeater_fields.yaml"}{/variable}
~~~
这是repeater\_fields.yaml组配置文件的示例:
~~~
quote:
name: Quote
description: Quote item
icon: icon-quote-right
fields:
quote_position:
span: auto
label: Quote Position
type: radio
options:
left: Left
center: Center
right: Right
quote_content:
span: auto
label: Details
type: textarea
~~~
有关Repeater组模式的更多信息,请参见[Repeater Widget](https://octobercms.com/docs/backend/forms#widget-repeater)。
- 基本说明
- 基本操作
- October cms 安装
- 后台控制器路径
- 图标
- 获取安装网上的插件/主题
- 插件构造器使用
- 定时任务
- October后台控制器
- vscode编辑器
- ajax操作
- 使用
- ajax更新组件
- ajax属性API
- JavaScript API
- ajax综合使用
- 主题
- 多语言主题
- 安装市场主题
- 主题程序处理
- 主题
- 页面
- 部件
- 布局
- 内容
- 组件
- 媒体
- 主题表单操作
- 表单使用
- 表单后端程序处理
- 插件
- 自定义插件
- 插件说明
- 插件导航条
- 插件数据库设置
- 插件的设置管理
- 插件的配置文件config
- 组件
- app服务
- app容器
- 扩展行为
- 缓存
- Collection类
- Lazy Collections
- Collection方法
- 助手函数
- 数组助手函数
- 路径助手函数
- 玄乐助手函数
- 其他助手函数
- 错误与记录
- 事件处理
- HTML页面
- 文件与目录操作
- 散列和加密
- 邮件
- 邮件内容
- 邮件发送
- 分页
- 模板解析器
- 动态解析器语法
- 队列消息
- 请求与输入
- 响应
- 视图
- 路由器
- 配置
- 验证操作
- 处理错误消息
- 错误消息与视图
- 可用的验证规则
- 有条件的验证规则
- 验证数组
- 错误消息
- 自定义验证规则
- 模型操作
- 定义模型与其属性
- 检索模型
- 插入与更新
- 删除模型
- 查询范围
- 事件操作
- 关联操作
- 定义关系
- 关系类型
- 多肽关系
- 关系查询
- 渴望加载
- 插入模型
- 数据库操作
- 基本用法
- 数据表结构
- 查询连贯操作
- 结果检索
- select子句
- 插入更新
- where子句
- 排序,分组,限制和偏移
- 文件附件
- Collection操作
- 属性操作
- 系列化json
- 数据库属性
- 数据库行为
- 控制器
- 后台控制器定义
- 后台页面
- 后台组件
- 后台表单
- 表单组件
- 表单视图
- 表单行为
- 后台列表
- 列表行为
- 列表过滤器
- 可用列类型
- 关系行为
- 关系行为类型
- 扩展关系行为
- 列表排序操作
- 导入导出操作
- 用于与权限
- corlate模板修改
- 修改顶部导航
- laravel问题
- 控制器不存在
- 控制器
- 路由组
- laravel笔记
- laravel 安装
- 伪静态配置
- 依赖注入 & 控制器
- 中间件
- 路由文件
- 视图