# Template - Documentation of Murph
None

Skip to content

# Templating

## Variables

By default, these variables are given to a CMS view:

- The current node is `_node` and its menu is `_menu`
- The current navigation is `_navigation`
- The current locale is `_locale`
- The CMS store is `_store`

## Navigations and menus

- Retrieve all navigations: `_store.navigations`

- Retrieve a navigation by its code: `_store.navigation('the_code')`

- Retrieve all navigation menus: `_navigation.menus`

- Retrieve a menu by its code: `_navigation.menu('the_code')`
- Retrieve all nodes of a menu: `menu.rootNode.children`

- Retrieve visible nodes of a menu: `menu.rootNode.children({visible: true})`

- Test if a node is the current one: `_store.isActiveNode(node)`

- Test if a node is or contains the current one: `_store.isActiveNode(node, true)`

## Page

You can access a page's blocks this way:

    {% set myBlock = _page.myBlock.value %}

    {{ myBlock }}

## URL and path

Murph has somes twig functions to manage URLs:

### Generic functions

- Same as twig url but catches all exceptions: `{{ safe_url(routeName, options, relative) }}`
- Same as twig path but catches all exceptions: `{{ safe_path(routeName, options, relative) }}`

### Node functions

- Generates a URL using a node: `{{ node_url(node, options, relative) }}`
- Generates a path using a node: `{{ node_path(node, options, relative) }}`
- Generates a URL using a node and catches all exceptions: `{{ safe_node_url(node, options, relative) }}`
- Generates a path using a node and catches all exceptions: `{{ safe_node_path(node, options, relative) }}`

A node may have a disabled URL:

    {% if not node.disableUrl %}
        {% set path = safe_node_path(node) %}
        {% set url = safe_node_url(node) %}
    {% endif %}

When the navigation has several domains, you can specify the domain:

    {% set path = safe_node_path(node, {_domain: _domain}) %}
    {% set url = safe_node_url(node, {_domain: _domain}) %}

## Code functions

- Generates a URL using codes: `{{ code_url(menuCode, nodeCode, options, relative) }}`
- Generates a path using codes: `{{ code_path(menuCode, nodeCode, options, relative) }}`
- Generates a URL using codes and catches all exceptions: `{{ safe_code_url(menuCode, nodeCode, options, relative) }}`
- Generates a path using codes and catches all exceptions: `{{ safe_code_path(menuCode, nodeCode, options, relative) }}`

### Filters

When a content could contains tags (eg: '{{url://my_route}}`), use`murph_url`. See the example below:

Code | Output
--- | ---
`{{ content }}` | `A link to the <a href="{{url://contact}}">contact page</a>`
`{{ content|murph_url }}` | `A link to the <a href="https://example.com/contact">contact page</a>`

## String builder

The string builder builds a string using a format and an object or an array.

Examples:

- `{{ 'Entity ID is {id}'|build_string(myEntity) }}` will output: `Entity ID is 42`
- `{{ 'Hello, {user.displayName}!'|build_string(myEntity) }}` will output `Hello, John doe!`

In case of an not accessible property, no exception will be thrown.

## File attributes

Attributes are managed from the file manager. They are accessibles with these filters:

Code | Result
--- | ---
`{{ '<img ... alt="{{fattr://hash/alt}}">'|file_attributes }}` | `<img ... alt="Attribute 'alt' of the file with the given hash">`
`{{ 'path/to/file'|file_attribute('alt') }}` | Attribute `alt` of the given file