RoutesΒΆ

Routes are defined by using ~ as a prefix. The routes will be used by a dispatcher and linkto components.

%import components
%inherit base

~routes:
  list: '/blog/posts'
  show: '/blog/post/{id}'
  edit: '/blog/post/{id}/edit'

*content:
  ul:
    li:
      base-linkto action='list': List
    li:
      base-linkto action='show' id=1: Details
    li:
      base-linkto action='edit' id=1: Edit

The rendered result:

<!DOCTYPE html>
<html>
  <head>
    <title>zml</title>
  </head>
  <body>
    <ul>
      <li><a href="/blog/posts">List</a></li>
      <li><a href="/blog/post/1">Details</a></li>
      <li><a href="/blog/post/1/edit">Edit</a></li>
    </ul>
  </body>
</html>

The linkto-component of the base namespace is simply defined:

%namespace base=doonx.org/base

*linkto:
  a href=_path(action, _params):
    {_children[0]}

The _path function is a core function of the zml implementation. It will return an url path by interpolating the parameters into the route path definition. The routevars wrapped by moustaches in the route-section (~) with the corresponding action name will be replaced by the values of the second function parameter of the _path function.

The _params context property contains all parameters of a component. F.e. the following line will use the linkto-component with the parameters action and id. The component can access the parameters by using the _params context property. The linkto-component will forward the _params property as a parameter of the _path function.

base-linkto action='edit' id=1