controller_page

Show a rsc as a HTML page.

This controller is used to show the HTML page of a resource. A “404 Not Found” or “410 Gone” page is shown if the requested page never existed or has been deleted.

The user will be redirected to the logon URL when the current user is not allowed to view the page.

This controller also adds a noindex response header when the page’s seo_noindex flag, documented by module#mod_seo, is set.

Example dispatch rule:

{page, ["page", id], controller_page, []}

Dispatch arguments

controller_page recognizes the following arguments inside the dispatch pattern:

ArgumentDescriptionExample URL
idThe id of the page (rsc) to be shown. This can be the numerical id or the unique name of a page./page/12345

Dispatch options

The following options can be given to the dispatch rule:

OptionDescriptionExample
idId or unique name of the resource to be shown. This overrules any id in the query arguments. Use user_id for the id of the current user.{id, page_about}
templateName of the template to be rendered. Defaults to “page.tpl” Can also be a tuple of the following form: {cat, Name}. See also: tag#catinclude.{template, "about.tpl"} {template, {cat, "home. tpl"}}
catThe category the resource that is requested has to be. If a page of a different category is requested, a 404 is shown.{cat, text}
acl_actionWhat ACL action will be checked. Defaults to ‘view’; but can also be ‘edit’ if users need edit permission on the rsc to be able to access the resource.{acl_action, edit}
aclExtra authorization checks to be performed.See ACL options.
is_canonicalWhether this URL should be considered the canonical URL of the page. If so, the controller will redirect to the rsc’s page path if set. Defaults to true.{is_canonical, false}
seo_noindexAsk crawlers to not index this page.seo_noindex
nocachePrevent browser caching this page.nocache

ACL options

Authorization checks to perform, in addition to the acl_action dispatch option, can be given in the acl dispatch option, and accepts the following options:

ACL optionDescriptionExample
is_authDisable anonymous access to this resource.{acl, is_auth}
logoffLog out user before processing the request.{acl, logoff}
{Action, Resource}Check if user is allowed to perform Action on Resource. The example is equivalent to the options {acl_action, edit}, {id, my_named_page}.{acl, {edit, my_named_page}}
[{Action, Resource}]A list of checks to be performed, as above.{acl, [{view, secret_page}, {update, 345}]}
ignoreDon’t perform any access control checks. Be careful to add your own checks in the rendered template and all its included templates.{acl, ignore}

Edit on GitHub

Referred by

Developer guide

Keep permission checks at the boundary

Use the request context when checking access to data and actions. A hidden button is not an authorization check: callers can invoke a model or endpoint…

Developer guide

Create a page layout

Use an existing site base template as your starting point. Put shared document structure in the base and page-specific markup in blocks.

Developer guide

Follow a request to its template

Start with the URL that gives an unexpected result. Check its hostname: Zotonic uses it to select a site before matching the site's dispatch rules.