Core tags
Every core tag: site, page, person, search, settings — with examples and conditions.
Tags that work in any theme tag file (*.tpl.html) or in separate views. The page is built from the single tag catalog — the same list appears as hints in the theme editor. Module tags (post list, discussion, downloads, banners…) are on the “Showing modules on the site” page and in “Views on tags”.
Site and page frame
| Insert | Kind | What it outputs | Where it works |
|---|---|---|---|
{site_name} | value | Site name from Settings → General. | everywhere |
{locale} | value | Code of the page language. | everywhere |
{word:theme::shelf.popular} | value | A word in the visitor's language by key: from the core, a module (module::key) or the theme's own words file. No such word — empty. | everywhere |
{year} | value | Current year, for the footer copyright. | everywhere |
{home} | address | Address of the home page. | everywhere |
{canonical} | address | Main address of this page (the one search engines should keep). | everywhere |
[if:rss_url]<a href="{rss_url}">RSS</a>[/if] | address | Address of the site feed (RSS) for a place in the theme: news first, then the forum; empty when no module has a feed. The engine already puts the feed link into the page head by itself. | everywhere |
{theme} | address | Address of the theme files folder (assets): images, styles. | everywhere |
{content} | markup | Page content in the engine container: it does not overflow the screen. Use it for the account, forum and forms. | everywhere |
{content_raw} | markup | Content without the wrapper and width limit, only for your own full-page layouts. | everywhere |
{languages} | block | Language switcher (ready block). | everywhere |
{search} | block | Search box (ready block). | everywhere |
{login} | block | Ready «Sign in / Register» block, or the name of the signed-in member. | everywhere |
{poll} | block | Current poll of the site. | everywhere |
{logout_button} | button | «Sign out» button with the security key (signing out is a form, a plain link cannot carry the key). | everywhere |
{menu_toggle} | block | «Menu» button and the section menu that opens by the button on phones. | everywhere |
{user_menu} | block | Member menu: profile, messages, panel, sign out. | everywhere |
{color_scheme_toggle} | block | Light / dark / auto colour switch button. Shown only when the theme has a second palette and “Scheme switch in the header” is on in the settings. | everywhere |
{theme_choice} | block | Site look chooser: a menu of the themes the owner allows, so a visitor picks how the site looks. Empty when the choice is off in the settings or there is only one theme. | everywhere |
{info} | block | Messages such as “saved”, “error” or “notice” after an action. If the layout has no {info}, the engine puts them before {content} itself. Conditions: [if:info]…[/if] — there are messages, [ifnot:info]…[/ifnot] — there are none. | everywhere |
{part:sidebar title="New arrivals"} | place | A piece of the theme itself (file views/partials/name.tpl.html) anywhere in a template: {part:name} or {part:name key=value}; inside the piece {param.key} gives the value, and the value may contain tags: t="{item.title}". Inside a loop the piece sees the current item. Pieces may be nested up to three levels; a missing piece is empty. | everywhere |
{region:sidebar} | place | Blocks of modules placed in this place of the theme. Places: header, before_content, sidebar, after_content, footer, head_actions. | everywhere |
[each:menu]<a href="{item.url}">{item.title}</a>[/each] | loop | Items of the site menu. Inside: item title, item url, item active. | everywhere |
Visitor and sign-in
| Insert | Kind | What it outputs | Where it works |
|---|---|---|---|
[if:user.logged]…[else]…[/if] | condition | Condition: the visitor is signed in. Use it with «else» for a different text for guests. | everywhere |
{user.name} | value | Name of the signed-in member. | everywhere |
{user.url} | address | Address of the signed-in member’s profile. | everywhere |
{user.login_url} | address | Address of the sign-in page. | everywhere |
{user.register_url} | address | Address of the registration page. | everywhere |
{user.forgot_url} | address | Address of the password recovery page. | everywhere |
[if:user.avatar]<img src="{user.avatar}" alt="">[/if] | address | Address of the avatar; empty when there is none (wrap it in a condition). | everywhere |
{user.role} | value | Name of the member’s role. | everywhere |
[if:user.role=editor]…[/if] | value | Machine name of the role (not translated, stable): compare it in a condition, several names separated by commas, e.g. editor,admin. | everywhere |
[if:user.pm_unread]{user.pm_unread}[/if] | value | Number of unread private messages; empty when the Messages module is off. | everywhere |
{user.pm_total} | value | Number of all the visitor's private messages (not only unread ones); empty if the Messages module is off. | everywhere |
{user.pm_url} | address | Address of private messages. | everywhere |
{user.favorites_count} | value | Number of bookmarks. | everywhere |
{user.favorites_url} | address | Address of bookmarks. | everywhere |
[if:user.can_admin]<a href="{user.admin_url}">…</a>[/if] | address | Address of the admin panel; empty for those who are not allowed in. | everywhere |
[if:user.can_admin]…[/if] | condition | Condition: the member is allowed into the admin panel. | everywhere |
{user.field:name} | value | Own profile field of the signed-in member (the owner creates the fields); empty for guests and unknown fields. | everywhere |
Person’s profile and account area
| Insert | Kind | What it outputs | Where it works |
|---|---|---|---|
{profile.name} | value | The name of the person whose page it is. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
@{profile.username} | value | The login (shown as @login). | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
{profile.url} | address | The address of the public page. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.avatar]<img src="{profile.avatar}" alt="">[/if] | address | The address of the picture; empty if there is none. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.bio]<p>{profile.bio}</p>[/if] | value | The «about me» text (plain text); empty if not filled. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.location]<p>{profile.location}</p>[/if] | value | The place of residence from the profile (plain text); empty if not filled. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.joined]{profile.joined}[/if] | value | The registration date; empty if the person hides it. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.last_seen]{profile.last_seen}[/if] | value | The last visit; empty if the person hides activity. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.own]<a href="{profile.edit_url}">…</a>[/if] | address | The address of «edit profile»; only on your own page. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.own]<a href="{profile.security_url}">…</a>[/if] | address | Address of the account security page (password, two-step sign-in). Only on your own page; empty for other people. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.own]<a href="{profile.devices_url}">…</a>[/if] | address | Address of the page with signed-in devices (where you are signed in, close other sign-ins). Only on your own page. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.own]<a href="{profile.mail_url}">…</a>[/if] | address | Address of the e-mail settings page (what the site may send you). Only on your own page. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.own]<a href="{profile.privacy_url}">…</a>[/if] | address | Address of the privacy page (download your data, erase the account). Only on your own page. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.own]<a href="{profile.notifications_url}">…</a>[/if] | address | Address of the notifications page. Only on your own page. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.muted]…[/if] | condition | Condition: a moderator has banned this account from publishing for now (posts and comments). Only on your own page. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.muted_until]{profile.muted_until}[/if] | value | When the publishing ban ends (day.month.year hours:minutes); empty when the ban has no end or there is none. Only on your own page. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.manage]<a href="{profile.manage_url}">…</a>[/if] | condition | Condition: you look at someone else's page and may edit people in the panel (staff). Empty for guests, ordinary members and on your own page. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.manage]<a href="{profile.manage_url}">…</a>[/if] | address | Address of this person's card in the panel (block, publishing ban, roles). Only for staff on someone else's page. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.two_factor]…[else]…[/if] | condition | Condition: two-step sign-in is on for this account. Only on your own page. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.signature]{profile.signature}[/if] | markup | The person's signature (the short line under their posts), when signatures are on in the settings; empty otherwise. Ready, safe HTML: do not put it into an attribute or wrap it in your own escaping. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
{profile.mail} | value | Your own email address; only in the account pages, never on someone else's page. | auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.group=editor]…[/if] | value | The first role as a title; for a condition use the machine name: [if:profile.group=editor] (several separated by commas). | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.own]…[else]…[/if] | condition | Condition: this is the visitor's own page. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.online]…[/if] | condition | Condition: the person was active in the last 5 minutes (only if activity is not hidden). | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.field:name]{profile.field:name}[/if] | value | A profile field the person made public: {profile.field:key}; empty if not filled. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[if:profile.count:comments>0]{profile.count:comments}[/if] | value | A number from a module: {profile.count:news}, {profile.count:comments}; works in conditions: [if:profile.count:comments>10]. Only on your own page and in the account pages; on someone else's page it is empty. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[each:profile.roles]{item.title} [/each] | loop | The roles of the person: {item.title}, {item.name} (machine name). | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[each:profile.links]<a href="{item.url}">{item.title}</a> [/each] | loop | Links the person gave (site, GitHub…): {item.title}, {item.url}, {item.kind}. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[each:profile.fields]{item.label}: {item.value} [/each] | loop | All public profile fields that are filled: {item.label}, {item.value}, {item.url} (for links), {item.key}. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[each:profile.stats]{item.title}: {item.value} [/each] | loop | The summary the modules add (posts, comments…): {item.title}, {item.value}; shown only if the person shows activity. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
[each:profile.actions]<a href="{item.url}">{item.title}</a> [/each] | loop | Buttons the modules put on the page («Write a message», «Add to favourites»): {item.title}, {item.url}. | auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy |
Service pages
| Insert | Kind | What it outputs | Where it works |
|---|---|---|---|
{status} | value | The response code (403, 404, 500, 503). | errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503 |
{message} | markup | The text for the visitor. On the maintenance page it is the owner's text with the engine markup. | errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503 |
[if:reference]{reference}[/if] | value | The incident number for the log (empty if there is none); the visitor can quote it to the owner. | errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503 |
[if:until]{until}[/if] | value | When the site is promised to be back (maintenance page); empty if the owner did not set it. | errors/maintenance |
{reason} | value | The reason as plain text: the maintenance text or the reason of a ban. | errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503 |
{description} | value | The reason of a ban (same as {reason} on the refusal page). | errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503 |
{end} | value | When the ban ends or the site is promised to be back, as a date. | errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503 |
[if:ban]…[else]…[/if] | condition | Condition: the visitor is refused because of the blacklist (a reason and a date are then available). | errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503 |
{ban.reason} | value | The reason written in the blacklist. | errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503 |
{ban.until} | value | The end of the ban as a date; empty if it has no end. | errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503 |
{ban.from} | value | When the ban was set, as a date. | errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503 |
{ban.address} | value | The visitor's own address that is blocked. | errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503 |
{ban_from} | value | When the ban was set (same as {ban.from}). | errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503 |
Page, category, breadcrumbs
| Insert | Kind | What it outputs | Where it works |
|---|---|---|---|
{page.title} | value | Title of this page, as in the browser tab. | everywhere |
{page.description} | value | Description of this page, as given to search engines. | everywhere |
[if:page.route=news.show]…[/if] | value | Route name of the page; compare it in a condition to show something only on one kind of page. | everywhere |
[if:page.home]…[else]…[/if] | condition | Condition: this is the home page. | everywhere |
{page.path} | value | Address of the page without the domain. | everywhere |
[if:page.number]стр. {page.number}[/if] | value | Number of the results page (?page=N); empty on the first page and where there is no paging. Works as a condition: [if:page.number>1]. | everywhere |
[if:page.sort=old]…[/if] | value | The sort order the visitor picked (?sort=word), only letters, digits, “-” and “_”; empty when none. Works as a condition: [if:page.sort=old]. | everywhere |
[if:module.name]…[/if] | condition | Condition: a module is on (any name from the modules folder). | everywhere |
{category.title} | value | Title of the current category, if the module named one. | everywhere |
{category.url} | address | Address of the current category. | everywhere |
{category.key} | value | Short name of the current category. | everywhere |
{category.description} | value | Description of the current category (plain text), if the module gave one. | everywhere |
[each:crumbs]<a href="{item.url}">{item.title}</a>[/each] | loop | Breadcrumbs: Home plus the chain given by the module. Inside: title, url, last (the last item). | everywhere |
[if:search.sections]<nav>[each:search.sections]<a href="{item.url}"[if:item.active] aria-current="true"[/if]>{item.title} {item.count}</a> [/each]</nav>[/if] | loop | The row of search sections (Everywhere / News / Shop…): {item.title} (section name), {item.url} (search in that section with the same query and filters), {item.count} (hits; empty if not counted), {item.active} (the chosen one), {item.empty} (no hits). Empty when there is no query, nothing was found anywhere and no section was chosen. | search |
{search.everywhere_url} | address | Address of the search across the whole site with the same query and filters (the “Everywhere” item of the row). | search |
{search.everywhere_total} | value | Number of hits across the whole site. | search |
[if:search.everywhere_active]…[/if] | condition | Condition: the search runs across the whole site (no section chosen). | search |
[if:search.found_line]{search.found_line}[/if] | value | The line “Found: N” (with the right word form). Only when there are results. | search |
[if:search.capped]{search.capped}[/if] | value | The note that only the first results are shown (when the search is cut at its limit); empty otherwise. | search |
[if:search.nothing]{search.nothing}[/if] | value | The line “Nothing found for …” with the query. Only when the search found nothing. | search |
[if:search.nothing_hint]{search.nothing_hint}[/if] | value | The advice under “nothing found” (check the spelling, try other words). Only when nothing was found. | search |
[if:search.corrected]{search.corrected}[/if] | value | The note that the query was corrected for a typo (“Showing results for …”); empty otherwise. | search |
[if:search.try_everywhere_url]<a href="{search.try_everywhere_url}">…</a>[/if] | address | Address to repeat the same search across the whole site (when a section is chosen); empty when the whole site is searched already. | search |
[each:search.popular]<a href="{item.url}">{item.title}</a> [/each] | loop | Popular queries to suggest on an empty result: {item.title}, {item.url}. Empty when there are none. | search |
{search.pager} | markup | Ready page links of the results (“1 2 3 …”). Only when there is more than one page. Ready HTML. | search |
Who has come
| Insert | Kind | What it outputs | Where it works |
|---|---|---|---|
[if:visitor.country=UA]…[/if] | value | Country code of the visitor («UA»), from the CDN header or the local address base; empty when unknown. | everywhere |
[if:visitor.mobile]…[/if] | condition | Condition: the visitor is on a phone (by the browser string). | everywhere |
[if:visitor.tablet]…[/if] | condition | Condition: the visitor is on a tablet. | everywhere |
[if:visitor.desktop]…[/if] | condition | Condition: the visitor is on a computer. | everywhere |
{visitor.device} | value | Device type of the visitor: phone, tablet or computer. | everywhere |
{visitor.os} | value | System of the visitor: ios, android, windows, macos, linux, tv or other (by the browser string). | everywhere |
[if:visitor.ios]…[/if] | condition | Conditions by system: visitor.ios, visitor.android, visitor.windows, visitor.macos, visitor.linux, visitor.tv (a TV or a set-top box is checked first). | everywhere |
[if:visitor.lang=ru]…[/if] | value | Main language of the visitor’s browser, two letters (ru, uk, en…); empty when unknown. Differs from the language of the page. | everywhere |
Account area
| Insert | Kind | What it outputs | Where it works |
|---|---|---|---|
[if:propose_url]<a href="{propose_url}">…</a>[/if] | address | Link «Suggest a post»; empty when the module or the setting is off. | everywhere |
{social_login} | block | Ready «Sign in with …» buttons (only the networks that are on; no app keys on the page); empty when there are none. | everywhere |
[if:social.any]…[/if] | condition | Condition: at least one social network sign-in is on. | everywhere |
[if:social.google]<a href="{social.google.url}">{social.google.title}</a>[/if] | condition | One network (google, github, yandex, vk, facebook, mailru, telegram): whether it is on, the address that starts the sign-in and its title. | everywhere |
{social_profile} | block | Block «Linked services» for the account: link and unlink with a password; empty for guests. | everywhere |
Forms in parts
| Insert | Kind | What it outputs | Where it works |
|---|---|---|---|
{form} | block | The ready form of the view with fields and the security key (the first form; the second is form:2). | everywhere |
{form_open} | place | Opening of the form with its address and hidden fields; the security key is there. | everywhere |
{field:name} | place | Value of an extra field by its name: {field:name}; [if:field:name]…[/if] shows the block only when the field is filled; [each:field:name]…[/each] for lists. Empty fields print nothing. | everywhere |
{submit} | place | Submit button of the form. | everywhere |
{form_close} | place | Closing of the form. | everywhere |
{t.title} | word | A word of the interface of this view, in the language of the page: t.title, t.lead, t.submit and so on. | everywhere |
Additional fields
| Insert | Kind | What it outputs | Where it works |
|---|---|---|---|
{fieldlabel:name} | value | Label of an extra field. Empty when the field is not filled, so «Director:» never hangs without a value. | everywhere |
{fields} | block | A ready list of all filled extra fields of the record («label — value»); prints nothing when none is filled. Use it when you do not want to place each field by hand. | everywhere |
Conditions and loops
| Insert | Kind | What it outputs | Where it works |
|---|---|---|---|
[if:name]…[else]…[/if] | condition or loop | Condition: the part is shown only when the value is not empty; «else» is the other branch. | everywhere |
[each:name]{item.title}[/each] | condition or loop | Repeat for every item of a list; inside, the fields of the item are item.name. | everywhere |
{item.name} | condition or loop | A field of the current list item (title, url and others; the list tells which). | everywhere |
{index} | condition or loop | Number of the current item of a list, from 1. | everywhere |
{title limit=60 wordsafe=1} | condition or loop | Cutting a text in any tag that prints text: limit=N (characters), words=N (words), wordsafe=1 (do not break a word). The cut text ends with «…». | everywhere |
{date=d.m.Y H:i} | condition or loop | Date of a record in your own format: date=d.m.Y H:i (also edit-date=… for the date of the last change). Letters: d j m n M Y y H i s F. | everywhere |
Обновлено 16.10.2026
Пока никто не высказался. Будьте первым.