page

Usage

The | page filter creates a link to a CMS page, using a page file name without an extension as a parameter. For example, if there is an about.htm page in your Winter install, you can use the following code to generate a link to it:

<a href="{{ 'about' | page }}">About us</a>
Twig

If your page resides in a subdirectory, you should also specify the subdirectory name:

<a href="{{ 'about/contact-us' | page }}">Contact us</a>
Twig

NOTE: The Themes documentation has more details on subdirectory usage.

To access the link to a certain page from the PHP section, you can use $this->pageUrl('page-name-without-extension'):

==
<?php
function onStart() {
    $this['newsPage'] = $this->pageUrl('blog/overview');
}
?>
==
{{ newsPage }}
PHP

You can create a link to the current page by using an empty string:

<a href="{{ '' | page }}">Refresh page</a>
Twig

To get the link to the current page in PHP, you can use $this->pageUrl('') with an empty string.

==
<?php
function onStart() {
    $this['currentUrl'] = $this->pageUrl('');
}
?>
==
{{ currentUrl }}
PHP

Reverse routing

When linking to a page that has URL parameters defined, the | page filter supports reverse routing by passing an array as the first argument.

For example, if you have a file called post.htm with the following URL defined for displaying blog posts:

url = "/blog/post/:post_id"
==
[...]
Ini

You can link to a specific blog post by providing the post_id parameter to the first argument for the page filter:

<a href="{{ 'post' | page({ post_id: 10 }) }}">
    Blog post #10
</a>
Twig

If the website address is https://wintercms.com, the above example would output the following:

<a href="https://wintercms.com/blog/post/10">
    Blog post #10
</a>
HTML

Persistent URL parameters

If a URL parameter is already present and used in the current page, the | page filter will use it automatically.

Using the above example, if you have a file called edit-post.htm with the following URL defined for editing blog posts:

url = "/blog/post/edit/:post_id"
==
[...]
Ini

You can create a link within the original post.htm to this edit page without specifying a post ID to edit the current post:

<a href="{{ 'post-edit' | page }}">
    Edit this post
</a>
Twig

This will output the following:

<a href="https://wintercms.com/blog/post/edit/10">
    Edit this post
</a>
HTML

The post_id value of 10 is already known and has persisted across the pages. If you do not want this behaviour to occur, you can disable this functionality by passing false as the filter argument:

<a href="{{ 'post-edit' | page(false) }}">
    Edit blog posts
</a>
Twig

Or by defining a different value:

<a href="{{ 'post' | page({ post_id: 6 }) }}">
    Edit post #6
</a>
Twig
Copyright © 2025 Winter CMS