You are viewing beta documentation for Navigation 4.x.
Reference

Node

A Node object represents a single item in a navigation menu tree — a link, a linked Craft element, or a structural item such as a group or Dynamic node. When you work with nodes in Twig or PHP, you are usually dealing with a verbb\navigation\elements\Node object.

Properties

PropertyDescription
idNode element ID
elementIdLinked Craft element ID (element-backed nodes)
elementLinked Craft element — lazy-loaded; use withLinkedElements() on the query to batch-load
menuIdParent menu ID
menuParent Menu element — use withMenu() on the query to batch-load
urlFull URL (linked element or custom)
nodeUriURI portion relative to the site
titleNode title
typeNode type class name (e.g. verbb\navigation\nodetypes\Entry)
classesCSS classes string
customAttributesTable of { attribute, value } rows
urlSuffixPer-site suffix (anchor path, query string)
newWindowOpen in new window
target_blank or empty string
status / enabled / enabledForSiteElement status
childrenChild nodes — wired in memory when hierarchy is enabled
levelStructure level
siteIdNode site variant

Node custom fields (on the menu’s node field layout) are available by handle like any Craft element.

Active state

MethodDescription
getCurrent()Exact URL match
getActive()Current, path-section, or has active descendant
hasActiveChild()Descendant nav node is current (bool)
getActiveState()Underlying state object

See Active State & Context.

Methods

MethodDescription
getTag()HTML tag for this node type (a, span, …)
getTypeLabel()Display name for the node type
getLink()Full HTML anchor (or appropriate tag) with title
getLinkAttributes($extra)Rendered attribute string for custom markup
isElement()Element-backed node
isCustom()Custom URL node
isPassive()Passive (non-link) node
isSite()Site node
isGroupColumn()Group/column structural node

linkAttributes

<a {{ node.linkAttributes({
    class: 'nav-link',
}) }}>{{ node.title }}</a>

Merges node classes, target, rel, and custom attributes with any extras you pass.

customAttributes

<a {% for attribute in node.customAttributes %}
    {{ attribute.attribute }}="{{ attribute.value }}"
{% endfor %}>{{ node.title }}</a>

Linked element fields

{% if node.element %}
    {{ node.element.someFieldHandle }}
{% endif %}

Use withLinkedElements() on the parent query to avoid N+1 loads.