dd / evolutioncms-snippets-ddgetdocuments
一个用于通过自定义规则从文档树或自定义数据库表获取和解析资源的片段。
Requires
- php: >=5.6.0
- composer/installers: ~1.0.0
- dd/evolutioncms-libraries-ddtools: >=0.50.0
This package is auto-updated.
Last update: 2024-09-06 07:33:07 UTC
README
一个用于通过自定义规则从文档树或自定义数据库表获取和解析资源的片段。
要求
- PHP >= 5.6
- MySQL >= 8 或 MariaDB >= 10.3.10(未在旧版本中测试)。
- (MODX)EvolutionCMS >= 1.1
- (MODX)EvolutionCMS.libraries.ddTools >= 0.50
安装
手动
1. 元素 → 片段:创建一个新的片段,如下所示
- 片段名称:
ddGetDocuments。 - 描述:
<b>1.6</b> 一个用于通过自定义规则从文档树或自定义数据库表获取和解析资源的片段。。 - 类别:
核心。 - 解析 DocBlock:
否。 - 片段代码(PHP):插入从存档中的
ddGetDocuments_snippet.php文件的内容。
2. 元素 → 管理文件
- 创建一个新文件夹
assets/snippets/ddGetDocuments/。 - 将存档提取到文件夹中(除了
ddGetDocuments_snippet.php)。
使用(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.ddGetDocuments \DDInstaller::install([ 'url' => 'https://github.com/DivanDesign/EvolutionCMS.snippets.ddGetDocuments', 'type' => 'snippet' ]);
- 如果您的站点上不存在
ddGetDocuments,则ddInstaller将仅安装它。 - 如果您的站点上已存在
ddGetDocuments,则ddInstaller将检查其版本并在需要时更新它。
参数描述
核心参数
fieldDelimiter- 描述:用于在包含SQL查询的参数中区分数据库列名称的字段分隔符,例如
providerParams->groupBy、providerParams->orderBy和providerParams->filter。 - 有效值:
string - 默认值:
'`'
- 描述:用于在包含SQL查询的参数中区分数据库列名称的字段分隔符,例如
数据提供者参数
-
provider- 描述:用于获取文档的数据提供者名称。
数据提供者名称不区分大小写(以下名称相等:parent、Parent、pArEnT等)。 - 有效值
'parent''select'
- 默认值:
'parent'
- 描述:用于获取文档的数据提供者名称。
-
providerParams -
providerParams->filter- 描述:在获取资源时应用的SQL样式过滤条件。
注意,在过滤参数中指定的所有字段/tv名称都必须用fieldDelimiter括起来。 - 有效值:
string - 默认值:
'`published` = 1 AND `deleted` = 0'
- 描述:在获取资源时应用的SQL样式过滤条件。
-
providerParams->total- 描述:将返回的资源最大数量。
- 有效值:
integer - 默认值:—(全部)
-
providerParams->offset- 描述:资源偏移量。
- 有效值:
integer - 默认值:
0
-
providerParams->groupBy- 描述:将具有相同值的项分组为汇总项(类似于SQL
GROUP BY)。 - 有效值:
stringCommaSeparated - 默认值:—
- 描述:将具有相同值的项分组为汇总项(类似于SQL
-
providerParams->groupBy[$i]- 描述:文档字段或电视,通过该字段或电视将项目分组。
- 有效值:
string - 必填
-
providerParams->orderBy- 描述:表示排序规则的字符串。
也可以使用电视名称。 - 有效值:
string - 默认值:—
- 描述:表示排序规则的字符串。
提供者 → 父级 (&provider=`parent` )
-
providerParams->parentIds- 描述:父ID。
- 有效值
数组以逗号分隔的字符串
- 默认值:
[0]
-
providerParams->parentIds[i]- 描述:文档ID。
- 有效值:
integer - 必填
-
providerParams->depth- 描述:子文档搜索的深度。
- 有效值:
integer - 默认值:
1
-
providerParams->excludeIds- 描述:需要排除的文档ID。
- 有效值
数组以逗号分隔的字符串
- 默认值:—
-
providerParams->excludeIds[i]- 描述:文档ID。
- 有效值:
integer - 必填
提供者 → 选择 (&provider=`select` )
-
providerParams->ids- 描述:输出的文档ID。
- 有效值
数组以逗号分隔的字符串
- 必填
-
providerParams->ids[i]- 描述:文档ID。
- 有效值:
integer - 必填
提供者 → 自定义数据库表 (&provider=`customdbtable` )
从自定义数据库表中获取资源。
providerParams->resourcesTableName- 描述:从获取资源的数据库表。
- 有效值:
string - 必填
输出格式参数
-
outputter- 描述:输出的格式。
输出器名称不区分大小写(以下名称相等:string,String,sTrInG等)。 - 有效值
'string''json''sitemap''yandexmarket''raw'
- 默认值:
'string'
- 描述:输出的格式。
-
outputterParams -
outputterParams->templates- 描述:输出模板。
- 有效值:
object - 默认值:—
输出器 → 字符串 (&outputter=`string` )
-
outputterParams->templates->item- 描述:项目模板。
可用的占位符[+任何文档字段或电视名称+]— 任何文档字段名称或电视。[+任何扩展占位符+]— 任何扩展占位符(见下面的扩展器描述)。[+来自placeholders参数的任何占位符+]— 任何自定义占位符(见下面的outputterParams->placeholders描述)。[+itemNumber+]— 从1开始的项号。[+itemNumberZeroBased+]从0开始的项号。
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 必填
- 描述:项目模板。
-
outputterParams->templates->itemFirst- 描述:第一个项目的模板。具有与
outputterParams->templates->item相同的占位符。 - 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值:==
outputterParams->templates->item。
- 描述:第一个项目的模板。具有与
-
outputterParams->templates->itemLast- 描述:最后一个项目的模板。具有与
outputterParams->templates->item相同的占位符。 - 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值:==
outputterParams->templates->item。
- 描述:最后一个项目的模板。具有与
-
outputterParams->templates->wrapper- 描述:包装模板。
可用的占位符[+任何文档字段或电视名称+]— 任何文档字段名称或电视。[+任何扩展占位符+]— 任何扩展占位符(见下面的扩展器描述)。[+来自placeholders参数的任何占位符+]— 任何自定义占位符(见下面的outputterParams->placeholders描述)。[+ddGetDocuments_items+]
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值:—
- 描述:包装模板。
-
outputterParams->templates->noResults- 描述:当找不到项目时输出的块或文本。
具有与outputterParams->templates->wrapper相同的占位符。 - 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值:—
- 描述:当找不到项目时输出的块或文本。
-
outputterParams->placeholders- 描述:必须传递到
templates->item,templates->itemFirst,templates->itemLast和templates->wrapper中的附加数据。
也支持数组:some[a]=one&some[b]=two=>[+some.a+],[+some.b+];some[]=one&some[]=two=>[+some.0+],[some.1]。 - 有效值:
object - 默认值:—
- 描述:必须传递到
-
outputterParams->placeholders->{$name}- 描述:占位符名称的键和占位符值的值。
- 有效值:
string - 必填
-
outputterParams->itemGlue- 描述:在渲染时组合项目的字符串。
- 有效值:
string - 默认值:
''
输出器 → JSON (&outputter=`json` )
-
outputterParams->docFields- 描述:输出的文档字段(包括电视)。
- 有效值
数组以逗号分隔的字符串
- 默认值:
'id'
-
outputterParams->docFields[i]- 描述:文档字段或电视。
- 有效值
stringDocFieldNamestringTvName
- 必填
-
outputterParams->templates->{$docFieldName}-
描述:您可以使用某些文档字段的模板。
在结果进行JSON转换之前将使用模板。因此,您不需要担心字符转义。这对于通过运行代码片段对文档字段值进行操作很有用。
可用的占位符
[+value+]— 字段值[+任何文档字段或电视名称+]— 在outputterParams->docFields中指定的任何文档字段名称或电视。
-
有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
-
必填
-
输出器 → 网站地图 (&outputter=`sitemap`)
以 网站地图 XML 格式 输出。
-
outputterParams->priorityTVName- 描述:设置文档相对优先级的 TV 名称。
- 有效值:
stringTvName - 默认值:
'general_seo_sitemap_priority'
-
outputterParams->changefreqTVName- 描述:设置更改频率的 TV 名称。
- 有效值:
stringTvName - 默认值:
'general_seo_sitemap_changefreq'
-
outputterParams->templates->item- 描述:项目模板。
可用的占位符[+任何文档字段或电视名称+]— 任何文档字段名称或电视。[+任何扩展占位符+]— 任何扩展占位符(见下面的扩展器描述)。[+itemNumber+]— 从1开始的项号。[+itemNumberZeroBased+]从0开始的项号。
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认
<url> <loc>[(site_url)][~[+id+]~]</loc> <lastmod>[+editedon+]</lastmod> <priority>[+[+priorityTVName+]+]</priority> <changefreq>[+[+changefreqTVName+]+]</changefreq> </url>
- 描述:项目模板。
-
outputterParams->templates->wrapper- 描述:包装模板。
可用的占位符[+任何文档字段或电视名称+]— 任何文档字段名称或电视。[+任何扩展占位符+]— 任何扩展占位符(见下面的扩展器描述)。[+ddGetDocuments_items+]
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> [+ddGetDocuments_items+] </urlset>
- 描述:包装模板。
输出器 → Yandexmarket (&outputter=`yandexmarket`)
以 YML 格式 输出。
-
outputterParams->shopData- 描述:商店数据。
- 有效值:
object - 必填
-
outputterParams->shopData->shopName- 描述:简短商店名称,长度 <= 20。
- 有效值:
string - 必填
-
outputterParams->shopData->companyName- 描述:公司法定名称。内部数据,不显示但由 Yandex 需要。
- 有效值:
string - 必填
-
outputterParams->shopData->agency- 描述:网络开发公司名称。
- 有效值:
string - 默认值:—
-
outputterParams->shopData->currencyId- 描述:货币代码(参见 Yandex 文档)。
- 有效值:
string - 默认值:
'RUR'
-
outputterParams->shopData->platform- 描述:
<platform>标签内容。 - 有效值:
string - 默认值:
'(MODX) Evolution CMS'
- 描述:
-
outputterParams->shopData->version- 描述:
<version>标签内容。 - 有效值:
string - 默认值:
'[(settings_version)]'
- 描述:
-
outputterParams->categoryIds_last- 描述:允许在分类部分添加额外的父元素。如果为空,则仅返回商品的直接父元素。
- 有效值:
stringCommaSeparated - 默认值:—
-
outputterParams->categoryIds_last[i]- 描述:文档ID。
- 有效值:
integer - 必填
-
outputterParams->offerFields- 描述:报价字段参数。
- 有效值:
object - 必填
-
outputterParams->offerFields->{$fieldName}- 描述:报价字段参数。
- 有效值
string— 参数可以设置为文档字段名称object— 或作为具有附加参数的对象(见下文)
- 默认值:—
-
outputterParams->offerFields->{$fieldName}->docFieldName- 描述:包含报价字段值的文档字段名称。
- 有效值:
stringTvName - 必填
-
outputterParams->offerFields->{$fieldName}->disableEscaping- 描述:您可以在字段值中禁用特殊字符的转义(
'、"、&、<、>)。 - 有效值:
boolean - 默认值:
false
- 描述:您可以在字段值中禁用特殊字符的转义(
-
outputterParams->offerFields->{$fieldName}->valuePrefix- 描述:您可以在字段值之前设置自定义字符串。
- 有效值:
string - 默认值:—
-
outputterParams->offerFields->{$fieldName}->valueSuffix- 描述:您可以在字段值之后设置自定义字符串。
- 有效值:
string - 默认值:—
-
outputterParams->offerFields->price- 描述:包含报价价格的文档字段名称。
如果文档字段值为空,但设置了outputterParams->offerFields->priceOld,则将使用后者。 - 有效值:
stringTvName - 必填
- 描述:包含报价价格的文档字段名称。
-
outputterParams->offerFields->priceOld- 描述:包含旧报价价格的文档字段名称(必须小于
outputterParams->offerFields->price,否则将不会使用)。 - 有效值:
stringTvName - 默认值:—
- 描述:包含旧报价价格的文档字段名称(必须小于
-
outputterParams->offerFields->picture- 描述:包含报价图片的文档字段名称。
- 有效值:
stringTvName - 默认值:—
-
outputterParams->offerFields->name- 描述:包含报价名称的文档字段名称。
如果文档字段值为空,则使用pagetitle字段。 - 有效值
stringDocFieldNamestringTvName
- 默认值:
'pagetitle'
- 描述:包含报价名称的文档字段名称。
-
outputterParams->offerFields->model- 描述:包含报价型号的文档字段名称。
- 有效值
stringDocFieldNamestringTvName
- 默认值:—
-
outputterParams->offerFields->model- 描述:包含报价厂商的文档字段名称。
- 有效值
stringDocFieldNamestringTvName
- 默认值:—
-
outputterParams->offerFields->available- 描述:包含报价可用状态的文档字段名称(
true|false)。 - 有效值
stringTvName''— 总是显示'true'。
- 默认值:
''
- 描述:包含报价可用状态的文档字段名称(
-
outputterParams->offerFields->description- 描述:文档字段名,包含报价描述(少于3,000个字符)。
- 有效值
stringDocFieldNamestringTvName
- 默认值:—
-
outputterParams->offerFields->salesNotes- 描述:文档字段名,包含报价 <销售备注>。
- 有效值
stringDocFieldNamestringTvName
- 默认值:—
-
outputterParams->offerFields->manufacturerWarranty- 描述:文档字段名,包含报价制造商保修状态(
true|false)。 - 有效值:
stringTvName - 默认值:—
- 描述:文档字段名,包含报价制造商保修状态(
-
outputterParams->offerFields->countryOfOrigin- 描述:文档字段名,包含报价产地。
- 有效值
stringDocFieldNamestringTvName
- 默认值:—
-
outputterParams->offerFields->homeCourierDelivery- 描述:文档字段名,包含报价快递配送状态(
true|false)。 - 有效值:
stringTvName - 默认值:—
- 描述:文档字段名,包含报价快递配送状态(
-
outputterParams->offerFields->dimensions- 描述:文档字段名,包含报价尺寸(长度、宽度、高度)包括包装。
请以厘米为单位指定尺寸。格式:三个正数,精确到0.001,使用点作为小数分隔符。
数字必须由斜杠字符/分隔,不留空格。 - 有效值
stringDocFieldNamestringTvName
- 默认值:—
- 描述:文档字段名,包含报价尺寸(长度、宽度、高度)包括包装。
-
outputterParams->offerFields->weight- 描述:包含包装的物品重量,以千克为单位。
某些类别对最小或最大重量有限制。
下载最小和最大重量值列表.
在任何类别中,重量可以精确到千分之一(例如,1.001,使用点作为小数点)。
如果最小值设置为0,则没有最小重量限制,可以从1克(0.001千克)开始指定。 - 有效值
stringDocFieldNamestringTvName
- 默认值:—
- 描述:包含包装的物品重量,以千克为单位。
-
outputterParams->offerFields->additionalParams- 描述:文档字段名,包含报价 <参数> 元素。
- 有效值
stringDocFieldNamestringTvName
- 默认值:—
-
outputterParams->offerFields->customData- 描述:文档字段名,包含必须在
</offer>之前插入的自定义文本。 - 有效值
stringDocFieldNamestringTvName
- 默认值:—
- 描述:文档字段名,包含必须在
-
outputterParams->templates->wrapper- 描述:包装模板。
可用的占位符[+任何文档字段或电视名称+]— 任何文档字段名称或电视。[+任何扩展占位符+]— 任何扩展占位符(见下面的扩展器描述)。[+ddGetDocuments_items+]
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值
<?xml version="1.0" encoding="utf-8"?> <yml_catalog date="[+generationDate+]"> <shop> <name>[+shopData.shopName+]</name> <company>[+shopData.companyName+]</company> <url>[(site_url)]</url> <platform>[+shopData.platform+]</platform> <version>[+shopData.version+]</version> [+shopData.agency+] <currencies> <currency id="[+shopData.currencyId+]" rate="1" /> </currencies> <categories>[+ddGetDocuments_categories+]</categories> <offers>[+ddGetDocuments_items+]</offers> </shop> </yml_catalog>
- 描述:包装模板。
-
outputterParams->templates->categories_item- 描述:类别项目模板。可用的占位符
[+id+]— 类别文档ID。[+value+]— 类别名称。[+parent+]— 类别父ID。[+attrs+]— 属性字符串(例如:parentId="42")。
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值
<category id="[+id+]"[+attrs+]> [+value+] </category>
- 描述:类别项目模板。可用的占位符
-
outputterParams->templates->offers_item- 描述:报价项目模板。
可用的占位符[+任何文档字段或电视名称+]— 任何文档字段名称或电视。[+任何扩展占位符+]— 任何扩展占位符(见下面的扩展器描述)。[+itemNumber+]— 从1开始的项号。[+itemNumberZeroBased+]从0开始的项号。
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认
<offer id="[+id+]" available="[+available+]"> <url>[(site_url)][~[+id+]~]</url> [+name+] [+price+] [+priceOld+] [+shopData.currencyId+] [+categoryId+] [+picture+] [+vendor+] [+model+] [+description+] [+salesNotes+] [+manufacturerWarranty+] [+countryOfOrigin+] [+delivery+] [+dimensions+] [+weight+] [+additionalParams+] [+customData+] </offer>
- 描述:报价项目模板。
-
outputterParams->templates->{'offers_item_elem' . $FieldName}- 描述:您可以设置任何报价元素的自定义模板。指定一个元素名称,与
offerFields->参数相一致,例如outputterParams->templates->offers_item_elemCountryOfOrigin。
可用的占位符[+tagName+]— 元素标签名。[+value+]— 元素值。
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认:—
- 描述:您可以设置任何报价元素的自定义模板。指定一个元素名称,与
扩展器参数
-
extenders- 描述:以逗号分隔的字符串,确定应用于片段的扩展器。
请注意,扩展器名称的顺序可能影响输出。 - 有效值:
stringCommaSeparated - 默认值:—
- 描述:以逗号分隔的字符串,确定应用于片段的扩展器。
-
extenders[i]- 描述:扩展器名称。
请注意,扩展器名称的顺序可能影响输出。
扩展器名称不区分大小写(以下名称相等:pagination、Pagination、pAgInAtIoN等)。 - 有效值
'pagination''tagging''search''sortFromURL'
- 必填
- 描述:扩展器名称。
-
extendersParams -
extendersParams->{$extenderName}- 描述:扩展器的参数,其中键是扩展器名称,值是扩展器参数。
- 有效值:`object
- 默认值:—
扩展器 → 分页(&extenders=`pagination` )
-
extendersParams->pagination->wrapperTpl- 描述:用于输出分页的片段。
可用的占位符[+previous+]— 导航到上一页的HTML代码块(请参阅以下参数说明)。[+next+]— 导航到下一页的HTML代码块(请参阅以下参数说明)。[+pages+]— 分页导航块HTML代码。[+totalPages+]— 总页数。
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值
<div class="pagination_container"> <div class="pagination clearfix"> <div class="pagination_links">[+previous+]</div> <div class="pagination_pages">[+pages+]</div> <div class="pagination_links">[+next+]</div> </div> </div>
- 描述:用于输出分页的片段。
-
extendersParams->pagination->pageTpl- 描述:用于输出分页内页面的片段。
可用的占位符[+url+]— 页面URL。[+page+]— 页面编号。
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值
<a href="[~[*id*]~][+url+]" class="strl">[+page+]</a>
- 描述:用于输出分页内页面的片段。
-
extendersParams->pagination->currentPageTpl- 描述:用于在分页中输出当前页的块。
可用的占位符[+url+]— 页面URL。[+page+]— 页面编号。
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值
<a href="[~[*id*]~][+url+]" class="strl active">[+page+]</a>
- 描述:用于在分页中输出当前页的块。
-
extendersParams->pagination->nextTpl- 描述:用于输出下一页导航块的块。
可用的占位符[+url+]— 下一页URL。[+totalPages+]— 总页数。
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值
<a href="[~[*id*]~][+url+]" class="pagination_next strl"><span>Следующая</span> →</a><br> <small><a href="[~[*id*]~]?page=[+totalPages+]" class="pagination_last strl"><span>Последняя</span> →</a></small>
- 描述:用于输出下一页导航块的块。
-
extendersParams->pagination->nextOffTpl- 描述:当没有更多页面时用于输出下一页导航块的块。
可用的占位符[+totalPages+]— 总页数。
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值
<span class="pagination_next"><span>Следующая</span> →</span><br> <small><span class="pagination_last"><span>Последняя</span></span> →</small>
- 描述:当没有更多页面时用于输出下一页导航块的块。
-
extendersParams->pagination->previousTpl- 描述:用于输出上一页导航块的块。
可用的占位符[+url+]— 下一页URL。[+totalPages+]— 总页数。
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值
<a href="[~[*id*]~][+url+]" class="pagination_prev strl">← <span>Предыдущая</span></a><br> <small><a href="[~[*id*]~]" class="pagination_first strl">← <span>Первая</span></a></small>
- 描述:用于输出上一页导航块的块。
-
extendersParams->pagination->previousOffTpl- 描述:当没有更多页面时用于输出上一页导航块的块。
可用的占位符[+totalPages+]— 总页数。
- 有效值
stringChunkNamestring— 使用以@CODE:开始的内联模板。
- 默认值
<span class="pagination_prev">← <span>Предыдущая</span></span><br> <small><span class="pagination_first">← <span>Первая</span></span></small>
- 描述:当没有更多页面时用于输出上一页导航块的块。
扩展器 → 标签(&extenders=`tagging` )
-
extendersParams->tagging->tagsDocumentField- 描述:文档字段(TV)包含标签。
- 有效值:
stringTvName - 默认值:
'tags'
-
extendersParams->tagging->tagsDelimiter- 描述:文档字段中的标签分隔符。
- 有效值:
string - 默认值:
', '
-
extendersParams->tagging->tagsRequestParamName- 描述:从
$_REQUEST获取标签值的参数。 - 有效值:
string - 默认值:
'tags'
- 描述:从
扩展器 → 搜索(&extenders=`search` )
-
extendersParams->search->docFieldsToSearch- 描述:要搜索的文档字段(包括TV)。
- 有效值
数组以逗号分隔的字符串
- 默认值:
'pagetitle,content'
-
extendersParams->search->docFieldsToSearch[i]- 描述:文档字段或TV。
- 有效值
stringDocFieldNamestringTvName
- 必填
扩展器 → 从URL排序(&extenders=`sortFromURL` )
$_GET['orderBy']- 描述:表示排序规则的字符串,类似于
providerParams->orderBy。 - 有效值:
string - 默认值:—
- 描述:表示排序规则的字符串,类似于
示例
所有示例都使用HJSON编写,但如果你想的话,也可以使用纯JSON。
简单获取ID = 1的父文档的子文档
[[ddGetDocuments?
&providerParams=`{
parentIds: 1
depth: 1
}`
&outputterParams=`{
templates: {
item:
'''
@CODE:<div>
<h2>[+pagetitle+]</h2>
<p>[+introtext+]</p>
[+someTV+]
</div>
'''
}
}`
]]
使用providerParams->filter简单获取ID = 1的父文档的子文档
添加一个不会输出所有内容的过滤器。比如说,我们只需要已发布的文档。
不要忘记fieldDelimiter。
[[ddGetDocuments?
&fieldDelimiter=`#`
&providerParams=`{
parentIds: 1
depth: 1
filter: "#published# = 1"
}`
&outputterParams=`{
templates: {
item: documents_item
}
}`
]]
因此,我们可以过滤尽可能多的内容(我们可以使用AND和OR,文档字段和TV)
[[ddGetDocuments?
&fieldDelimiter=`#`
&providerParams=`{
parentIds: 1
depth: 1
filter:
'''
#published# = 1 AND
#hidemenu# = 0 OR
#SomeTVName# = 1
'''
}`
&outputterParams=`{
templates: {
item: documents_item
}
}`
]]
使用date类型(providerParams->orderBy)通过TV排序
数据库中存储的日期格式特定(01-02-2017 08:59:45),排序看起来有些意外。所以,我们不只是可以
&providerParams=`{
orderBy: "#TVName# DESC"
}`
为了正确工作,我们需要将日期从数据库转换为Unixtime进行排序
&providerParams=`{
orderBy: "STR_TO_DATE(#TVName#, '%d-%m-%Y %H:%i:%s') DESC"
}`
当TVName — 用于排序的TV名称。
输出器 → JSON(&outputter=`json` ):获取文档并以JSON格式输出
[[ddGetDocuments?
&providerParams=`{parentIds: 1}`
&outputter=`json`
]]
返回
[
{"id": "2"},
{"id": "3"},
{"id": "4"}
]
输出器 → JSON(&outputter=`json` ):设置要输出的文档字段
[[ddGetDocuments?
&providerParams=`{parentIds: 1}`
&outputter=`json`
&outputterParams=`{
docFields: id,pagetitle,menuindex,someTV
}`
]]
返回
[
{
"id": "2",
"pagetitle": "About",
"menuindex": "0",
"someTV": "Some value"
},
{
"id": "3",
"pagetitle": "Partners",
"menuindex": "1",
"someTV": ""
},
{
"id": "4",
"pagetitle": "Contacts",
"menuindex": "2",
"someTV": ""
}
]
将具有相同字段值的项分组到摘要项中(providerParams->orderBy)
例如,我们有以下文档,包含TV gender
- Mary Teresa,女性
- Mahatma Gandhi,男性
- Tenzin Gyatso,男性
- Dmitry Muratov,男性
- ICAN,无
我们想要创建一个包含唯一项的性别列表
[[ddGetDocuments?
&fieldDelimiter=`#`
&providerParams=`{
//The parent of our documents
parentIds: 42
//The field by which the items will be grouped
groupBy: "#gender#"
}`
&outputter=`json`
&outputterParams=`{
docFields: gender
}`
]]
返回
[
{"gender": "female"},
{"gender": "male"},
{"gender": "none"}
]
扩展器 → 分页(&extenders=`pagination` )
[[ddGetDocuments?
&fieldDelimiter=`#`
&providerParams=`{
parentIds: "[*id*]"
filter: "#published# = 1"
total: 3
orderBy: "#pub_date# DESC`"
}`
&outputterParams=`{
templates: {
item: documents_item
wrapper:
''''
@CODE:[+ddGetDocuments_items+]
[+extenders.pagination+]
'''
noResults: "@CODE:"
}
}`
&extenders=`pagination`
&extendersParams=`{
pagination: {
wrapperTpl: general_pagination
nextTpl: general_pagination_next
previousTpl: general_pagination_prev
nextOffTpl: general_pagination_nextOff
previousOffTpl: general_pagination_prevOff
pageTpl: general_pagination_page
currentPageTpl: general_pagination_pageCurrent
}
}`
]]
&providerParams=`{parentIds: "[*id*]"}`— 获取当前文档的子文档。&providerParams=`{filter: "#published# = 1"}`— 只获取已发布的。&providerParams=`{total: 3}`— 每页的项目数。&providerParams=`{orderBy: "#pub_date# DESC"}— 按发布日期排序,最新在前。&outputterParams=`{templates: {item: documents_item}}`— 项目模板(块名称)。&outputterParams=`{templates: {wrapper: "@CODE:[+ddGetDocuments_items+][+extenders.pagination+]"}}`— 我们需要设置分页输出的位置。&outputterParams=`{templates: {noResults: "@CODE:"}}`— 如果没有找到任何内容则返回空。&extendersParams=`{pagination: {}}`— 分页模板(请参阅参数说明)。
扩展器 → 搜索(&extenders=`search` )
在搜索结果页面调用代码片段。让我们指定搜索的位置和深度。设置过滤器以获取必要的文档。
[[ddGetDocuments?
&fieldDelimiter=`#`
&providerParams=`{
parentIds: 1
depth: 3
filter:
'''
#published# = 1 AND
#deleted# = 0 AND
#template# = 11
'''
}`
&extenders=`search`
&extendersParams=`{
docFieldsToSearch: pagetitle,content,someTv
}`
&outputterParams=`{
templates: {
item: documents_item
}
}
]]
然后在页面URL中添加 ?query=某些查询文本,代码片段将只返回包含该字符串的 pagetitle、content 或 someTv 字段的文档。
我们建议使用缓存的代码片段调用,并在CMS配置中开启文档缓存类型使用 $_GET 参数。
通过 \DDTools\Snippet::runSnippet 运行代码片段,不使用数据库和 eval
//Include (MODX)EvolutionCMS.libraries.ddTools require_once( $modx->getConfig('base_path') . 'assets/libs/ddTools/modx.ddtools.class.php' ); //Run (MODX)EvolutionCMS.snippets.ddGetDocuments \DDTools\Snippet::runSnippet([ 'name' => 'ddGetDocuments', 'params' => [ //It is convenient to set the parameter as a native PHP array or object 'providerParams' => [ 'parentIds' => 1 ], 'outputter' => 'json' ] ]);