dd/evolutioncms-snippets-ddgetdocumentfield

此包的最新版本(2.15.0)没有提供许可证信息。

代码片段通过其ID获取必要的文档字段(和TV)。

2.15.0 2024-07-15 14:51 UTC

This package is auto-updated.

Last update: 2024-09-06 07:26:07 UTC


README

代码片段通过其ID获取必要的文档字段(和TV)。

需求

安装

使用(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. 元素 → 代码片段:创建一个新代码片段,以下数据

  1. 代码片段名称:ddGetDocumentField
  2. 描述:<b>2.15</b> 代码片段通过其ID获取必要的文档字段(和TV)。
  3. 分类:核心
  4. 解析DocBlock:
  5. 代码片段代码(PHP):插入存档中的ddGetDocumentField_snippet.php文件的内容。

2. 元素 → 文件管理

  1. 创建一个新文件夹assets/snippets/ddGetDocumentField/
  2. 将存档提取到文件夹中(除了ddGetDocumentField_snippet.php)。

参数描述

数据提供者参数

  • dataProviderParams

    • 描述:传递给提供者的参数。
    • 有效值
      • stringJsonObject - 作为JSON
      • stringHjsonObject - 作为HJSON
      • stringQueryFormatted - 作为查询字符串
      • 它还可以设置为本地PHP对象或数组(例如,通过\DDTools\Snippet::runSnippet$modx->runSnippet
        • 关联数组
        • 对象
    • 默认值:-
  • 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

    • 描述:传递给指定输出器的参数。
    • 有效值
      • stringJsonObject - 作为JSON
      • stringHjsonObject - 作为HJSON
      • stringQueryFormatted - 作为查询字符串
      • 它还可以设置为本地PHP对象或数组(例如,通过\DDTools\Snippet::runSnippet$modx->runSnippet
        • 关联数组
        • 对象
    • 默认值:-
  • 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 对象返回 stringJsonObjectstringJsonArray
        • 'stringJsonObject'
        • 'stringJsonArray'
        • 'stringQueryFormatted'查询字符串
        • 'stringHtmlAttrs' — HTML 属性字符串(例如 width='100' height='50'
      • 片段还可以返回原生的 PHP 对象或数组(通过 \DDTools\Snippet::runSnippet 调用很方便)。
        • 'objectAuto' — 根据 result 对象返回 stdClassarray
        • '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
    • 有效值
      • stringJsonObject — 作为 JSON 对象
      • stringJsonArray' — 作为 JSON 数组
      • stringHjsonObject — 作为 HJSON 对象
      • stringHjsonArray — 作为 HJSON 数组
      • stringQueryFormatted - 作为查询字符串
      • 它还可以设置为本地PHP对象或数组(例如,通过\DDTools\Snippet::runSnippet$modx->runSnippet
        • 关联数组
        • 对象
    • 默认值:— (在 outputterParams->format 格式中的空对象)

其他参数

  • mode

    • 描述:模式。
    • 有效值
      • '' — 默认模式
      • 'ajax'docId$_REQUEST['id'] 获取。在这种情况下使用 securityFields 参数!
    • 默认值:''
  • securityFields

    • 描述:安全验证的字段。
    • 有效值
      • stringJsonObject — 作为 JSON (例如 {"template": 15, "published": 1})
      • stringHjsonObject - 作为HJSON
      • stringQueryFormatted — 作为 查询字符串 (例如 template=15&published=1)
      • 它还可以设置为本地PHP对象或数组(例如,通过\DDTools\Snippet::runSnippet$modx->runSnippet
        • 关联数组
        • 对象
    • 默认值:-

示例

所有示例均使用 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?',
)

链接