menu
This component outputs data relating to a specific Menu including all menu items and any child sub-items.
{% component type: "menu", alias: "<menu_alias>" %}
Parameters and Options
menu
This is the name of the entity that needs to be used for the component retrieving function.
<alias_name>
Default (default)
<Your Layout Group>
<yourLiquidVariableName>
If using this parameter, the module will not render its layout.
Your collectionVariable value must only contain English letters, numbers or underscores. Spaces or special characters are not supported.
<your custom value>
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 menu example includes 3 top level menu items with 2 sub menu items and represents the typical data structure you will see from this Component.
{
"Name": "DEMO Menu Example",
"Alias": "demo_menu_example",
"LayoutGroup": "",
"Items": [
{
"id": 388,
"ItemId": null,
"ItemName": "Menu Item 1",
"ItemUrl": "#",
"ItemTargetFrame": null,
"ItemClass": null,
"ItemTitle": null,
"ItemCustomAttribute": null,
"ItemEnabled": true,
"ReleaseDate": null,
"ExpiryDate": null,
"Items": []
},
{
"id": 946,
"ItemId": null,
"ItemName": "Menu Item 2",
"ItemUrl": "/demo-cs/basic-menu-example",
"ItemTargetFrame": null,
"ItemClass": null,
"ItemTitle": null,
"ItemCustomAttribute": null,
"ItemEnabled": true,
"ReleaseDate": null,
"ExpiryDate": null,
"Items": []
},
{
"id": 796,
"ItemId": null,
"ItemName": "Menu Item 3",
"ItemUrl": "#",
"ItemTargetFrame": null,
"ItemClass": null,
"ItemTitle": null,
"ItemCustomAttribute": null,
"ItemEnabled": true,
"ReleaseDate": null,
"ExpiryDate": null,
"Items": [
{
"id": 196,
"ItemId": null,
"ItemName": "Sub Menu Item 1",
"ItemUrl": "#",
"ItemTargetFrame": null,
"ItemClass": null,
"ItemTitle": null,
"ItemCustomAttribute": null,
"ItemEnabled": true,
"ReleaseDate": null,
"ExpiryDate": null,
"Items": []
},
{
"id": 263,
"ItemId": null,
"ItemName": "Sub Menu Item 2",
"ItemUrl": "#",
"ItemTargetFrame": null,
"ItemClass": null,
"ItemTitle": null,
"ItemCustomAttribute": null,
"ItemEnabled": true,
"ReleaseDate": null,
"ExpiryDate": null,
"Items": []
}
]
}
],
"Params": {
"type": "menu",
"alias": "demo_menu_example",
"layoutgroup": "",
"collectionvariable": "menuExample"
}
}
Accessing the Data
JSON Output
You can output the full JSON for your component data by referencing the root Liquid object {{this}}
in your module’s layouts, or directly on your page, if using the collectionVariable
parameter in your component tag.
For example:
{% component type: ... collectionVariable: "myData" %}
You can then render the JSON like so:
{{myData}}
Rendering Property Values
As an alternative, you can instead output the menu data directly on the Page or Template via a Liquid Collection if collectionVariable
was added to the Component tag.
An example using collectionVariable
with value "menuData" is as follows:
{% component type: "menu", alias: "menu_example", collectionVariable: "menuData" %}
Looping through the collection to render all the top level item names in a list:
<ul>
{% for m in menuData.items %}
<li>{{m['itemname']}}</li>
{% endfor %}
</ul>
Now, testing for sub menu items and nesting them in the list:
<ul>
{% for m in menuData.items %}
<li>
{% if m.items.size > 0 %}
<ul>
{% for subm in m.items %}
<li>{{subm.itemname}}</li>
{% endfor %}
</ul>
{% endif %}
</li>
{% endfor %}
</ul>
Accessing a specific item within the collection. In this case the third menu item name (zero based index):
{{menuData.items[2]['itemname']}}