The Menu Component displays a list of menu items and is used to build navigation structures such as headers, footers, sidebars, mobile menus, or mega‑menus.
To activate the component, add the attribute:
data-v-component-menu
The component supports nested (recursive) menu structures and automatically loads the correct menu based on menu_id, slug, site, and language.
Component Options
All options are added as HTML attributes using the data-v-* syntax.
| Option | Attribute | Description | Default |
|---|---|---|---|
| start | data-v-start |
Starting offset for pagination | 1 |
| limit | data-v-limit |
Maximum number of menu items to display | 1000 |
| menu_id | data-v-menu_id |
ID of the menu to load | null |
| slug | data-v-slug |
Menu slug (useful for multi‑site setups) | null |
| site_id | data-v-site_id |
Site ID to load the menu from | Current site |
| language_id | data-v-language_id |
Language ID for menu item names/content | Current language |
| default | data-v-default |
Preselect a specific menu; if not set, uses site default | null |
Multi‑Site Behavior
Multiple sites can use the same menu slug (e.g., main-menu) but have different menu content.
This allows a shared theme to load a site‑specific menu simply by using:
data-v-slug="main-menu"
Component Structure & Properties
Inside the component, menu items are rendered using:
data-v-menu-items— container for the listdata-v-menu-item— repeatable element for each menu entrydata-v-menu-item-recursive— container for nested child items
Menu Item Properties
Each menu item exposes the following attributes:
| Property | Attribute | Description |
|---|---|---|
| name | data-v-menu-item-name |
Menu item label |
| slug | data-v-menu-item-slug |
Slug for post/page/product items |
| content | data-v-menu-item-content |
Custom content (for text or HTML menu items) |
| parent_id | data-v-menu-item-parent_id |
Parent menu item ID (for nested menus) |
| menu_item_id | data-v-menu-item-menu_item_id |
Internal menu item ID |
| children | data-v-menu-item-children |
Number of child items |
| language_id | data-v-menu-item-language_id |
Language ID for multilingual menus |
| type | data-v-menu-item-type |
Menu item type: link, text, post, page, product, home, blog, shop |
| img | data-v-menu-item-img |
Menu item image (optional) |
| sort_order | data-v-menu-item-sort_order |
Display order |
| url | data-v-menu-item-url |
Final URL for the menu item |
These properties allow full control over how each menu item is displayed.
Example Usage
<div class="collapse navbar-collapse"
id="navbar"
data-v-component-menu="header"
data-v-slug="main-menu">
<ul class="navbar-nav" data-v-menu-items>
<!-- Top-level menu item -->
<li class="nav-item" data-v-menu-item>
<a class="nav-link" data-v-menu-item-url>
<span data-v-menu-item-name></span>
<span data-v-menu-item-content>
<img src="/media/vvveb.svg" height="24" alt="" class="me-2">Mega menu
</span>
</a>
<!-- Recursive submenu -->
<div class="dropdown-menu" data-v-menu-item-recursive>
<div data-v-menu-item class="nav-item">
<a class="dropdown-item" data-v-menu-item-url>
<span data-v-menu-item-name data-v-if-not="category.type = 'text'"></span>
<span data-v-menu-item-content data-v-if="category.content">
<img src="/media/vvveb.svg" height="24" alt="" class="me-2">Mega menu
</span>
</a>
</div>
</div>
</li>
<!-- Another menu item -->
<li class="nav-item" data-v-menu-item>
<a class="nav-link" data-v-menu-item-url>
<span data-v-menu-item-name>Contact</span>
</a>
</li>
</ul>
</div>
This example demonstrates:
- A main navigation menu
- Recursive dropdown support
- Custom content inside menu items
- Automatic URL generation