Change log

module (Page)

This module component fetches data relating to Pages.

Possible use cases for this are creating dynamic menus or automatic on-page sitemaps. Specifically, creating a dynamic on-page sub-menu (of all the pages within the current folder/directory).

Pages are based on the same structure as many other modules in Treepl CMS. So you can retrieve, list, sort and filter your site pages just like you might Blog Posts or Custom Modules.

{% component type: "module", source: "Page", layout: "Page Detail" %}

Parameters and Options

Parameter
Values
Required
Description
type
module (default)

This is the name of the entity that needs to be used for the component retrieving function.

source
Page (default)
The entity/alias name or ID that the data is to be sourced from.
layout
Page Detail (default)
<Your Layout name>

The layout name you want to use for rendering the component. The layout name is referenced from the available Layouts of the source specified.

While this parameter is required to render your Layout markup, if the parameter is blank, has an incorrectly referenced Layout, or is removed altogether then the component will still output the modules item data to a Liquid collection which can be accessed via the collectionVariable parameter.

filterBy
id
parentid
name
weighting
url
urlslug
releasedate
expirydate
LastUpdatedDate
Author
ItemCategories
ItemTags
<CustomPropertyName>
...and any other top level properties available for the module

The name of the property to filter by. If empty or not present, no filtering will be used.

Remove spaces from custom property names here.

filterValue
<your value>

Your specific value to filter by, eg: name, id, number, date, etc.
Liquid variables can be used here also. If present but no value set, no items will be returned.
sortBy
id
parentid
name
weighting
url
urlslug
releasedate
expirydate
LastUpdatedDate
Author
ItemCategories
ItemTags
<CustomPropertyName>
...and any other top level properties available for the module

The name of the property to sort by. If empty or not present, alpha/numeric sorting will be used.

Remove spaces from custom property names here.

sortOrder
ASC (default)
DESC

ASC sorts the items in ascending order while DESC sorts in descending order (based on alpha/numeric or date sorting).
If empty or not present, alpha/numeric sorting will be used.
ignoreWeighting
false (default)
true

Enables/disables sorting items first by their weighting values. When false items will sort by their weighting values first, followed by any sortBy properties (or the default alpha/numeric sorting if sortBy is empty or not present). If true item weightings will be ignored and sorting will only be applied via sortBy or default sorting.
random
false (default)
true

Displays the available items in a random order.

If used in conjunction with sortBy, that sorting criteria will be applied to the randomly retrieved results. So, if retrieving all, or most, of the items they will not appear to be random since they will then be sorted back into a logical order. To overcome this, set the sortBy parameter to 'enabled' (or another unused property) as this will not provide any viable sorting criteria* and the items will not be sorted from their initial random order.
* Unless there are weighted items, which will always override the random option.

limit
10 (default)
<number>

The maximum number of items returned. If displayPagination is enabled this determines the maximum number of items per page.
enablePagination
true (default)
false

Enables/disables pagination for the component.

This is useful for avoiding pagniation affects for a specific component when multiple components of the same module are output on the same page and do use pagination.

displayPagination
false (default)
true

Displays pagination if there are more items available than the limit set.
emptyMessage
<Your custom message>

Custom content that is rendered if no items are returned by the Component. The default is no content.
Liquid variables are supported here, although Liquid logic tags and HTML are not.

If using Liquid variables with filters added, be sure to change any double quotes to single quotes. For eg:
emptyMessage: “{{ myVariable | prepend: 'Error: ' }}”

To use HTML in your empty message, first capture it using a Liquid capture, then insert the capture variable into the emptyMessage parameter.

object
item (default)
collection

Determines the method for Liquid rendering.
item returns each item iteratively, one after another, for output (generally, output to a container element with no need for looping through the data).
collection returns all items as one collection for output (your container element and looping logic would be handled in the Components Layout).
collectionVariable
<yourLiquidVariableName>

Assigns the data to a Liquid collection enabling further access to the data on the Page or Template using Liquid.

Your collectionVariable value must only contain English letters, numbers or underscores. Spaces or special characters are not supported.

isSearchResult
false (default)
true

Allows search parameters in the URL to override the components output. Therefore, this parameter can be used to output module specific search results from a submitted search form.

Likewise, Tag, Category, and Archive components can be used in conjunction with this parameter for filtering the module's output.

URL search parameters will override any corresponding parameters in the component. If no search parameters are present in the URL, isSearchResult will be ignored.

Any value other than true, (including an empty value), will disable the search functionality and the component will output its regular data.

searchScope
eg:
{'prop_ParentId':'1234', 'prop_ReleaseDate_Min':'2018-07-01', 'prop_ReleaseDate_Max':'2018-07-31', 'prop_KeyWords':'Your Keywords', 'prop_ItemTags':['tag1','tag2'], 'page':'2'}

Allows a search on the module without search parameters needed in the URL. Instead, search parameters are added to the value of this parameter. Therefore, this parameter can be used to output module specific search results from hard-coded (or Liquid) values without the use of a search form.

Added search parameters will override any corresponding parameters otherwise configured on the component. If no search parameters are present, searchScope will be ignored.

This value supports Liquid and can therefore be constructed with Liquid data/variables.

<customParameter>
<your custom value>

You can add your own additional parameters (name/value pairs) to the Component tag. These will be passed to the Components Layout (and the collectionVariable if used) for use via Liquid.

Your <customParameter> name must only contain English letters, numbers or underscores. Spaces or special characters are not supported.

You can use HTML as the value here, just be sure to change any double quotes in your HTML to single quotes.

Liquid Output

The below example has 3 sample items (due to a limit applied) but is otherwise the default structure you will get from this Component.

{
  "Pagination": {
  "CurrentPage": 1,
  "ItemsPerPage": 3,
  "NumberOfPages": 7,
  "TotalItemsCount": 19
},
  "Items": [
  {
    "Id": 2225,
    "Url": "/demo-cs/index",
    "ParentId": 2224,
    "LastUpdatedDate": "2019-02-28T20:45:39",
    "Name": "_Home",
    "UrlSlug": "index",
    "Enabled": true,
    "ReleaseDate": "2018-11-24T18:00:00",
    "ExpiryDate": "2099-12-10T18:00:00",
    "Weighting": 0,
    "Description": "<div>\r\n    <h1>A Demo Site for Treepl CMS Docs</h1>\r\n    <p class=\"lead\">Treepl CMS is an all-in-one system for creating ever-growing websites.<br>For designers, for coders, for agencies - for you!</p>\r\n    <p>For the official documentation <a href=\"https://docs.treepl.co/\" rel=\"noopener noreferrer\" target=\"_blank\">see here</a>.</p>\r\n</div>",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "Docs Demo Site for Treepl CMS",
    "MetaTitle": "Docs Demo Site for Treepl CMS",
    "MetaDescription": "Treepl CMS is an all-in-one system for creating ever-growing websites.\r\nFor designers, for coders, for agencies - for you!",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": true,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": {
      "title": "",
      "type": "",
      "url": "",
      "locale": "",
      "image": ""
    },
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "FtpFullPath": "Content\\Pages\\demo-cs\\index.html",
    "Module_ID": 1522,
    "Module_Alias": "Page"
  },
  {
    "Id": 2538,
    "Url": "/_sandbox",
    "ParentId": -1,
    "LastUpdatedDate": "2020-10-28T00:50:00",
    "Name": "_sandbox",
    "UrlSlug": "_sandbox",
    "Enabled": true,
    "ReleaseDate": "2020-05-07T00:00:00",
    "ExpiryDate": "2099-12-11T13:00:00",
    "Weighting": 0,
    "Description": "\n<hr>\n<pre>{
  "empty": "",
  "blank": "",
  "siteinformation": {
  "demo_design_elements": {
  "site_logo": "/images/logo.png",
  "sl": "/images/logo.png",
  "primary_color": "#0091EA",
  "pc": "#0091EA"
},
  "dde": {
  "site_logo": "/images/logo.png",
  "sl": "/images/logo.png",
  "primary_color": "#0091EA",
  "pc": "#0091EA"
},
  "demo_site_contacts": {
  "phone": "1300 123 123",
  "p": "1300 123 123",
  "email": "info@yourdomain.com",
  "e": "info@yourdomain.com",
  "address": "1 Demo St,\nDemoville, CA, 10000",
  "a": "1 Demo St,\nDemoville, CA, 10000"
},
  "dsc": {
  "phone": "1300 123 123",
  "p": "1300 123 123",
  "email": "info@yourdomain.com",
  "e": "info@yourdomain.com",
  "address": "1 Demo St,\nDemoville, CA, 10000",
  "a": "1 Demo St,\nDemoville, CA, 10000"
}
},
  "si": {
  "demo_design_elements": {
  "site_logo": "/images/logo.png",
  "sl": "/images/logo.png",
  "primary_color": "#0091EA",
  "pc": "#0091EA"
},
  "dde": {
  "site_logo": "/images/logo.png",
  "sl": "/images/logo.png",
  "primary_color": "#0091EA",
  "pc": "#0091EA"
},
  "demo_site_contacts": {
  "phone": "1300 123 123",
  "p": "1300 123 123",
  "email": "info@yourdomain.com",
  "e": "info@yourdomain.com",
  "address": "1 Demo St,\nDemoville, CA, 10000",
  "a": "1 Demo St,\nDemoville, CA, 10000"
},
  "dsc": {
  "phone": "1300 123 123",
  "p": "1300 123 123",
  "email": "info@yourdomain.com",
  "e": "info@yourdomain.com",
  "address": "1 Demo St,\nDemoville, CA, 10000",
  "a": "1 Demo St,\nDemoville, CA, 10000"
}
},
  "this": {
  "Id": 2160,
  "Url": "/component-types/module-page",
  "ParentId": 2127,
  "LastUpdatedDate": "2020-10-27T05:36:34",
  "Name": "module (Page)",
  "UrlSlug": "module-page",
  "Enabled": true,
  "ReleaseDate": "2018-09-20T00:00:00",
  "ExpiryDate": "2099-12-10T00:00:00",
  "Weighting": 900,
  "Description": "This module component fetches data relating to Pages.\r\nPossible use cases for this are creating dynamic menus or automatic on-page sitemaps. Specifically, creating a dynamic on-page sub-menu (of all the pages within the current folder/directory).\r\nPages are based on the same structure as many other modules in Treepl CMS. So you can retrieve, list, sort and filter your site pages just like you might Blog Posts or Custom Modules.\r\n\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_parameters\" %}\r\n{% capture tabularData %}\r\n{% component type: \"snippet\", alias: \"param_table_head\" %}\r\n    {% component type: \"snippet\", alias: \"param_type\", required: \"true\" %},\r\n    {% component type: \"snippet\", alias: \"param_source\", required: \"true\", values: \"Page (default)\" %},\r\n    {% component type: \"snippet\", alias: \"param_layout\", required: \"true\", values: \"Page Detail (default)&lt;Your Layout name&gt;\" %},\r\n    {% component type: \"snippet\", alias: \"param_filterby\" %},\r\n    {% component type: \"snippet\", alias: \"param_filtervalue\" %},\r\n    {% component type: \"snippet\", alias: \"param_sortby\" %},\r\n    {% component type: \"snippet\", alias: \"param_sortorder\" %},\r\n    {% component type: \"snippet\", alias: \"param_ignoreweighting\" %},\r\n    {% component type: \"snippet\", alias: \"param_random\" %},\r\n    {% component type: \"snippet\", alias: \"param_limit\" %},\r\n    {% component type: \"snippet\", alias: \"param_enablepagination\" %},\r\n    {% component type: \"snippet\", alias: \"param_displaypagination\" %},\r\n    {% component type: \"snippet\", alias: \"param_emptymessage\" %},\r\n    {% component type: \"snippet\", alias: \"param_object\" %},\r\n    {% component type: \"snippet\", alias: \"param_collectionvariable\" %},\r\n    {% component type: \"snippet\", alias: \"param_issearchresult\" %},\r\n    {% component type: \"snippet\", alias: \"param_searchscope\" %},\r\n    {% component type: \"snippet\", alias: \"param_customparameter\" %}\r\n{% component type: \"snippet\", alias: \"param_table_foot\" %}\r\n{% endcapture %}\r\n{% component type: \"json\", source_type:\"string\", source:\"{{tabularData}}\", layout:\"/snippets/tabularJSON.layout\" %}\r\n{{endSection}}\r\n\r\n{% component type: \"snippet\", alias: \"section_output\" %}\r\n\r\n{% component source: \"Page\", layout: \"\", type: \"module\", collectionVariable: \"allPages\", limit: \"3\" %}\r\nThe below example has {{allPages.pagination.itemsperpage}} sample items (due to a limit applied) but is otherwise the default structure you will get from this Component.\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{allPages}}\", lang: \"json\" %}\r\n{{endSection}}\r\n\r\n{% component type: \"snippet\", alias: \"section_accessing_data\" %}\r\n\r\nThis data is accessible in two main ways:\r\n\r\n1. Using Liquid in the specified Layout via the this object.\r\n{% capture data %}\r\n{% raw %}\r\n{{this['name']}}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n2. Directly on the Page or Template via a Liquid Collection if collectionVariable was added to the Component tag.\r\n\r\nAn example using collectionVariable with value \"allPages\" to list all \"Page items\" across the site:\r\nHere we suppress any Layout from rendering by setting layout: \"\" as an empty attribute.\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"\", collectionVariable: \"allPages\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nLooping through the collection to render all the item names in a list, giving us:\r\n\r\n\r\n    {% for i in allPages.items %}\r\n        {{i['name']}}\r\n    {% endfor %}\r\n\r\n\r\nThe code:\r\n{% capture data %}\r\n{% raw %}\r\n\r\n    {% for i in allPages.items %}\r\n        {{i['name']}}\r\n    {% endfor %}\r\n\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nAccessing a specific item within the collection. In this case the second item (zero based index), which in our example would render the value {{allPages.items[1]['name']}}\r\n{% capture data %}\r\n{% raw %}\r\n{{allPages.items[1]['name']}}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nAvoid calling all pages, while rendering their content description, via this module when on a Page as this will cause the module to retrieve itself and trigger an infinite loop and a system error will occur.\r\nInstead, try being specific with the page/s you need to retrieve using the filterBy options or avoid rendering the content description field.\r\n{{endSection}}\r\n\r\n\r\n    List a Specific Page\r\nIf you want to only list a single specific Page you could filter the items using the Page's ID or perhaps even its name.\r\nTo do this we add the filterBy and filterValue attributes to the Component tag using the specific Page's ID (or their name) to get just that item. For example:\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\", filterBy: \"id\", filterValue: \"1865\" %}\r\nor\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\", filterBy: \"name\", filterValue: \"Documentation\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nDynamic Sub-Page Menu\r\nLet's say you want to have a dynamic on-page menu that lists all pages with the currently viewed folder/directory.\r\nTo do this, we can get the parent ID of the current page (which is the Folder ID) and filter the Page list by parentID.\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", filterBy: \"parentid\", filterValue: \"{{this.parentID}}\", collectionVariable: \"subPages\" %}\r\n\r\n{% for i in subPages.items %}\r\n    {{i.name}}\r\n{% endfor %}\r\n\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nYou cannot use the Component Manager to configure the Component tag for Pages as it's not generally part of the content management process that clients may need to utilise.\r\n\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_counter\" %}\r\n{{endSection}}\r\n",
  "ItemTags": [
  "Pages"
],
  "Author_Name": "",
  "Author_Url": "",
  "Author": "",
  "SEOTitle": "",
  "MetaTitle": "",
  "MetaDescription": "",
  "ShowPageForSearchEngine": true,
  "CanonicalLink": "",
  "EnableAMP": false,
  "AMPContent": "",
  "CodeEditor": true,
  "ExternalId": 0,
  "SocialMetaTags": "",
  "OpenGraphProperties": "",
  "DisableForSiteSearch": false,
  "SeoPriority": "",
  "CreatedByMemberId": 0,
  "ItemCategories": "",
  "ItemCategoryIdList": "",
  "SKUCode": "",
  "SiteSearchKeywords": "",
  "Active": true,
  "IgnoreUpdates": false,
  "UpdateNotes": "",
  "UpdatesLog": "27-Oct-2020 | 5.6.0 | Added 'ignoreWeighting' parameter'isSearchResult' and 'searchScope' parameter details added.",
  "ExternalResources": "",
  "AdditionalRelatedArticle_Name": "",
  "AdditionalRelatedArticle_Url": "",
  "AdditionalRelatedArticle": "",
  "AdditionalRelatedArticle2_Name": "",
  "AdditionalRelatedArticle2_Url": "",
  "AdditionalRelatedArticle2": "",
  "Authors": "2418",
  "Module_ID": 1870,
  "Module_Alias": "DocumentationPost",
  "ParentName": "Liquid Components",
  "ParentUrl": "/component-types",
  "TemplateName": "Docs Template",
  "IsHome": false
},
  "request": {
  "request_url": {
  "href": "https://docs.treepl.co/component-types/module-page",
  "origin": "https://docs.treepl.co",
  "protocol": "https",
  "hostname": "docs.treepl.co",
  "path": "/component-types/module-page",
  "params": {}
},
  "cookies": {
  "asp.net_sessionid": "4qifnaruum2orltrlshhnvwj"
},
  "request_data": {
  "ip": "3.94.21.209",
  "is_mobile": 0,
  "user_agent": "CCBot/2.0 (https://commoncrawl.org/faq/)",
  "referrer": null
},
  "is_logged": false,
  "currentmember": "",
  "device_type": "Desktop",
  "timezone": {
  "label": "(UTC-06:00) Central Time (US & Canada)",
  "offset": -6.0
}
},
  "pagecontent": "{% assign namePlural = this.name %}\r\n{% assign nameSingular = this.name | append: '~x' | remove: 's~x' | remove: '~x' %}\r\n\r\n    \r\n    \t\r\n    \t\tDocumentation\r\n    \t\r\n    \t\r\n    \t    {% assign groupSource = \"Documentation Group\" %}\r\n    \t    {% component source: \"{{groupSource}}\", layout: \"\", filterBy: \"id\", filterValue: \"{{this.parentid}}\", collectionVariable: \"parentGroup\", type: \"module\" %}\r\n    \t\t{{parentGroup.items[0]['Name']}}\r\n    \t\r\n    \t{{this.name}}\r\n    \r\n\r\n{% assign hasRecent = \"x\" %}\r\n\r\n\r\n{% assign upDateP = this.lastupdateddate  | date: \"%s\" %}\r\n{% assign nowDateP = \"now\"  | date: \"%s\" %}\r\n{% assign diffDateP = nowDateP | minus: upDateP %}\r\n{% assign diffDaysP = diffDateP | divided_by : 3600 | divided_by: 24 %}\r\n\r\n{% if this['IgnoreUpdates'] == false and diffDaysP RECENT UPDATES:  {{this.updatenotes}}\r\n\r\n$(document).ready(function () {    \r\n    var firstLog = $('#changelog-popup ul li:first-child').html();\r\n    $('#firstChangeLog').html(firstLog);\r\n});    \r\n\r\n{% endif %}\r\n{% endif %}\r\n{% if this.UpdatesLog != null %}\r\nChange log\r\n \r\n    \r\n        \r\n        Change Log\r\n        {{this.UpdatesLog}}\r\n        \r\n    \r\n\r\n{% endif %}\r\n\r\n    \r\n        {% if this.active == true or request.request_url.params.prev == true %}\r\n        \r\n            {% if this.metaTitle != null %}{{this.metaTitle}}{% else %}{{this.name}}{% endif %}\r\n            {% if this.metaDescription != null %}{{this.metaDescription}}{% endif %}\r\n        \r\n        {{this.description}}\r\n        {% endif %}\r\n        \r\n        \r\n        {% assign hasAdditionalRelatedArticle = false %}\r\n        {% capture addRelated %}\r\n        {% if this.AdditionalRelatedArticle != null or this.AdditionalRelatedArticle != \"\" %}\r\n        {% assign hasAdditionalRelatedArticle = true %}\r\n        {% component source: \"Documentation Post\", layout: \"\", filterBy: \"id\", filterValue: \"{{this.AdditionalRelatedArticle}}\", limit: \"1\", collectionVariable: \"aArticle1\", type: \"module\" %}\r\n        {{this['AdditionalRelatedArticle_name']}}{% if aArticle1.items[0].active == true %}{% if aArticle1.items[0].metaDescription != null %}{{aArticle1.items[0].metaDescription}}{% else %}{{aArticle1.items[0].description | raw | strip_html | truncatewords: 15 }}{% endif %}{% endif %}\r\n        {% endif %}\r\n        {% if this.AdditionalRelatedArticle2 != null or this.AdditionalRelatedArticle2 != \"\" %}\r\n        {% assign hasAdditionalRelatedArticle = true %}\r\n        {% component source: \"Documentation Post\", layout: \"\", filterBy: \"id\", filterValue: \"{{this.AdditionalRelatedArticle2}}\", limit: \"1\", collectionVariable: \"aArticle2\", type: \"module\" %}\r\n        {{this['AdditionalRelatedArticle2_name']}}{% if aArticle2.items[0].active == true %}{% if aArticle2.items[0].metaDescription != null %}{{aArticle2.items[0].metaDescription}}{% else %}{{aArticle2.items[0].description | raw | strip_html | truncatewords: 15 }}{% endif %}{% endif %}\r\n        {% endif %}\r\n        {% endcapture %}\r\n        \r\n        {% for tag in this.itemtags %}\r\n        {% if forloop.first %}\r\n        {% assign firstTag = tag %}\r\n        {% endif %}\r\n        {% endfor %}\r\n        \r\n        {% comment %}\r\n        USING FIRST TAG LISTED FOR RELATED ITEMS FILTER, BUT IDEALLY USE JSON FILTERING ONCE IMPLEMENTED TO RETRIEVE ITEMS MATCHING MULTIPLE TAGS.\r\n        Perhaps:\r\n        { \"$or\" : [ tag, tag, tag...] }\r\n        {% endcomment%}\r\n    {% if this.itemtags.size  0 %}\r\n        {% component source: \"Documentation Post\", filterBy: \"ItemTags\", filterValue: \"{{this.itemtags[0]}}\", limit: \"100\", collectionVariable: \"taggedItems\", type: \"module\" %}\r\n        {% assign rCnt = 0 %}\r\n        {% assign rSize = taggedItems.items.size %}\r\n        {% assign selfItem = false %}\r\n        \r\n        {% for r in taggedItems.items %}\r\n            {% if r.id == this.id %}\r\n            {% assign selfItem = true %}\r\n            {% else %}\r\n                {% if rCnt == 0 %}\r\n                Related Articles\r\n                \r\n                    {{addRelated}}\r\n                {% endif %}\r\n                    {{r.name}}{% if r.active == true %}{% if r.metaDescription != null %}{{r.metaDescription}}{% else %}{{r.description | raw | strip_html | truncatewords: 15 }}{% endif %}{% endif %}\r\n                    {% assign rCnt = rCnt | plus: 1 %}\r\n            {% endif %}\r\n        {% endfor %}\r\n        {% if selfItem == false and rSize  0 %}\r\n            \r\n        {% elsif selfItem == true and rSize  1 %}\r\n            \r\n        {% endif %}\r\n        \r\n    {% elsif hasAdditionalRelatedArticle == true %}\r\n        \r\n            Related Articles\r\n        \r\n            {{addRelated}}\r\n        \r\n        \r\n    {% endif %}\r\n        \r\n            External Resources\r\n        {% if this.ExternalResources == null or this.ExternalResources == '' %}\r\n        There are currently no external resources available.\r\n        {% else %}\r\n        {{this.ExternalResources}}\r\n        \r\n        {% endif %}\r\n        Please let us know if you have any other contributions or know of any helpful resources you'd like to see added here.\r\n        \r\n        {% component type: \"snippet\", alias: \"section_questions\" %}\r\n    \r\n    \r\n        \r\n        \r\n            \r\n        \r\n        \r\n            Contributors\r\n            {% assign authorsArray = this.authors | split: ',' %}\r\n            {% for auth in authorsArray %}\r\n                {% component source: \"Author\", layout: \"List\", filterBy: \"id\", filterValue: \"{{auth}}\", limit: \"1\", type: \"module\" %}\r\n            {% endfor %}\r\n            Want to contribute?\r\n        \r\n        \r\n    \r\n\r\n",
  "endsection": "",
  "docsnav": {
  "Pagination": {
  "CurrentPage": 1,
  "ItemsPerPage": 100,
  "NumberOfPages": 1,
  "TotalItemsCount": 17
},
  "Items": [
  {
    "Id": 2373,
    "Url": "/getting-started",
    "ParentId": 1861,
    "LastUpdatedDate": "2019-08-24T08:37:36",
    "Name": "Getting Started",
    "UrlSlug": "getting-started",
    "Enabled": true,
    "ReleaseDate": "2019-02-24T00:00:00",
    "ExpiryDate": "2099-12-10T00:00:00",
    "Weighting": 1400,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-directions_run",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2517,
    "Url": "/learning-liquid-free-online-course",
    "ParentId": 1861,
    "LastUpdatedDate": "2020-02-27T11:39:59",
    "Name": "Learning Liquid",
    "UrlSlug": "learning-liquid-free-online-course",
    "Enabled": true,
    "ReleaseDate": "2020-02-28T00:00:00",
    "ExpiryDate": "2099-12-11T13:00:00",
    "Weighting": 1350,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": {
      "title": "",
      "type": "",
      "url": "",
      "locale": "",
      "image": ""
    },
    "DisableForSiteSearch": false,
    "SeoPriority": "0.5",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-school",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2355,
    "Url": "/bc-migration-guides",
    "ParentId": 1861,
    "LastUpdatedDate": "2019-08-24T08:28:53",
    "Name": "BC Migration Guides",
    "UrlSlug": "bc-migration-guides",
    "Enabled": true,
    "ReleaseDate": "2019-02-24T18:00:00",
    "ExpiryDate": "2099-12-10T18:00:00",
    "Weighting": 1300,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-category",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2157,
    "Url": "/about-treepl-cms",
    "ParentId": 1861,
    "LastUpdatedDate": "2020-05-01T22:15:07",
    "Name": "About Treepl CMS",
    "UrlSlug": "about-treepl-cms",
    "Enabled": true,
    "ReleaseDate": "2018-09-17T19:00:00",
    "ExpiryDate": "2099-12-09T18:00:00",
    "Weighting": 1200,
    "Description": "",
    "ItemTags": null,
    "Author_Name": "Adam Wilson",
    "Author_Url": "/_author/adam-wilson",
    "Author": 2418,
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-info",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2149,
    "Url": "/site-settings-and-management",
    "ParentId": 1861,
    "LastUpdatedDate": "2019-08-24T08:37:11",
    "Name": "Site Settings & Management",
    "UrlSlug": "site-settings-and-management",
    "Enabled": true,
    "ReleaseDate": "2018-09-04T19:00:00",
    "ExpiryDate": "2099-12-08T18:00:00",
    "Weighting": 1100,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-build",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2197,
    "Url": "/content-editing",
    "ParentId": 1861,
    "LastUpdatedDate": "2019-08-24T09:54:15",
    "Name": "Content Editing",
    "UrlSlug": "content-editing",
    "Enabled": true,
    "ReleaseDate": "2018-11-06T17:24:00",
    "ExpiryDate": "2099-12-10T17:24:00",
    "Weighting": 1050,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-nICE",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2042,
    "Url": "/content-modules",
    "ParentId": 1861,
    "LastUpdatedDate": "2019-08-24T08:36:24",
    "Name": "Content Modules",
    "UrlSlug": "content-modules",
    "Enabled": true,
    "ReleaseDate": "2018-08-18T19:00:00",
    "ExpiryDate": "2099-12-08T18:00:00",
    "Weighting": 998,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-view_module",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2200,
    "Url": "/crm-customer-relationship-management",
    "ParentId": 1861,
    "LastUpdatedDate": "2019-08-24T09:01:17",
    "Name": "CRM",
    "UrlSlug": "crm-customer-relationship-management",
    "Enabled": true,
    "ReleaseDate": "2018-11-06T18:00:00",
    "ExpiryDate": "2099-12-11T07:00:00",
    "Weighting": 995,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-account_box",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2203,
    "Url": "/email-notifications",
    "ParentId": 1861,
    "LastUpdatedDate": "2019-08-24T08:42:41",
    "Name": "Email Notifications",
    "UrlSlug": "email-notifications",
    "Enabled": true,
    "ReleaseDate": "2018-11-06T18:00:00",
    "ExpiryDate": "2099-12-10T18:00:00",
    "Weighting": 990,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-email",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2309,
    "Url": "/email-marketing",
    "ParentId": 1861,
    "LastUpdatedDate": "2019-08-24T08:44:10",
    "Name": "Email Marketing",
    "UrlSlug": "email-marketing",
    "Enabled": true,
    "ReleaseDate": "2018-12-15T04:58:00",
    "ExpiryDate": "2099-12-10T18:00:00",
    "Weighting": 987,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-pie_chart",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2437,
    "Url": "/ecommerce",
    "ParentId": 1861,
    "LastUpdatedDate": "2019-08-24T08:44:57",
    "Name": "eCommerce",
    "UrlSlug": "ecommerce",
    "Enabled": true,
    "ReleaseDate": "2019-08-24T00:00:00",
    "ExpiryDate": "2099-12-12T00:00:00",
    "Weighting": 986,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": false,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "0.5",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-shopping_cart",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2576,
    "Url": "/reports",
    "ParentId": 1861,
    "LastUpdatedDate": "2020-08-04T00:26:47",
    "Name": "Reports",
    "UrlSlug": "reports",
    "Enabled": true,
    "ReleaseDate": "2018-12-15T04:58:00",
    "ExpiryDate": "2099-12-10T18:00:00",
    "Weighting": 985,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-library_books",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2127,
    "Url": "/component-types",
    "ParentId": 1861,
    "LastUpdatedDate": "2020-08-04T00:28:52",
    "Name": "Liquid Components",
    "UrlSlug": "component-types",
    "Enabled": true,
    "ReleaseDate": "2018-09-03T00:00:00",
    "ExpiryDate": "2099-12-09T00:00:00",
    "Weighting": 984,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-waves",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 1881,
    "Url": "/liquid",
    "ParentId": 1861,
    "LastUpdatedDate": "2019-08-24T08:48:04",
    "Name": "Liquid Objects & Usage",
    "UrlSlug": "liquid",
    "Enabled": true,
    "ReleaseDate": "2018-07-27T19:00:00",
    "ExpiryDate": "2099-12-08T18:00:00",
    "Weighting": 980,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-waves",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 2150,
    "Url": "/treepl-portal",
    "ParentId": 1861,
    "LastUpdatedDate": "2020-05-20T02:50:05",
    "Name": "Treepl Portal",
    "UrlSlug": "treepl-portal",
    "Enabled": true,
    "ReleaseDate": "2018-09-12T00:00:00",
    "ExpiryDate": "2099-12-09T00:00:00",
    "Weighting": 975,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "Treepl Portal (Documentation )",
    "MetaTitle": "Treepl Portal (Documentation )",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": {
      "title": "",
      "type": "",
      "url": "",
      "locale": "",
      "image": ""
    },
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-treepl",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 1882,
    "Url": "/extras",
    "ParentId": 1861,
    "LastUpdatedDate": "2019-08-24T08:50:20",
    "Name": "Extras",
    "UrlSlug": "extras",
    "Enabled": true,
    "ReleaseDate": "2018-07-27T23:02:00",
    "ExpiryDate": "2099-12-09T03:00:00",
    "Weighting": 970,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-stars",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  },
  {
    "Id": 1880,
    "Url": "/api_reference",
    "ParentId": 1861,
    "LastUpdatedDate": "2019-08-24T08:59:25",
    "Name": "API Reference",
    "UrlSlug": "api_reference",
    "Enabled": true,
    "ReleaseDate": "2018-07-28T03:01:00",
    "ExpiryDate": "2099-12-09T10:00:00",
    "Weighting": 900,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-code",
    "Active": false,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  }
],
  "Params": {
  "source": "Documentation Group",
  "layout": "Documentation Sidebar Group List",
  "type": "module",
  "collectionVariable": "docsNav",
  "limit": "100"
},
  "Parent": {
  "Id": 2160,
  "Url": "/component-types/module-page",
  "ParentId": 2127,
  "LastUpdatedDate": "2020-10-27T05:36:34",
  "Name": "module (Page)",
  "UrlSlug": "module-page",
  "Enabled": true,
  "ReleaseDate": "2018-09-20T00:00:00",
  "ExpiryDate": "2099-12-10T00:00:00",
  "Weighting": 900,
  "Description": "This module component fetches data relating to Pages.\r\nPossible use cases for this are creating dynamic menus or automatic on-page sitemaps. Specifically, creating a dynamic on-page sub-menu (of all the pages within the current folder/directory).\r\nPages are based on the same structure as many other modules in Treepl CMS. So you can retrieve, list, sort and filter your site pages just like you might Blog Posts or Custom Modules.\r\n\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_parameters\" %}\r\n{% capture tabularData %}\r\n{% component type: \"snippet\", alias: \"param_table_head\" %}\r\n    {% component type: \"snippet\", alias: \"param_type\", required: \"true\" %},\r\n    {% component type: \"snippet\", alias: \"param_source\", required: \"true\", values: \"Page (default)\" %},\r\n    {% component type: \"snippet\", alias: \"param_layout\", required: \"true\", values: \"Page Detail (default)&lt;Your Layout name&gt;\" %},\r\n    {% component type: \"snippet\", alias: \"param_filterby\" %},\r\n    {% component type: \"snippet\", alias: \"param_filtervalue\" %},\r\n    {% component type: \"snippet\", alias: \"param_sortby\" %},\r\n    {% component type: \"snippet\", alias: \"param_sortorder\" %},\r\n    {% component type: \"snippet\", alias: \"param_ignoreweighting\" %},\r\n    {% component type: \"snippet\", alias: \"param_random\" %},\r\n    {% component type: \"snippet\", alias: \"param_limit\" %},\r\n    {% component type: \"snippet\", alias: \"param_enablepagination\" %},\r\n    {% component type: \"snippet\", alias: \"param_displaypagination\" %},\r\n    {% component type: \"snippet\", alias: \"param_emptymessage\" %},\r\n    {% component type: \"snippet\", alias: \"param_object\" %},\r\n    {% component type: \"snippet\", alias: \"param_collectionvariable\" %},\r\n    {% component type: \"snippet\", alias: \"param_issearchresult\" %},\r\n    {% component type: \"snippet\", alias: \"param_searchscope\" %},\r\n    {% component type: \"snippet\", alias: \"param_customparameter\" %}\r\n{% component type: \"snippet\", alias: \"param_table_foot\" %}\r\n{% endcapture %}\r\n{% component type: \"json\", source_type:\"string\", source:\"{{tabularData}}\", layout:\"/snippets/tabularJSON.layout\" %}\r\n{{endSection}}\r\n\r\n{% component type: \"snippet\", alias: \"section_output\" %}\r\n\r\n{% component source: \"Page\", layout: \"\", type: \"module\", collectionVariable: \"allPages\", limit: \"3\" %}\r\nThe below example has {{allPages.pagination.itemsperpage}} sample items (due to a limit applied) but is otherwise the default structure you will get from this Component.\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{allPages}}\", lang: \"json\" %}\r\n{{endSection}}\r\n\r\n{% component type: \"snippet\", alias: \"section_accessing_data\" %}\r\n\r\nThis data is accessible in two main ways:\r\n\r\n1. Using Liquid in the specified Layout via the this object.\r\n{% capture data %}\r\n{% raw %}\r\n{{this['name']}}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n2. Directly on the Page or Template via a Liquid Collection if collectionVariable was added to the Component tag.\r\n\r\nAn example using collectionVariable with value \"allPages\" to list all \"Page items\" across the site:\r\nHere we suppress any Layout from rendering by setting layout: \"\" as an empty attribute.\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"\", collectionVariable: \"allPages\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nLooping through the collection to render all the item names in a list, giving us:\r\n\r\n\r\n    {% for i in allPages.items %}\r\n        {{i['name']}}\r\n    {% endfor %}\r\n\r\n\r\nThe code:\r\n{% capture data %}\r\n{% raw %}\r\n\r\n    {% for i in allPages.items %}\r\n        {{i['name']}}\r\n    {% endfor %}\r\n\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nAccessing a specific item within the collection. In this case the second item (zero based index), which in our example would render the value {{allPages.items[1]['name']}}\r\n{% capture data %}\r\n{% raw %}\r\n{{allPages.items[1]['name']}}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nAvoid calling all pages, while rendering their content description, via this module when on a Page as this will cause the module to retrieve itself and trigger an infinite loop and a system error will occur.\r\nInstead, try being specific with the page/s you need to retrieve using the filterBy options or avoid rendering the content description field.\r\n{{endSection}}\r\n\r\n\r\n    List a Specific Page\r\nIf you want to only list a single specific Page you could filter the items using the Page's ID or perhaps even its name.\r\nTo do this we add the filterBy and filterValue attributes to the Component tag using the specific Page's ID (or their name) to get just that item. For example:\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\", filterBy: \"id\", filterValue: \"1865\" %}\r\nor\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\", filterBy: \"name\", filterValue: \"Documentation\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nDynamic Sub-Page Menu\r\nLet's say you want to have a dynamic on-page menu that lists all pages with the currently viewed folder/directory.\r\nTo do this, we can get the parent ID of the current page (which is the Folder ID) and filter the Page list by parentID.\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", filterBy: \"parentid\", filterValue: \"{{this.parentID}}\", collectionVariable: \"subPages\" %}\r\n\r\n{% for i in subPages.items %}\r\n    {{i.name}}\r\n{% endfor %}\r\n\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nYou cannot use the Component Manager to configure the Component tag for Pages as it's not generally part of the content management process that clients may need to utilise.\r\n\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_counter\" %}\r\n{{endSection}}\r\n",
  "ItemTags": [
  "Pages"
],
  "Author_Name": "",
  "Author_Url": "",
  "Author": "",
  "SEOTitle": "",
  "MetaTitle": "",
  "MetaDescription": "",
  "ShowPageForSearchEngine": true,
  "CanonicalLink": "",
  "EnableAMP": false,
  "AMPContent": "",
  "CodeEditor": true,
  "ExternalId": 0,
  "SocialMetaTags": "",
  "OpenGraphProperties": "",
  "DisableForSiteSearch": false,
  "SeoPriority": "",
  "CreatedByMemberId": 0,
  "ItemCategories": "",
  "ItemCategoryIdList": "",
  "SKUCode": "",
  "SiteSearchKeywords": "",
  "Active": true,
  "IgnoreUpdates": false,
  "UpdateNotes": "",
  "UpdatesLog": "27-Oct-2020 | 5.6.0 | Added 'ignoreWeighting' parameter'isSearchResult' and 'searchScope' parameter details added.",
  "ExternalResources": "",
  "AdditionalRelatedArticle_Name": "",
  "AdditionalRelatedArticle_Url": "",
  "AdditionalRelatedArticle": "",
  "AdditionalRelatedArticle2_Name": "",
  "AdditionalRelatedArticle2_Url": "",
  "AdditionalRelatedArticle2": "",
  "Authors": "2418",
  "Module_ID": 1870,
  "Module_Alias": "DocumentationPost",
  "ParentName": "Liquid Components",
  "ParentUrl": "/component-types",
  "TemplateName": "Docs Template",
  "IsHome": false
}
},
  "pagination": {
  "CurrentPage": 1,
  "ItemsPerPage": 100,
  "NumberOfPages": 1,
  "TotalItemsCount": 5
},
  "counter": 17,
  "documentationpostcollection": {
  "Pagination": {
  "CurrentPage": 1,
  "ItemsPerPage": 100,
  "NumberOfPages": 0,
  "TotalItemsCount": 0
},
  "Items": [],
  "Params": {
  "source": "Documentation Post",
  "layout": "Documentation Sidebar Item",
  "limit": "100",
  "filterBy": "parentid",
  "type": "module",
  "filterValue": "1880",
  "collectionVariable": "documentationPostCollection"
},
  "Parent": {
  "Id": 1880,
  "Url": "/api_reference",
  "ParentId": 1861,
  "LastUpdatedDate": "2019-08-24T08:59:25",
  "Name": "API Reference",
  "UrlSlug": "api_reference",
  "Enabled": true,
  "ReleaseDate": "2018-07-28T03:01:00",
  "ExpiryDate": "2099-12-09T10:00:00",
  "Weighting": 900,
  "Description": "",
  "ItemTags": "",
  "Author_Name": "",
  "Author_Url": "",
  "Author": "",
  "SEOTitle": "",
  "MetaTitle": "",
  "MetaDescription": "",
  "ShowPageForSearchEngine": true,
  "CanonicalLink": "",
  "EnableAMP": false,
  "AMPContent": "",
  "CodeEditor": false,
  "ExternalId": 0,
  "SocialMetaTags": "",
  "OpenGraphProperties": "",
  "DisableForSiteSearch": false,
  "SeoPriority": "",
  "CreatedByMemberId": 0,
  "ItemCategories": "",
  "ItemCategoryIdList": "",
  "SKUCode": "",
  "SiteSearchKeywords": "",
  "Icon": "icon-code",
  "Active": false,
  "Module_ID": 1856,
  "Module_Alias": "DocumentationGroup",
  "Pagination": {
  "CurrentPage": 1,
  "ItemsPerPage": 100,
  "NumberOfPages": 1,
  "TotalItemsCount": 17
},
  "Params": {
  "source": "Documentation Group",
  "layout": "Documentation Sidebar Group List",
  "type": "module",
  "collectionVariable": "docsNav",
  "limit": "100"
},
  "Parent": {
  "Id": 2160,
  "Url": "/component-types/module-page",
  "ParentId": 2127,
  "LastUpdatedDate": "2020-10-27T05:36:34",
  "Name": "module (Page)",
  "UrlSlug": "module-page",
  "Enabled": true,
  "ReleaseDate": "2018-09-20T00:00:00",
  "ExpiryDate": "2099-12-10T00:00:00",
  "Weighting": 900,
  "Description": "This module component fetches data relating to Pages.\r\nPossible use cases for this are creating dynamic menus or automatic on-page sitemaps. Specifically, creating a dynamic on-page sub-menu (of all the pages within the current folder/directory).\r\nPages are based on the same structure as many other modules in Treepl CMS. So you can retrieve, list, sort and filter your site pages just like you might Blog Posts or Custom Modules.\r\n\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_parameters\" %}\r\n{% capture tabularData %}\r\n{% component type: \"snippet\", alias: \"param_table_head\" %}\r\n    {% component type: \"snippet\", alias: \"param_type\", required: \"true\" %},\r\n    {% component type: \"snippet\", alias: \"param_source\", required: \"true\", values: \"Page (default)\" %},\r\n    {% component type: \"snippet\", alias: \"param_layout\", required: \"true\", values: \"Page Detail (default)&lt;Your Layout name&gt;\" %},\r\n    {% component type: \"snippet\", alias: \"param_filterby\" %},\r\n    {% component type: \"snippet\", alias: \"param_filtervalue\" %},\r\n    {% component type: \"snippet\", alias: \"param_sortby\" %},\r\n    {% component type: \"snippet\", alias: \"param_sortorder\" %},\r\n    {% component type: \"snippet\", alias: \"param_ignoreweighting\" %},\r\n    {% component type: \"snippet\", alias: \"param_random\" %},\r\n    {% component type: \"snippet\", alias: \"param_limit\" %},\r\n    {% component type: \"snippet\", alias: \"param_enablepagination\" %},\r\n    {% component type: \"snippet\", alias: \"param_displaypagination\" %},\r\n    {% component type: \"snippet\", alias: \"param_emptymessage\" %},\r\n    {% component type: \"snippet\", alias: \"param_object\" %},\r\n    {% component type: \"snippet\", alias: \"param_collectionvariable\" %},\r\n    {% component type: \"snippet\", alias: \"param_issearchresult\" %},\r\n    {% component type: \"snippet\", alias: \"param_searchscope\" %},\r\n    {% component type: \"snippet\", alias: \"param_customparameter\" %}\r\n{% component type: \"snippet\", alias: \"param_table_foot\" %}\r\n{% endcapture %}\r\n{% component type: \"json\", source_type:\"string\", source:\"{{tabularData}}\", layout:\"/snippets/tabularJSON.layout\" %}\r\n{{endSection}}\r\n\r\n{% component type: \"snippet\", alias: \"section_output\" %}\r\n\r\n{% component source: \"Page\", layout: \"\", type: \"module\", collectionVariable: \"allPages\", limit: \"3\" %}\r\nThe below example has {{allPages.pagination.itemsperpage}} sample items (due to a limit applied) but is otherwise the default structure you will get from this Component.\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{allPages}}\", lang: \"json\" %}\r\n{{endSection}}\r\n\r\n{% component type: \"snippet\", alias: \"section_accessing_data\" %}\r\n\r\nThis data is accessible in two main ways:\r\n\r\n1. Using Liquid in the specified Layout via the this object.\r\n{% capture data %}\r\n{% raw %}\r\n{{this['name']}}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n2. Directly on the Page or Template via a Liquid Collection if collectionVariable was added to the Component tag.\r\n\r\nAn example using collectionVariable with value \"allPages\" to list all \"Page items\" across the site:\r\nHere we suppress any Layout from rendering by setting layout: \"\" as an empty attribute.\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"\", collectionVariable: \"allPages\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nLooping through the collection to render all the item names in a list, giving us:\r\n\r\n\r\n    {% for i in allPages.items %}\r\n        {{i['name']}}\r\n    {% endfor %}\r\n\r\n\r\nThe code:\r\n{% capture data %}\r\n{% raw %}\r\n\r\n    {% for i in allPages.items %}\r\n        {{i['name']}}\r\n    {% endfor %}\r\n\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nAccessing a specific item within the collection. In this case the second item (zero based index), which in our example would render the value {{allPages.items[1]['name']}}\r\n{% capture data %}\r\n{% raw %}\r\n{{allPages.items[1]['name']}}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nAvoid calling all pages, while rendering their content description, via this module when on a Page as this will cause the module to retrieve itself and trigger an infinite loop and a system error will occur.\r\nInstead, try being specific with the page/s you need to retrieve using the filterBy options or avoid rendering the content description field.\r\n{{endSection}}\r\n\r\n\r\n    List a Specific Page\r\nIf you want to only list a single specific Page you could filter the items using the Page's ID or perhaps even its name.\r\nTo do this we add the filterBy and filterValue attributes to the Component tag using the specific Page's ID (or their name) to get just that item. For example:\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\", filterBy: \"id\", filterValue: \"1865\" %}\r\nor\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\", filterBy: \"name\", filterValue: \"Documentation\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nDynamic Sub-Page Menu\r\nLet's say you want to have a dynamic on-page menu that lists all pages with the currently viewed folder/directory.\r\nTo do this, we can get the parent ID of the current page (which is the Folder ID) and filter the Page list by parentID.\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", filterBy: \"parentid\", filterValue: \"{{this.parentID}}\", collectionVariable: \"subPages\" %}\r\n\r\n{% for i in subPages.items %}\r\n    {{i.name}}\r\n{% endfor %}\r\n\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nYou cannot use the Component Manager to configure the Component tag for Pages as it's not generally part of the content management process that clients may need to utilise.\r\n\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_counter\" %}\r\n{{endSection}}\r\n",
  "ItemTags": [
  "Pages"
],
  "Author_Name": "",
  "Author_Url": "",
  "Author": "",
  "SEOTitle": "",
  "MetaTitle": "",
  "MetaDescription": "",
  "ShowPageForSearchEngine": true,
  "CanonicalLink": "",
  "EnableAMP": false,
  "AMPContent": "",
  "CodeEditor": true,
  "ExternalId": 0,
  "SocialMetaTags": "",
  "OpenGraphProperties": "",
  "DisableForSiteSearch": false,
  "SeoPriority": "",
  "CreatedByMemberId": 0,
  "ItemCategories": "",
  "ItemCategoryIdList": "",
  "SKUCode": "",
  "SiteSearchKeywords": "",
  "Active": true,
  "IgnoreUpdates": false,
  "UpdateNotes": "",
  "UpdatesLog": "27-Oct-2020 | 5.6.0 | Added 'ignoreWeighting' parameter'isSearchResult' and 'searchScope' parameter details added.",
  "ExternalResources": "",
  "AdditionalRelatedArticle_Name": "",
  "AdditionalRelatedArticle_Url": "",
  "AdditionalRelatedArticle": "",
  "AdditionalRelatedArticle2_Name": "",
  "AdditionalRelatedArticle2_Url": "",
  "AdditionalRelatedArticle2": "",
  "Authors": "2418",
  "Module_ID": 1870,
  "Module_Alias": "DocumentationPost",
  "ParentName": "Liquid Components",
  "ParentUrl": "/component-types",
  "TemplateName": "Docs Template",
  "IsHome": false
}
}
},
  "isselected": "",
  "isactive": "",
  "isrecent": "",
  "update": "1601358778",
  "nowdate": "1606498077",
  "diffdate": 5139299,
  "diffdays": 59.4826273148148,
  "documentationpost": "\r\n",
  "hasrecent": "x",
  "isdisabled": " disabled",
  "subs": {
  "Id": 2129,
  "Url": "/extras/recaptcha-styling",
  "ParentId": 1882,
  "LastUpdatedDate": "2020-09-29T05:52:58",
  "Name": "ReCaptcha Styling",
  "UrlSlug": "recaptcha-styling",
  "Enabled": true,
  "ReleaseDate": "2018-09-03T00:00:00",
  "ExpiryDate": "2099-12-08T00:00:00",
  "Weighting": 0,
  "Description": "Treepl CMS supports Google reCAPTCHA v2 and v3 implementations. Below are some additional options you can configure.\r\n\r\n    reCAPTCHA v2 Styling\r\nWe can use HTML data attributes to set the Google reCAPTCHA v2 styling - such as 'compact' size option and 'dark/light' theme:\r\n\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"\", lang: \"html\" %}\r\n\r\nSee the external resource links below for further options and configuration\r\n",
  "ItemTags": [
  "Forms"
],
  "Author_Name": "",
  "Author_Url": "",
  "Author": "",
  "SEOTitle": "",
  "MetaTitle": "",
  "MetaDescription": "",
  "ShowPageForSearchEngine": true,
  "CanonicalLink": "",
  "EnableAMP": false,
  "AMPContent": "",
  "CodeEditor": true,
  "ExternalId": 0,
  "SocialMetaTags": "",
  "OpenGraphProperties": "",
  "DisableForSiteSearch": false,
  "SeoPriority": "",
  "CreatedByMemberId": 0,
  "ItemCategories": "",
  "ItemCategoryIdList": "",
  "SKUCode": "",
  "SiteSearchKeywords": "",
  "Active": true,
  "IgnoreUpdates": true,
  "UpdateNotes": "",
  "UpdatesLog": "Preparation for v2 and v3",
  "ExternalResources": "Google reCAPTCHA v2 Docs:https://developers.google.com/recaptcha/docs/displayGoogle reCAPTCHA v3 Docs:https://developers.google.com/recaptcha/docs/v3",
  "AdditionalRelatedArticle_Name": "",
  "AdditionalRelatedArticle_Url": "",
  "AdditionalRelatedArticle": "",
  "AdditionalRelatedArticle2_Name": "",
  "AdditionalRelatedArticle2_Url": "",
  "AdditionalRelatedArticle2": "",
  "Authors": "2418",
  "Module_ID": 1870,
  "Module_Alias": "DocumentationPost",
  "Pagination": {
  "CurrentPage": 1,
  "ItemsPerPage": 100,
  "NumberOfPages": 1,
  "TotalItemsCount": 5
},
  "Params": {
  "source": "Documentation Post",
  "layout": "Documentation Sidebar Item",
  "limit": "100",
  "filterBy": "parentid",
  "type": "module",
  "filterValue": "1882",
  "collectionVariable": "documentationPostCollection"
},
  "Parent": {
  "Id": 1882,
  "Url": "/extras",
  "ParentId": 1861,
  "LastUpdatedDate": "2019-08-24T08:50:20",
  "Name": "Extras",
  "UrlSlug": "extras",
  "Enabled": true,
  "ReleaseDate": "2018-07-27T23:02:00",
  "ExpiryDate": "2099-12-09T03:00:00",
  "Weighting": 970,
  "Description": "",
  "ItemTags": "",
  "Author_Name": "",
  "Author_Url": "",
  "Author": "",
  "SEOTitle": "",
  "MetaTitle": "",
  "MetaDescription": "",
  "ShowPageForSearchEngine": true,
  "CanonicalLink": "",
  "EnableAMP": false,
  "AMPContent": "",
  "CodeEditor": false,
  "ExternalId": 0,
  "SocialMetaTags": "",
  "OpenGraphProperties": "",
  "DisableForSiteSearch": false,
  "SeoPriority": "",
  "CreatedByMemberId": 0,
  "ItemCategories": "",
  "ItemCategoryIdList": "",
  "SKUCode": "",
  "SiteSearchKeywords": "",
  "Icon": "icon-stars",
  "Active": true,
  "Module_ID": 1856,
  "Module_Alias": "DocumentationGroup",
  "Pagination": {
  "CurrentPage": 1,
  "ItemsPerPage": 100,
  "NumberOfPages": 1,
  "TotalItemsCount": 17
},
  "Params": {
  "source": "Documentation Group",
  "layout": "Documentation Sidebar Group List",
  "type": "module",
  "collectionVariable": "docsNav",
  "limit": "100"
},
  "Parent": {
  "Id": 2160,
  "Url": "/component-types/module-page",
  "ParentId": 2127,
  "LastUpdatedDate": "2020-10-27T05:36:34",
  "Name": "module (Page)",
  "UrlSlug": "module-page",
  "Enabled": true,
  "ReleaseDate": "2018-09-20T00:00:00",
  "ExpiryDate": "2099-12-10T00:00:00",
  "Weighting": 900,
  "Description": "This module component fetches data relating to Pages.\r\nPossible use cases for this are creating dynamic menus or automatic on-page sitemaps. Specifically, creating a dynamic on-page sub-menu (of all the pages within the current folder/directory).\r\nPages are based on the same structure as many other modules in Treepl CMS. So you can retrieve, list, sort and filter your site pages just like you might Blog Posts or Custom Modules.\r\n\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_parameters\" %}\r\n{% capture tabularData %}\r\n{% component type: \"snippet\", alias: \"param_table_head\" %}\r\n    {% component type: \"snippet\", alias: \"param_type\", required: \"true\" %},\r\n    {% component type: \"snippet\", alias: \"param_source\", required: \"true\", values: \"Page (default)\" %},\r\n    {% component type: \"snippet\", alias: \"param_layout\", required: \"true\", values: \"Page Detail (default)&lt;Your Layout name&gt;\" %},\r\n    {% component type: \"snippet\", alias: \"param_filterby\" %},\r\n    {% component type: \"snippet\", alias: \"param_filtervalue\" %},\r\n    {% component type: \"snippet\", alias: \"param_sortby\" %},\r\n    {% component type: \"snippet\", alias: \"param_sortorder\" %},\r\n    {% component type: \"snippet\", alias: \"param_ignoreweighting\" %},\r\n    {% component type: \"snippet\", alias: \"param_random\" %},\r\n    {% component type: \"snippet\", alias: \"param_limit\" %},\r\n    {% component type: \"snippet\", alias: \"param_enablepagination\" %},\r\n    {% component type: \"snippet\", alias: \"param_displaypagination\" %},\r\n    {% component type: \"snippet\", alias: \"param_emptymessage\" %},\r\n    {% component type: \"snippet\", alias: \"param_object\" %},\r\n    {% component type: \"snippet\", alias: \"param_collectionvariable\" %},\r\n    {% component type: \"snippet\", alias: \"param_issearchresult\" %},\r\n    {% component type: \"snippet\", alias: \"param_searchscope\" %},\r\n    {% component type: \"snippet\", alias: \"param_customparameter\" %}\r\n{% component type: \"snippet\", alias: \"param_table_foot\" %}\r\n{% endcapture %}\r\n{% component type: \"json\", source_type:\"string\", source:\"{{tabularData}}\", layout:\"/snippets/tabularJSON.layout\" %}\r\n{{endSection}}\r\n\r\n{% component type: \"snippet\", alias: \"section_output\" %}\r\n\r\n{% component source: \"Page\", layout: \"\", type: \"module\", collectionVariable: \"allPages\", limit: \"3\" %}\r\nThe below example has {{allPages.pagination.itemsperpage}} sample items (due to a limit applied) but is otherwise the default structure you will get from this Component.\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{allPages}}\", lang: \"json\" %}\r\n{{endSection}}\r\n\r\n{% component type: \"snippet\", alias: \"section_accessing_data\" %}\r\n\r\nThis data is accessible in two main ways:\r\n\r\n1. Using Liquid in the specified Layout via the this object.\r\n{% capture data %}\r\n{% raw %}\r\n{{this['name']}}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n2. Directly on the Page or Template via a Liquid Collection if collectionVariable was added to the Component tag.\r\n\r\nAn example using collectionVariable with value \"allPages\" to list all \"Page items\" across the site:\r\nHere we suppress any Layout from rendering by setting layout: \"\" as an empty attribute.\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"\", collectionVariable: \"allPages\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nLooping through the collection to render all the item names in a list, giving us:\r\n\r\n\r\n    {% for i in allPages.items %}\r\n        {{i['name']}}\r\n    {% endfor %}\r\n\r\n\r\nThe code:\r\n{% capture data %}\r\n{% raw %}\r\n\r\n    {% for i in allPages.items %}\r\n        {{i['name']}}\r\n    {% endfor %}\r\n\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nAccessing a specific item within the collection. In this case the second item (zero based index), which in our example would render the value {{allPages.items[1]['name']}}\r\n{% capture data %}\r\n{% raw %}\r\n{{allPages.items[1]['name']}}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nAvoid calling all pages, while rendering their content description, via this module when on a Page as this will cause the module to retrieve itself and trigger an infinite loop and a system error will occur.\r\nInstead, try being specific with the page/s you need to retrieve using the filterBy options or avoid rendering the content description field.\r\n{{endSection}}\r\n\r\n\r\n    List a Specific Page\r\nIf you want to only list a single specific Page you could filter the items using the Page's ID or perhaps even its name.\r\nTo do this we add the filterBy and filterValue attributes to the Component tag using the specific Page's ID (or their name) to get just that item. For example:\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\", filterBy: \"id\", filterValue: \"1865\" %}\r\nor\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\", filterBy: \"name\", filterValue: \"Documentation\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nDynamic Sub-Page Menu\r\nLet's say you want to have a dynamic on-page menu that lists all pages with the currently viewed folder/directory.\r\nTo do this, we can get the parent ID of the current page (which is the Folder ID) and filter the Page list by parentID.\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", filterBy: \"parentid\", filterValue: \"{{this.parentID}}\", collectionVariable: \"subPages\" %}\r\n\r\n{% for i in subPages.items %}\r\n    {{i.name}}\r\n{% endfor %}\r\n\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nYou cannot use the Component Manager to configure the Component tag for Pages as it's not generally part of the content management process that clients may need to utilise.\r\n\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_counter\" %}\r\n{{endSection}}\r\n",
  "ItemTags": [
  "Pages"
],
  "Author_Name": "",
  "Author_Url": "",
  "Author": "",
  "SEOTitle": "",
  "MetaTitle": "",
  "MetaDescription": "",
  "ShowPageForSearchEngine": true,
  "CanonicalLink": "",
  "EnableAMP": false,
  "AMPContent": "",
  "CodeEditor": true,
  "ExternalId": 0,
  "SocialMetaTags": "",
  "OpenGraphProperties": "",
  "DisableForSiteSearch": false,
  "SeoPriority": "",
  "CreatedByMemberId": 0,
  "ItemCategories": "",
  "ItemCategoryIdList": "",
  "SKUCode": "",
  "SiteSearchKeywords": "",
  "Active": true,
  "IgnoreUpdates": false,
  "UpdateNotes": "",
  "UpdatesLog": "27-Oct-2020 | 5.6.0 | Added 'ignoreWeighting' parameter'isSearchResult' and 'searchScope' parameter details added.",
  "ExternalResources": "",
  "AdditionalRelatedArticle_Name": "",
  "AdditionalRelatedArticle_Url": "",
  "AdditionalRelatedArticle": "",
  "AdditionalRelatedArticle2_Name": "",
  "AdditionalRelatedArticle2_Url": "",
  "AdditionalRelatedArticle2": "",
  "Authors": "2418",
  "Module_ID": 1870,
  "Module_Alias": "DocumentationPost",
  "ParentName": "Liquid Components",
  "ParentUrl": "/component-types",
  "TemplateName": "Docs Template",
  "IsHome": false
}
}
},
  "updatep": "1603776994",
  "nowdatep": "1606498077",
  "diffdatep": 2721083,
  "diffdaysp": 31.4940162037037,
  "nameplural": "module (Page)",
  "namesingular": "module (Page)",
  "groupsource": "Documentation Group",
  "parentgroup": {
  "Pagination": {
  "CurrentPage": 1,
  "ItemsPerPage": 10,
  "NumberOfPages": 1,
  "TotalItemsCount": 1
},
  "Items": [
  {
    "Id": 2127,
    "Url": "/component-types",
    "ParentId": 1861,
    "LastUpdatedDate": "2020-08-04T00:28:52",
    "Name": "Liquid Components",
    "UrlSlug": "component-types",
    "Enabled": true,
    "ReleaseDate": "2018-09-03T00:00:00",
    "ExpiryDate": "2099-12-09T00:00:00",
    "Weighting": 984,
    "Description": "",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": false,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "Icon": "icon-waves",
    "Active": true,
    "Module_ID": 1856,
    "Module_Alias": "DocumentationGroup",
    "Pagination": {
      "CurrentPage": 1,
      "ItemsPerPage": 100,
      "NumberOfPages": 1,
      "TotalItemsCount": 17
    },
    "Params": {
      "source": "Documentation Group",
      "layout": "Documentation Sidebar Group List",
      "type": "module",
      "collectionVariable": "docsNav",
      "limit": "100"
    },
    "Parent": {
      "Type": 3
    }
  }
],
  "Params": {
  "source": "Documentation Group",
  "layout": "",
  "filterBy": "id",
  "filterValue": "2127",
  "collectionVariable": "parentGroup",
  "type": "module"
},
  "Parent": {
  "Id": 2160,
  "Url": "/component-types/module-page",
  "ParentId": 2127,
  "LastUpdatedDate": "2020-10-27T05:36:34",
  "Name": "module (Page)",
  "UrlSlug": "module-page",
  "Enabled": true,
  "ReleaseDate": "2018-09-20T00:00:00",
  "ExpiryDate": "2099-12-10T00:00:00",
  "Weighting": 900,
  "Description": "This module component fetches data relating to Pages.\r\nPossible use cases for this are creating dynamic menus or automatic on-page sitemaps. Specifically, creating a dynamic on-page sub-menu (of all the pages within the current folder/directory).\r\nPages are based on the same structure as many other modules in Treepl CMS. So you can retrieve, list, sort and filter your site pages just like you might Blog Posts or Custom Modules.\r\n\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_parameters\" %}\r\n{% capture tabularData %}\r\n{% component type: \"snippet\", alias: \"param_table_head\" %}\r\n    {% component type: \"snippet\", alias: \"param_type\", required: \"true\" %},\r\n    {% component type: \"snippet\", alias: \"param_source\", required: \"true\", values: \"Page (default)\" %},\r\n    {% component type: \"snippet\", alias: \"param_layout\", required: \"true\", values: \"Page Detail (default)&lt;Your Layout name&gt;\" %},\r\n    {% component type: \"snippet\", alias: \"param_filterby\" %},\r\n    {% component type: \"snippet\", alias: \"param_filtervalue\" %},\r\n    {% component type: \"snippet\", alias: \"param_sortby\" %},\r\n    {% component type: \"snippet\", alias: \"param_sortorder\" %},\r\n    {% component type: \"snippet\", alias: \"param_ignoreweighting\" %},\r\n    {% component type: \"snippet\", alias: \"param_random\" %},\r\n    {% component type: \"snippet\", alias: \"param_limit\" %},\r\n    {% component type: \"snippet\", alias: \"param_enablepagination\" %},\r\n    {% component type: \"snippet\", alias: \"param_displaypagination\" %},\r\n    {% component type: \"snippet\", alias: \"param_emptymessage\" %},\r\n    {% component type: \"snippet\", alias: \"param_object\" %},\r\n    {% component type: \"snippet\", alias: \"param_collectionvariable\" %},\r\n    {% component type: \"snippet\", alias: \"param_issearchresult\" %},\r\n    {% component type: \"snippet\", alias: \"param_searchscope\" %},\r\n    {% component type: \"snippet\", alias: \"param_customparameter\" %}\r\n{% component type: \"snippet\", alias: \"param_table_foot\" %}\r\n{% endcapture %}\r\n{% component type: \"json\", source_type:\"string\", source:\"{{tabularData}}\", layout:\"/snippets/tabularJSON.layout\" %}\r\n{{endSection}}\r\n\r\n{% component type: \"snippet\", alias: \"section_output\" %}\r\n\r\n{% component source: \"Page\", layout: \"\", type: \"module\", collectionVariable: \"allPages\", limit: \"3\" %}\r\nThe below example has {{allPages.pagination.itemsperpage}} sample items (due to a limit applied) but is otherwise the default structure you will get from this Component.\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{allPages}}\", lang: \"json\" %}\r\n{{endSection}}\r\n\r\n{% component type: \"snippet\", alias: \"section_accessing_data\" %}\r\n\r\nThis data is accessible in two main ways:\r\n\r\n1. Using Liquid in the specified Layout via the this object.\r\n{% capture data %}\r\n{% raw %}\r\n{{this['name']}}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n2. Directly on the Page or Template via a Liquid Collection if collectionVariable was added to the Component tag.\r\n\r\nAn example using collectionVariable with value \"allPages\" to list all \"Page items\" across the site:\r\nHere we suppress any Layout from rendering by setting layout: \"\" as an empty attribute.\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"\", collectionVariable: \"allPages\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nLooping through the collection to render all the item names in a list, giving us:\r\n\r\n\r\n    {% for i in allPages.items %}\r\n        {{i['name']}}\r\n    {% endfor %}\r\n\r\n\r\nThe code:\r\n{% capture data %}\r\n{% raw %}\r\n\r\n    {% for i in allPages.items %}\r\n        {{i['name']}}\r\n    {% endfor %}\r\n\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nAccessing a specific item within the collection. In this case the second item (zero based index), which in our example would render the value {{allPages.items[1]['name']}}\r\n{% capture data %}\r\n{% raw %}\r\n{{allPages.items[1]['name']}}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nAvoid calling all pages, while rendering their content description, via this module when on a Page as this will cause the module to retrieve itself and trigger an infinite loop and a system error will occur.\r\nInstead, try being specific with the page/s you need to retrieve using the filterBy options or avoid rendering the content description field.\r\n{{endSection}}\r\n\r\n\r\n    List a Specific Page\r\nIf you want to only list a single specific Page you could filter the items using the Page's ID or perhaps even its name.\r\nTo do this we add the filterBy and filterValue attributes to the Component tag using the specific Page's ID (or their name) to get just that item. For example:\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\", filterBy: \"id\", filterValue: \"1865\" %}\r\nor\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\", filterBy: \"name\", filterValue: \"Documentation\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nDynamic Sub-Page Menu\r\nLet's say you want to have a dynamic on-page menu that lists all pages with the currently viewed folder/directory.\r\nTo do this, we can get the parent ID of the current page (which is the Folder ID) and filter the Page list by parentID.\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", filterBy: \"parentid\", filterValue: \"{{this.parentID}}\", collectionVariable: \"subPages\" %}\r\n\r\n{% for i in subPages.items %}\r\n    {{i.name}}\r\n{% endfor %}\r\n\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nYou cannot use the Component Manager to configure the Component tag for Pages as it's not generally part of the content management process that clients may need to utilise.\r\n\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_counter\" %}\r\n{{endSection}}\r\n",
  "ItemTags": [
  "Pages"
],
  "Author_Name": "",
  "Author_Url": "",
  "Author": "",
  "SEOTitle": "",
  "MetaTitle": "",
  "MetaDescription": "",
  "ShowPageForSearchEngine": true,
  "CanonicalLink": "",
  "EnableAMP": false,
  "AMPContent": "",
  "CodeEditor": true,
  "ExternalId": 0,
  "SocialMetaTags": "",
  "OpenGraphProperties": "",
  "DisableForSiteSearch": false,
  "SeoPriority": "",
  "CreatedByMemberId": 0,
  "ItemCategories": "",
  "ItemCategoryIdList": "",
  "SKUCode": "",
  "SiteSearchKeywords": "",
  "Active": true,
  "IgnoreUpdates": false,
  "UpdateNotes": "",
  "UpdatesLog": "27-Oct-2020 | 5.6.0 | Added 'ignoreWeighting' parameter'isSearchResult' and 'searchScope' parameter details added.",
  "ExternalResources": "",
  "AdditionalRelatedArticle_Name": "",
  "AdditionalRelatedArticle_Url": "",
  "AdditionalRelatedArticle": "",
  "AdditionalRelatedArticle2_Name": "",
  "AdditionalRelatedArticle2_Url": "",
  "AdditionalRelatedArticle2": "",
  "Authors": "2418",
  "Module_ID": 1870,
  "Module_Alias": "DocumentationPost",
  "ParentName": "Liquid Components",
  "ParentUrl": "/component-types",
  "TemplateName": "Docs Template",
  "IsHome": false
}
},
  "data": "{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\" %}\r\n{% endraw %}",
  "params": "",
  "$$incdec$$$code_counter": 0,
  "codecounter": "0",
  "tabulardata": "{\r\n\t\"rows\": [{\r\n\t\t\"cells\": [\r\n            {\"value\": \"Parameter\"},\r\n            {\"value\": \"Values\"},\r\n            {\"value\": \"Required\"},\r\n            {\"value\": \"Description\"}\r\n        ]\r\n\t},{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"type\"\r\n\t}, {\r\n\t\t\"value\": \"module (default)\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"This is the name of the entity that needs to be used for the component retrieving function.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"source\"\r\n\t}, {\r\n\t\t\"value\": \"Page (default)\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"The entity/alias name or ID that the data is to be sourced from.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"layout\"\r\n\t}, {\r\n\t\t\"value\": \"Page Detail (default)&lt;Your Layout name&gt;\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"The layout name you want to use for rendering the component. The layout name is referenced from the available Layouts of the source specified.While this parameter is required to render your Layout markup, if the parameter is blank, has an incorrectly referenced Layout, or is removed altogether then the component will still output the modules item data to a Liquid collection which can be accessed via the collectionVariable parameter.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"filterBy\"\r\n\t}, {\r\n\t\t\"value\": \"idparentidnameweightingurlurlslugreleasedateexpirydateLastUpdatedDateAuthorItemCategoriesItemTags&lt;CustomPropertyName&gt;...and any other top level properties available for the module\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"The name of the property to filter by. If empty or not present, no filtering will be used.Remove spaces from custom property names here.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"filterValue\"\r\n\t}, {\r\n\t\t\"value\": \"&lt;your value&gt;\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"Your specific value to filter by, eg: name, id, number, date, etc.Liquid variables can be used here also. If present but no value set, no items will be returned.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"sortBy\"\r\n\t}, {\r\n\t\t\"value\": \"idparentidnameweightingurlurlslugreleasedateexpirydateLastUpdatedDateAuthorItemCategoriesItemTags&lt;CustomPropertyName&gt;...and any other top level properties available for the module\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"The name of the property to sort by. If empty or not present, alpha/numeric sorting will be used.Remove spaces from custom property names here.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"sortOrder\"\r\n\t}, {\r\n\t\t\"value\": \"ASC (default)DESC\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"ASC sorts the items in ascending order while DESC sorts in descending order (based on alpha/numeric or date sorting).If empty or not present, alpha/numeric sorting will be used.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"ignoreWeighting\"\r\n\t}, {\r\n\t\t\"value\": \"false (default)true\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"Enables/disables sorting items first by their weighting values. When false items will sort by their weighting values first, followed by any sortBy properties (or the default alpha/numeric sorting if sortBy is empty or not present). If true item weightings will be ignored and sorting will only be applied via sortBy or default sorting.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"random\"\r\n\t}, {\r\n\t\t\"value\": \"false (default)true\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"Displays the available items in a random order.If used in conjunction with sortBy, that sorting criteria will be applied to the randomly retrieved results. So, if retrieving all, or most, of the items they will not appear to be random since they will then be sorted back into a logical order. To overcome this, set the sortBy parameter to 'enabled' (or another unused property) as this will not provide any viable sorting criteria* and the items will not be sorted from their initial random order.* Unless there are weighted items, which will always override the random option.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"limit\"\r\n\t}, {\r\n\t\t\"value\": \"10 (default)&lt;number&gt;\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"The maximum number of items returned. If displayPagination is enabled this determines the maximum number of items per page.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"enablePagination\"\r\n\t}, {\r\n\t\t\"value\": \"true (default)false\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"Enables/disables pagination for the component. This is useful for avoiding pagniation affects for a specific component when multiple components of the same module are output on the same page and do use pagination.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"displayPagination\"\r\n\t}, {\r\n\t\t\"value\": \"false (default)true\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"Displays pagination if there are more items available than the limit set.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"emptyMessage\"\r\n\t}, {\r\n\t\t\"value\": \"&lt;Your custom message&gt;\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"Custom content that is rendered if no items are returned by the Component. The default is no content.Liquid variables are supported here, although Liquid logic tags and HTML are not.If using Liquid variables with filters added, be sure to change any double quotes to single quotes. For eg: emptyMessage: &ldquo;&#123;&#123; myVariable | prepend: 'Error: ' &#125;&#125;&rdquo;To use HTML in your empty message, first capture it using a Liquid capture, then insert the capture variable into the emptyMessage parameter.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"object\"\r\n\t}, {\r\n\t\t\"value\": \"item (default)collection\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"Determines the method for Liquid rendering.item returns each item iteratively, one after another, for output (generally, output to a container element with no need for looping through the data).collection returns all items as one collection for output (your container element and looping logic would be handled in the Components Layout).\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"collectionVariable\"\r\n\t}, {\r\n\t\t\"value\": \"&lt;yourLiquidVariableName&gt;\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"Assigns the data to a Liquid collection enabling further access to the data on the Page or Template using Liquid.Your collectionVariable value must only contain English letters, numbers or underscores. Spaces or special characters are not supported.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"isSearchResult\"\r\n\t}, {\r\n\t\t\"value\": \"false (default)true\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"Allows search parameters in the URL to override the components output. Therefore, this parameter can be used to output module specific search results from a submitted search form.Likewise, Tag, Category, and Archive components can be used in conjunction with this parameter for filtering the module&#39;s output.URL search parameters will override any corresponding parameters in the component. If no search parameters are present in the URL, isSearchResult will be ignored.Any value other than true, (including an empty value), will disable the search functionality and the component will output its regular data.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"searchScope\"\r\n\t}, {\r\n\t\t\"value\": \"eg:{'prop_ParentId':'1234', 'prop_ReleaseDate_Min':'2018-07-01', 'prop_ReleaseDate_Max':'2018-07-31', 'prop_KeyWords':'Your Keywords', 'prop_ItemTags':['tag1','tag2'], 'page':'2'}\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"Allows a search on the module without search parameters needed in the URL. Instead, search parameters are added to the value of this parameter. Therefore, this parameter can be used to output module specific search results from hard-coded (or Liquid) values without the use of a search form.Added search parameters will override any corresponding parameters otherwise configured on the component. If no search parameters are present, searchScope will be ignored.This value supports Liquid and can therefore be constructed with Liquid data/variables.\"\r\n\t}]\r\n},\r\n{\r\n\t\"cells\": [{\r\n\t\t\"value\": \"&lt;customParameter&gt;\"\r\n\t}, {\r\n\t\t\"value\": \"&lt;your custom value&gt;\"\r\n\t}, {\r\n\t\t\"value\": \"\"\r\n\t}, {\r\n\t\t\"value\": \"You can add your own additional parameters (name/value pairs) to the Component tag. These will be passed to the Components Layout (and the collectionVariable if used) for use via Liquid.Your &lt;customParameter&gt; name must only contain English letters, numbers or underscores. Spaces or special characters are not supported.You can use HTML as the value here, just be sure to change any double quotes in your HTML to single quotes.\"\r\n\t}]\r\n}]\r\n}",
  "row": {
  "cells": [
  {
    "value": "&lt;customParameter&gt;"
  },
  {
    "value": "&lt;your custom value&gt;"
  },
  {
    "value": ""
  },
  {
    "value": "You can add your own additional parameters (name/value pairs) to the Component tag. These will be passed to the Components Layout (and the collectionVariable if used) for use via Liquid.Your &lt;customParameter&gt; name must only contain English letters, numbers or underscores. Spaces or special characters are not supported.You can use HTML as the value here, just be sure to change any double quotes in your HTML to single quotes."
  }
]
},
  "ifheader": "",
  "rowcount": "",
  "cell": {
  "value": "You can add your own additional parameters (name/value pairs) to the Component tag. These will be passed to the Components Layout (and the collectionVariable if used) for use via Liquid.Your &lt;customParameter&gt; name must only contain English letters, numbers or underscores. Spaces or special characters are not supported.You can use HTML as the value here, just be sure to change any double quotes in your HTML to single quotes."
},
  "colcount": "",
  "allpages": {
  "Pagination": {
  "CurrentPage": 1,
  "ItemsPerPage": 3,
  "NumberOfPages": 7,
  "TotalItemsCount": 19
},
  "Items": [
  {
    "Id": 2225,
    "Url": "/demo-cs/index",
    "ParentId": 2224,
    "LastUpdatedDate": "2019-02-28T20:45:39",
    "Name": "_Home",
    "UrlSlug": "index",
    "Enabled": true,
    "ReleaseDate": "2018-11-24T18:00:00",
    "ExpiryDate": "2099-12-10T18:00:00",
    "Weighting": 0,
    "Description": "\r\n    A Demo Site for Treepl CMS Docs\r\n    Treepl CMS is an all-in-one system for creating ever-growing websites.For designers, for coders, for agencies - for you!\r\n    For the official documentation see here.\r\n",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "Docs Demo Site for Treepl CMS",
    "MetaTitle": "Docs Demo Site for Treepl CMS",
    "MetaDescription": "Treepl CMS is an all-in-one system for creating ever-growing websites.\r\nFor designers, for coders, for agencies - for you!",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": true,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": {
      "title": "",
      "type": "",
      "url": "",
      "locale": "",
      "image": ""
    },
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "FtpFullPath": "Content\\Pages\\demo-cs\\index.html",
    "Module_ID": 1522,
    "Module_Alias": "Page"
  },
  {
    "Id": 2538,
    "Url": "/_sandbox",
    "ParentId": -1,
    "LastUpdatedDate": "2020-10-28T00:50:00",
    "Name": "_sandbox",
    "UrlSlug": "_sandbox",
    "Enabled": true,
    "ReleaseDate": "2020-05-07T00:00:00",
    "ExpiryDate": "2099-12-11T13:00:00",
    "Weighting": 0,
    "Description": "{% comment %}\n{% component type: \"grouped_items\", source: \"Products\", itemId: \"2535\", layout: \"\", collectionVariable: \"groupedCollection\" %}\n\n\n{{groupedCollection | raw | escape | lstrip}}\n\n\n\nvar obj = {{groupedCollection | raw | replace: 'script', 'escapedScript'}}\n    \n$('#jj code').text(JSON.stringify(obj, null, 4));\n\n\n\n\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{groupedCollection}}\", lang: \"json\" %}\n{% endcomment %}\n\n{{liquidContext | strip_html}}",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": false,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": true,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": true,
    "SeoPriority": "0.5",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "FtpFullPath": "Content\\Pages\\_sandbox.html",
    "Module_ID": 1522,
    "Module_Alias": "Page"
  },
  {
    "Id": 2227,
    "Url": "/demo-cs/ajax-form",
    "ParentId": 2224,
    "LastUpdatedDate": "2019-02-28T20:45:34",
    "Name": "AJAX Form",
    "UrlSlug": "ajax-form",
    "Enabled": true,
    "ReleaseDate": "2018-11-24T18:00:00",
    "ExpiryDate": "2099-12-10T18:00:00",
    "Weighting": 0,
    "Description": "{% component type: \"form\", alias: \"demo_ajax_example\", collectionVariable: \"formData\" %}\r\n{% capture form %}{% component type: \"form\", alias: \"demo_ajax_example\" %}{% endcapture %}\r\n\r\nBasic AJAX Form Submission Demo\r\n\r\n    \r\n        {{form}}\r\n    \r\n    \r\n        \r\n            Form Code\r\n            Liquid Output\r\n        \r\n        \r\n            \r\n                NOTE: This script assumes jQuery is being loaded on your site.\r\n                {{form | escape}}\r\n            \r\n            \r\n                {{formData | escape }}\r\n            \r\n        \r\n    \r\n",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": true,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "FtpFullPath": "Content\\Pages\\demo-cs\\ajax-form.html",
    "Module_ID": 1522,
    "Module_Alias": "Page"
  }
],
  "Params": {
  "source": "Page",
  "layout": "",
  "type": "module",
  "collectionVariable": "allPages",
  "limit": "3"
},
  "Parent": {
  "Id": 2160,
  "Url": "/component-types/module-page",
  "ParentId": 2127,
  "LastUpdatedDate": "2020-10-27T05:36:34",
  "Name": "module (Page)",
  "UrlSlug": "module-page",
  "Enabled": true,
  "ReleaseDate": "2018-09-20T00:00:00",
  "ExpiryDate": "2099-12-10T00:00:00",
  "Weighting": 900,
  "Description": "This module component fetches data relating to Pages.\r\nPossible use cases for this are creating dynamic menus or automatic on-page sitemaps. Specifically, creating a dynamic on-page sub-menu (of all the pages within the current folder/directory).\r\nPages are based on the same structure as many other modules in Treepl CMS. So you can retrieve, list, sort and filter your site pages just like you might Blog Posts or Custom Modules.\r\n\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_parameters\" %}\r\n{% capture tabularData %}\r\n{% component type: \"snippet\", alias: \"param_table_head\" %}\r\n    {% component type: \"snippet\", alias: \"param_type\", required: \"true\" %},\r\n    {% component type: \"snippet\", alias: \"param_source\", required: \"true\", values: \"Page (default)\" %},\r\n    {% component type: \"snippet\", alias: \"param_layout\", required: \"true\", values: \"Page Detail (default)&lt;Your Layout name&gt;\" %},\r\n    {% component type: \"snippet\", alias: \"param_filterby\" %},\r\n    {% component type: \"snippet\", alias: \"param_filtervalue\" %},\r\n    {% component type: \"snippet\", alias: \"param_sortby\" %},\r\n    {% component type: \"snippet\", alias: \"param_sortorder\" %},\r\n    {% component type: \"snippet\", alias: \"param_ignoreweighting\" %},\r\n    {% component type: \"snippet\", alias: \"param_random\" %},\r\n    {% component type: \"snippet\", alias: \"param_limit\" %},\r\n    {% component type: \"snippet\", alias: \"param_enablepagination\" %},\r\n    {% component type: \"snippet\", alias: \"param_displaypagination\" %},\r\n    {% component type: \"snippet\", alias: \"param_emptymessage\" %},\r\n    {% component type: \"snippet\", alias: \"param_object\" %},\r\n    {% component type: \"snippet\", alias: \"param_collectionvariable\" %},\r\n    {% component type: \"snippet\", alias: \"param_issearchresult\" %},\r\n    {% component type: \"snippet\", alias: \"param_searchscope\" %},\r\n    {% component type: \"snippet\", alias: \"param_customparameter\" %}\r\n{% component type: \"snippet\", alias: \"param_table_foot\" %}\r\n{% endcapture %}\r\n{% component type: \"json\", source_type:\"string\", source:\"{{tabularData}}\", layout:\"/snippets/tabularJSON.layout\" %}\r\n{{endSection}}\r\n\r\n{% component type: \"snippet\", alias: \"section_output\" %}\r\n\r\n{% component source: \"Page\", layout: \"\", type: \"module\", collectionVariable: \"allPages\", limit: \"3\" %}\r\nThe below example has {{allPages.pagination.itemsperpage}} sample items (due to a limit applied) but is otherwise the default structure you will get from this Component.\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{allPages}}\", lang: \"json\" %}\r\n{{endSection}}\r\n\r\n{% component type: \"snippet\", alias: \"section_accessing_data\" %}\r\n\r\nThis data is accessible in two main ways:\r\n\r\n1. Using Liquid in the specified Layout via the this object.\r\n{% capture data %}\r\n{% raw %}\r\n{{this['name']}}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n2. Directly on the Page or Template via a Liquid Collection if collectionVariable was added to the Component tag.\r\n\r\nAn example using collectionVariable with value \"allPages\" to list all \"Page items\" across the site:\r\nHere we suppress any Layout from rendering by setting layout: \"\" as an empty attribute.\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"\", collectionVariable: \"allPages\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nLooping through the collection to render all the item names in a list, giving us:\r\n\r\n\r\n    {% for i in allPages.items %}\r\n        {{i['name']}}\r\n    {% endfor %}\r\n\r\n\r\nThe code:\r\n{% capture data %}\r\n{% raw %}\r\n\r\n    {% for i in allPages.items %}\r\n        {{i['name']}}\r\n    {% endfor %}\r\n\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nAccessing a specific item within the collection. In this case the second item (zero based index), which in our example would render the value {{allPages.items[1]['name']}}\r\n{% capture data %}\r\n{% raw %}\r\n{{allPages.items[1]['name']}}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nAvoid calling all pages, while rendering their content description, via this module when on a Page as this will cause the module to retrieve itself and trigger an infinite loop and a system error will occur.\r\nInstead, try being specific with the page/s you need to retrieve using the filterBy options or avoid rendering the content description field.\r\n{{endSection}}\r\n\r\n\r\n    List a Specific Page\r\nIf you want to only list a single specific Page you could filter the items using the Page's ID or perhaps even its name.\r\nTo do this we add the filterBy and filterValue attributes to the Component tag using the specific Page's ID (or their name) to get just that item. For example:\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\", filterBy: \"id\", filterValue: \"1865\" %}\r\nor\r\n{% component type: \"module\", source: \"Page\", layout: \"Page Detail\", filterBy: \"name\", filterValue: \"Documentation\" %}\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nDynamic Sub-Page Menu\r\nLet's say you want to have a dynamic on-page menu that lists all pages with the currently viewed folder/directory.\r\nTo do this, we can get the parent ID of the current page (which is the Folder ID) and filter the Page list by parentID.\r\n{% capture data %}\r\n{% raw %}\r\n{% component type: \"module\", source: \"Page\", filterBy: \"parentid\", filterValue: \"{{this.parentID}}\", collectionVariable: \"subPages\" %}\r\n\r\n{% for i in subPages.items %}\r\n    {{i.name}}\r\n{% endfor %}\r\n\r\n{% endraw %}\r\n{% endcapture %}\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\nYou cannot use the Component Manager to configure the Component tag for Pages as it's not generally part of the content management process that clients may need to utilise.\r\n\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_counter\" %}\r\n{{endSection}}\r\n",
  "ItemTags": [
  "Pages"
],
  "Author_Name": "",
  "Author_Url": "",
  "Author": "",
  "SEOTitle": "",
  "MetaTitle": "",
  "MetaDescription": "",
  "ShowPageForSearchEngine": true,
  "CanonicalLink": "",
  "EnableAMP": false,
  "AMPContent": "",
  "CodeEditor": true,
  "ExternalId": 0,
  "SocialMetaTags": "",
  "OpenGraphProperties": "",
  "DisableForSiteSearch": false,
  "SeoPriority": "",
  "CreatedByMemberId": 0,
  "ItemCategories": "",
  "ItemCategoryIdList": "",
  "SKUCode": "",
  "SiteSearchKeywords": "",
  "Active": true,
  "IgnoreUpdates": false,
  "UpdateNotes": "",
  "UpdatesLog": "27-Oct-2020 | 5.6.0 | Added 'ignoreWeighting' parameter'isSearchResult' and 'searchScope' parameter details added.",
  "ExternalResources": "",
  "AdditionalRelatedArticle_Name": "",
  "AdditionalRelatedArticle_Url": "",
  "AdditionalRelatedArticle": "",
  "AdditionalRelatedArticle2_Name": "",
  "AdditionalRelatedArticle2_Url": "",
  "AdditionalRelatedArticle2": "",
  "Authors": "2418",
  "Module_ID": 1870,
  "Module_Alias": "DocumentationPost",
  "ParentName": "Liquid Components",
  "ParentUrl": "/component-types",
  "TemplateName": "Docs Template",
  "IsHome": false
}
}
}</pre>",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": false,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": true,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": true,
    "SeoPriority": "0.5",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "FtpFullPath": "Content\\Pages\\_sandbox.html",
    "Module_ID": 1522,
    "Module_Alias": "Page"
  },
  {
    "Id": 2227,
    "Url": "/demo-cs/ajax-form",
    "ParentId": 2224,
    "LastUpdatedDate": "2019-02-28T20:45:34",
    "Name": "AJAX Form",
    "UrlSlug": "ajax-form",
    "Enabled": true,
    "ReleaseDate": "2018-11-24T18:00:00",
    "ExpiryDate": "2099-12-10T18:00:00",
    "Weighting": 0,
    "Description": "{% component type: \"form\", alias: \"demo_ajax_example\", collectionVariable: \"formData\" %}\r\n\r\n\r\n<h1>Basic AJAX Form Submission Demo</h1>\r\n<div class=\"grid-x grid-padding-x\">\r\n    <div class=\"cell medium-6\">\r\n        <p>{% component type: \"form\", alias: \"demo_ajax_example\" %}</p>\r\n    </div>\r\n    <div class=\"cell medium-6\">\r\n        <ul class=\"tabs\" data-tabs id=\"code-tabs\">\r\n            <li class=\"tabs-title is-active\"><a href=\"#panel1\" aria-selected=\"true\">Form Code</a></li>\r\n            <li class=\"tabs-title\"><a data-tabs-target=\"panel2\" href=\"#panel2\">Liquid Output</a></li>\r\n        </ul>\r\n        <div class=\"tabs-content\" data-tabs-content=\"code-tabs\">\r\n            <div class=\"tabs-panel is-active\" id=\"panel1\">\r\n                <p class=\"callout warning\">NOTE: This script assumes jQuery is being loaded on your site.</p>\r\n                <pre>{% component type: \&quot;form\&quot;, alias: \&quot;demo_ajax_example\&quot; %}</pre>\r\n            </div>\r\n            <div class=\"tabs-panel\" id=\"panel2\">\r\n                <pre></pre>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</div>",
    "ItemTags": null,
    "Author_Name": null,
    "Author_Url": null,
    "Author": "",
    "SEOTitle": "",
    "MetaTitle": "",
    "MetaDescription": "",
    "ShowPageForSearchEngine": true,
    "CanonicalLink": "",
    "EnableAMP": false,
    "AMPContent": "",
    "CodeEditor": true,
    "ExternalId": 0,
    "SocialMetaTags": "",
    "OpenGraphProperties": "",
    "DisableForSiteSearch": false,
    "SeoPriority": "",
    "CreatedByMemberId": 0,
    "ItemCategories": null,
    "ItemCategoryIdList": null,
    "SKUCode": "",
    "SiteSearchKeywords": "",
    "FtpFullPath": "Content\\Pages\\demo-cs\\ajax-form.html",
    "Module_ID": 1522,
    "Module_Alias": "Page"
  }
],
  "Params": {
  "source": "Page",
  "layout": "",
  "type": "module",
  "collectionVariable": "allPages",
  "limit": "3"
},
  "Parent": {
  "Id": 2160,
  "Url": "/component-types/module-page",
  "ParentId": 2127,
  "LastUpdatedDate": "2020-10-27T05:36:34",
  "Name": "module (Page)",
  "UrlSlug": "module-page",
  "Enabled": true,
  "ReleaseDate": "2018-09-20T00:00:00",
  "ExpiryDate": "2099-12-10T00:00:00",
  "Weighting": 900,
  "Description": "<p>This module component fetches data relating to Pages.</p>\r\n<p>Possible use cases for this are creating dynamic menus or automatic on-page sitemaps. Specifically, creating a dynamic on-page sub-menu (of all the pages within the current folder/directory).</p>\r\n<p class=\"notice-tip\">Pages are based on the same structure as many other modules in Treepl CMS. So you can retrieve, list, sort and filter your site pages just like you might Blog Posts or Custom Modules.</p>\r\n\r\n\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n\r\n{% component type: \"snippet\", alias: \"section_parameters\" %}\r\n\r\n{% component type: \"json\", source_type:\"string\", source:\"{{tabularData}}\", layout:\"/snippets/tabularJSON.layout\" %}\r\n</section>\r\n\r\n{% component type: \"snippet\", alias: \"section_output\" %}\r\n\r\n{% component source: \"Page\", layout: "", type: \"module\", collectionVariable: \"allPages\", limit: \"3\" %}\r\n<p>The below example has 3 sample <code>items</code> (due to a <code>limit</code> applied) but is otherwise the default structure you will get from this Component.</p>\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{allPages}}\", lang: \"json\" %}\r\n</section>\r\n\r\n{% component type: \"snippet\", alias: \"section_accessing_data\" %}\r\n\r\n<p>This data is accessible in two main ways:</p>\r\n\r\n<p>1. Using Liquid in the specified Layout via the <code>this</code> object.</p>\r\n\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n<p>2. Directly on the Page or Template via a Liquid Collection if <code>collectionVariable</code> was added to the Component tag.</p>\r\n\r\n<p>An example using <code>collectionVariable</code> with value \"allPages\" to list all \"Page items\" across the site:</p>\r\n<p class=\"notice-note\">Here we suppress any Layout from rendering by setting <code>layout: \"\"</code> as an empty attribute.</p>\r\n\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n<p><em>Looping through the collection to render all the item names in a list, giving us:</em></p>\r\n\r\n<ul>\r\n    \r\n        <li>_Home</li>\r\n    \r\n        <li>_sandbox</li>\r\n    \r\n        <li>AJAX Form</li>\r\n    \r\n</ul>\r\n<br>\r\n<p><em>The code:</em></p>\r\n\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n<p><em>Accessing a specific item within the collection. In this case the second item (zero based index), which in our example would render the value <code>_sandbox</code></em></p>\r\n\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n<p class=\"notice-warning\">Avoid calling all pages, while rendering their content description, via this module when on a Page as this will cause the module to retrieve itself and trigger an infinite loop and a system error will occur.<br>\r\nInstead, try being specific with the page/s you need to retrieve using the <code>filterBy</code> options or avoid rendering the content description field.</p>\r\n</section>\r\n\r\n<section id=\"secListFiltered\">\r\n    <h2>List a Specific Page</h2>\r\n<p>If you want to only list a single specific Page you could filter the items using the Page's ID or perhaps even its name.</p>\r\n<p>To do this we add the <code>filterBy</code> and <code>filterValue</code> attributes to the Component tag using the specific Page's ID (or their name) to get just that item. For example:</p>\r\n\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n<section id=\"secDynamicSubPageMenu\">\r\n<h3>Dynamic Sub-Page Menu</h3>\r\n<p>Let's say you want to have a dynamic on-page menu that lists all pages with the currently viewed folder/directory.</p>\r\n<p>To do this, we can get the parent ID of the current page (which is the Folder ID) and filter the Page list by <code>parentID</code>.</p>\r\n\r\n{% component type: \"snippet\", alias: \"code_block_processor\", data: \"{{data}}\", lang: \"liquid\" %}\r\n\r\n<p class=\"notice-note\">You <b>cannot</b> use the Component Manager to configure the Component tag for Pages as it's not generally part of the content management process that clients may need to utilise.</p>\r\n</section>\r\n</section>\r\n\r\n{% component type: \"snippet\", alias: \"section_counter\" %}\r\n</section>\r\n",
  "ItemTags": [
  "Pages"
],
  "Author_Name": "",
  "Author_Url": "",
  "Author": "",
  "SEOTitle": "",
  "MetaTitle": "",
  "MetaDescription": "",
  "ShowPageForSearchEngine": true,
  "CanonicalLink": "",
  "EnableAMP": false,
  "AMPContent": "",
  "CodeEditor": true,
  "ExternalId": 0,
  "SocialMetaTags": "",
  "OpenGraphProperties": "",
  "DisableForSiteSearch": false,
  "SeoPriority": "",
  "CreatedByMemberId": 0,
  "ItemCategories": "",
  "ItemCategoryIdList": "",
  "SKUCode": "",
  "SiteSearchKeywords": "",
  "Active": true,
  "IgnoreUpdates": false,
  "UpdateNotes": "",
  "UpdatesLog": "<ul><li>27-Oct-2020 | 5.6.0 | Added 'ignoreWeighting' parameter</li><li>'isSearchResult' and 'searchScope' parameter details added.</li></ul>",
  "ExternalResources": "",
  "AdditionalRelatedArticle_Name": "",
  "AdditionalRelatedArticle_Url": "",
  "AdditionalRelatedArticle": "",
  "AdditionalRelatedArticle2_Name": "",
  "AdditionalRelatedArticle2_Url": "",
  "AdditionalRelatedArticle2": "",
  "Authors": "2418",
  "Module_ID": 1870,
  "Module_Alias": "DocumentationPost",
  "ParentName": "Liquid Components",
  "ParentUrl": "/component-types",
  "TemplateName": "Docs Template",
  "IsHome": false
}
}

Accessing the Data

This data is accessible in two main ways:

1. Using Liquid in the specified Layout via the this object.

{{this['name']}}

2. Directly on the Page or Template via a Liquid Collection if collectionVariable was added to the Component tag.

An example using collectionVariable with value "allPages" to list all "Page items" across the site:

Here we suppress any Layout from rendering by setting layout: "" as an empty attribute.

{% component type: "module", source: "Page", layout: "", collectionVariable: "allPages" %}

Looping through the collection to render all the item names in a list, giving us:

  • _Home
  • _sandbox
  • AJAX Form

The code:

<ul>
    {% for i in allPages.items %}
        <li>{{i['name']}}</li>
    {% endfor %}
</ul>

Accessing a specific item within the collection. In this case the second item (zero based index), which in our example would render the value _sandbox

{{allPages.items[1]['name']}}

Avoid calling all pages, while rendering their content description, via this module when on a Page as this will cause the module to retrieve itself and trigger an infinite loop and a system error will occur.
Instead, try being specific with the page/s you need to retrieve using the filterBy options or avoid rendering the content description field.

List a Specific Page

If you want to only list a single specific Page you could filter the items using the Page's ID or perhaps even its name.

To do this we add the filterBy and filterValue attributes to the Component tag using the specific Page's ID (or their name) to get just that item. For example:

{% component type: "module", source: "Page", layout: "Page Detail", filterBy: "id", filterValue: "1865" %}
or
{% component type: "module", source: "Page", layout: "Page Detail", filterBy: "name", filterValue: "Documentation" %}

Dynamic Sub-Page Menu

Let's say you want to have a dynamic on-page menu that lists all pages with the currently viewed folder/directory.

To do this, we can get the parent ID of the current page (which is the Folder ID) and filter the Page list by parentID.

{% component type: "module", source: "Page", filterBy: "parentid", filterValue: "{{this.parentID}}", collectionVariable: "subPages" %}
<ul>
{% for i in subPages.items %}
    <li><a href="{{i.url}}">{{i.name}}</a></li>
{% endfor %}
</ul>

You cannot use the Component Manager to configure the Component tag for Pages as it's not generally part of the content management process that clients may need to utilise.

Counter

Along with the data output above, there is also a special liquid tag available {{counter}} which increments for each item. This tag is only available within Layouts when object: "item" is used in the Component tag.



Related Articles

  • System Pages
    System Pages, under 'Settings', is where you’ll find all those pages required by certain system...
  • Pages
    Pages allow the creation and management of standard page content and folders. Pages can be...
  • module (Page Folder)
    This module component fetches data relating to Page Folders. Possible use cases for this are...

External Resources

There are currently no external resources available.

Please let us know if you have any other contributions or know of any helpful resources you'd like to see added here.


Questions?

We are always happy to help with any questions you may have.
Visit the Treepl Forum for community support and to search previously asked questions or send us a message at support@treepl.co and we will consult you as soon as possible.