dd / evolutioncms-snippets-ddgetdocumentfield
代码片段通过其ID获取必要的文档字段(和TV)。
Requires
- php: >=5.6.0
- dd/evolutioncms-libraries-ddtools: >=0.60.0
- dd/evolutioncms-snippets-ddtypograph: >=2.5.0
README
代码片段通过其ID获取必要的文档字段(和TV)。
需求
- PHP >= 5.6
- (MODX)EvolutionCMS >= 1.1
- (MODX)EvolutionCMS.libraries.ddTools >= 0.60
- (MODX)EvolutionCMS.snippets.ddTypograph >= 2.5(如果需要排版)
安装
使用(MODX)EvolutionCMS.libraries.ddInstaller
只需在您的源代码或控制台中运行以下PHP代码
//Include (MODX)EvolutionCMS.libraries.ddInstaller require_once( $modx->getConfig('base_path') . 'assets/libs/ddInstaller/require.php' ); //Install (MODX)EvolutionCMS.snippets.ddGetDocumentField \DDInstaller::install([ 'url' => 'https://github.com/DivanDesign/EvolutionCMS.snippets.ddGetDocumentField', 'type' => 'snippet' ]);
- 如果您的网站上不存在
ddGetDocumentField
,则ddInstaller
将仅安装它。 - 如果您的网站上已存在
ddGetDocumentField
,则ddInstaller
将检查其版本并在需要时更新它。
手动
1. 元素 → 代码片段:创建一个新代码片段,以下数据
- 代码片段名称:
ddGetDocumentField
。 - 描述:
<b>2.15</b> 代码片段通过其ID获取必要的文档字段(和TV)。
。 - 分类:
核心
。 - 解析DocBlock:
否
。 - 代码片段代码(PHP):插入存档中的
ddGetDocumentField_snippet.php
文件的内容。
2. 元素 → 文件管理
- 创建一个新文件夹
assets/snippets/ddGetDocumentField/
。 - 将存档提取到文件夹中(除了
ddGetDocumentField_snippet.php
)。
参数描述
数据提供者参数
-
dataProviderParams
-
dataProviderParams->resourceId
- 描述:文档标识符。
- 有效值:
整数
- 默认值:
$modx->documentIdentifier
(当前文档)
-
dataProviderParams->resourceFields
- 描述:要获取的文档字段(以逗号分隔)。
- 有效值
字符串逗号分隔
''
- 如果参数为空,则代码片段将尝试在outputterParams->tpl
中搜索字段(例如[+docField+]
)。
- 默认值:
''
-
dataProviderParams->resourceFields[i]
- 描述:如果返回结果需要别名,则字段和别名必须用
'='
分隔(例如:'pagetitle=title,content=text'
)。 - 有效值
- 字符串 - 文档字段
- 字符串分隔 - 字段及其别名
- 必需
- 描述:如果返回结果需要别名,则字段和别名必须用
-
dataProviderParams->resourceFieldsAlternative
- 描述:如果主字段为空,则获取替代文档字段(以逗号分隔)。
- 有效值:
stringCommaSeparated
- 默认值:-
-
dataProviderParams->resourceFieldsAlternative[i]
- 描述:文档字段。
- 有效值:
字符串
- 必需
输出格式参数
-
outputter
- 描述:输出格式。
- 有效值
'string'
'object'
- 默认值:
'string'
-
outputterParams
-
outputterParams->typography
- 描述:需要字体排版结果吗?
- 有效值
0
1
- 默认值:
0
-
outputterParams->escapeForJS
- 描述:需要从结果中转义特殊字符吗?
- 有效值
0
1
- 默认值:
0
-
outputterParams->URLEncode
- 描述:需要URL编码结果字符串吗?
- 有效值
0
1
- 默认值:
0
Outputter → 字符串 (&outputter=`string`
)
-
outputterParams->tpl
- 描述:解析结果的块。
- 可用的占位符
[+anyNameFromDocFieldParameter+]
— 任何文档字段(或TV)。[+url+]
— 文档URL。
- 可用的占位符
- 有效值
stringChunkName
string
— 使用以@CODE:
开头的内联模板
- 必需
- 描述:解析结果的块。
-
outputterParams->placeholders
- 描述:需要将额外的数据传递到
outputterParams->tpl
。- 也支持数组:
some[a]=one&some[b]=two
=>[+some.a+]
,[+some.b+]
;some[]=one&some[]=two
=>[+some.0+]
,[some.1]
。
- 也支持数组:
- 有效值:
object
- 默认值:-
- 描述:需要将额外的数据传递到
-
outputterParams->docFieldsGlue
- 描述:用于连接字段的字符串(如果未使用
outputterParams->tpl
)。 - 有效值:
字符串
- 默认值:
''
- 描述:用于连接字段的字符串(如果未使用
-
outputterParams->emptyResult
- 描述:如果片段结果为空,将返回什么?
- 有效值:
字符串
- 默认值:
''
-
outputterParams->removeEmptyFields
- 描述:从结果中删除空值(`''`)的资源字段。
- 有效值:
boolean
- 默认值:
true
Outputter → 对象 (&outputter=`object`
)
-
outputterParams->removeEmptyFields
- 描述:从结果中删除空值(`''`)的资源字段。
- 有效值:
boolean
- 默认值:
false
-
outputterParams->format
- 描述:输出格式。
- 值不区分大小写(以下值相等:
'stringjsonauto'
,'stringJsonAuto'
,'STRINGJSONAUTO'
,等等)。
- 值不区分大小写(以下值相等:
- 有效值
- 片段可以返回字符串结果
'stringJsonAuto'
— 根据 result 对象返回stringJsonObject
或stringJsonArray
'stringJsonObject'
'stringJsonArray'
'stringQueryFormatted'
— 查询字符串'stringHtmlAttrs'
— HTML 属性字符串(例如width='100' height='50'
)
- 片段还可以返回原生的 PHP 对象或数组(通过
\DDTools\Snippet::runSnippet
调用很方便)。'objectAuto'
— 根据 result 对象返回stdClass
或array
'objectStdClass'
—stdClass
'objectArray'
—array
- 片段可以返回字符串结果
- 默认值:
'stringJsonAuto'
- 描述:输出格式。
-
outputterParams->templates
- 描述:输出模板。
- 有效值:
object
- 默认值:-
-
outputterParams->templates->{$docFieldName}
- 描述:您可以使用模板为一些字段。
- 模板将在最终转换结果之前使用。所以您不需要关心 JSON 的字符转义等。
- 这对于通过运行片段处理文档字段值非常有用。
- 可用的占位符
[+value+]
— 字段值[+
any document field or tv name+]
— 在dataProviderParams->resourceFields
中指定的任何文档字段或 TV 的名称/别名
- 有效值
stringChunkName
string
— 使用以@CODE:
开头的内联模板
- 必需
- 描述:您可以使用模板为一些字段。
-
outputterParams->emptyResult
- 描述:如果片段结果为空,将返回什么?
- 无论参数设置为何种类型,结果都将转换为
outputterParams->format
。
- 无论参数设置为何种类型,结果都将转换为
- 有效值
- 默认值:— (在
outputterParams->format
格式中的空对象)
- 描述:如果片段结果为空,将返回什么?
其他参数
-
mode
- 描述:模式。
- 有效值
''
— 默认模式'ajax'
—docId
从$_REQUEST['id']
获取。在这种情况下使用securityFields
参数!
- 默认值:
''
-
securityFields
示例
所有示例均使用 HJSON 编写,但如果你愿意,也可以使用纯JSON。
获取当前文档的 pagetitle
[[ddGetDocumentField?
&dataProviderParams=`{
resourceFields: pagetitle
}`
]]
获取ID为 7
的文档的 introtext
并从块中返回
[[ddGetDocumentField?
&dataProviderParams=`{
resourceId: 7
resourceFields: introtext
}`
&outputterParams=`{
tpl: testChunk
}`
]]
testChunk
代码
<div class="test">[+introtext+]</div>
获取一个文档的 longtitle
或者在 longtitle
为空时获取 pagetitle
<title>[[ddGetDocumentField? &dataProviderParams=`{ resourceFields: longtitle resourceFieldsAlternative: pagetitle }` ]]</title>
从电视中获取一些电话号码并用逗号连接它们
[[ddGetDocumentField?
&dataProviderParams=`{
resourceId: 7
resourceFields: phone1,phone2
}`
&outputterParams=`{
docFieldsGlue: ", "
}`
]]
将额外数据添加到结果块中
例如,我们使用 Ditto 片段获取一些东西。在 Ditto 块的 outputterParams->tpl
中,如果电话号码不为空或无电话,我们需要获取电话号码和传真。块代码
<div class="test_row"> [+content+] [[ddGetDocumentField? &dataProviderParams=`{ resourceId: "[+id+]" resourceFields: phone }` &outputterParams=`{ tpl: test_row_phone placeholders: { fax: "[+fax+]" someTitle: Call me! } }` ]] </div>
test_row_phone
块代码
<p class="phone" title="[+someTitle+]">[+phone+], [+fax+]</p>
在 outputterParams->tpl
块返回结果时使用字段别名
[[ddGetDocumentField?
&dataProviderParams=`{
resourceFields: pagetitle=title,pub_date=date
}`
&outputterParams=`{
tpl: testChunk
}`
]]
testChunk
块代码
<p>[+title+], [+date+]</p>
使用JSON格式使用字段别名
[[ddGetDocumentField?
&dataProviderParams=`{
resourceFields: pagetitle=title,introtext=text,content
}`
&outputter=`object`
]]
返回
{ "title": "The title of a document", "text": "The annotation", "content": "The content" }
从结果中移除具有空值的资源字段
让那个文档的 pagetitle
被设置,而 longtitle
为空。
[[ddGetDocumentField?
&dataProviderParams=`{
resourceFields: pagetitle,longtitle
}`
&outputter=`object`
]]
返回
{ "pagetitle": "The title of a document", "longtitle": "" }
如果不需要具有空值的字段,只需将 outputterParams->removeEmptyFields
设置为 true
[[ddGetDocumentField?
&dataProviderParams=`{
resourceFields: pagetitle,longtitle
}`
&outputter=`object`
&outputterParams=`{
removeEmptyFields: true
}`
]]
返回
{ "pagetitle": "The title of a document" }
将资源字段作为JSON数组返回
[[ddGetDocumentField?
&dataProviderParams=`{
resourceFields: pagetitle,longtitle
}`
&outputter=`object`
&outputterParams=`{
format: stringJsonArray
}`
]]
返回
[ "The title of a document", "The long title of a document" ]
为JSON中的字段使用模板
[[ddGetDocumentField?
&dataProviderParams=`{
resourceFields: pagetitle,id=link
}`
&outputter=`object`
&outputterParams=`{
templates: {
pagetitle: <h1>[+value+]</h1>
link:
'''
<a href="[~[+value+]~]">[+pagetitle+]</a>
'''
}
}`
]]
返回
{ "pagetitle": "<h1>KINO</h1>", "link": "<a href=\"bands/timeless/kino\">KINO</a>" }
通过 \DDTools\Snippet::runSnippet
运行片段,不使用数据库和 eval
\DDTools\Snippet::runSnippet([ 'name' => 'ddGetDocumentField', 'params' => [ //Can be set as a native PHP array 'dataProviderParams' => [ 'resourceId' => 42, 'resourceFields' => 'pagetitle,question', ], ], ]);
将资源字段作为原生PHP数组返回
\DDTools\Snippet::runSnippet([ 'name' => 'ddGetDocumentField', 'params' => [ 'dataProviderParams' => [ 'resourceId' => 42, 'resourceFields' => 'pagetitle,question', ], 'outputter' => 'object', 'outputterParams' => [ 'format' => 'objectArray', ], ], ]);
返回
array( 'pagetitle' => 'The title of a document', 'question' => 'What is the meaning of life?', )