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- 描述:需要字体排版结果吗?
- 有效值
01
- 默认值:
0
-
outputterParams->escapeForJS- 描述:需要从结果中转义特殊字符吗?
- 有效值
01
- 默认值:
0
-
outputterParams->URLEncode- 描述:需要URL编码结果字符串吗?
- 有效值
01
- 默认值:
0
Outputter → 字符串 (&outputter=`string` )
-
outputterParams->tpl- 描述:解析结果的块。
- 可用的占位符
[+anyNameFromDocFieldParameter+]— 任何文档字段(或TV)。[+url+]— 文档URL。
- 可用的占位符
- 有效值
stringChunkNamestring— 使用以@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 的名称/别名
- 有效值
stringChunkNamestring— 使用以@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?', )