N1 Nex1on

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

InsertKindWhat it outputsWhere it works
{site_name}valueSite name from Settings → General.everywhere
{locale}valueCode of the page language.everywhere
{word:theme::shelf.popular}valueA 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}valueCurrent year, for the footer copyright.everywhere
{home}addressAddress of the home page.everywhere
{canonical}addressMain address of this page (the one search engines should keep).everywhere
[if:rss_url]<a href="{rss_url}">RSS</a>[/if]addressAddress 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}addressAddress of the theme files folder (assets): images, styles.everywhere
{content}markupPage content in the engine container: it does not overflow the screen. Use it for the account, forum and forms.everywhere
{content_raw}markupContent without the wrapper and width limit, only for your own full-page layouts.everywhere
{languages}blockLanguage switcher (ready block).everywhere
{search}blockSearch box (ready block).everywhere
{login}blockReady «Sign in / Register» block, or the name of the signed-in member.everywhere
{poll}blockCurrent 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}blockMember menu: profile, messages, panel, sign out.everywhere
{color_scheme_toggle}blockLight / 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}blockSite 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}blockMessages 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"}placeA 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}placeBlocks 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]loopItems of the site menu. Inside: item title, item url, item active.everywhere

Visitor and sign-in

InsertKindWhat it outputsWhere it works
[if:user.logged]…[else]…[/if]conditionCondition: the visitor is signed in. Use it with «else» for a different text for guests.everywhere
{user.name}valueName of the signed-in member.everywhere
{user.url}addressAddress of the signed-in member’s profile.everywhere
{user.login_url}addressAddress of the sign-in page.everywhere
{user.register_url}addressAddress of the registration page.everywhere
{user.forgot_url}addressAddress of the password recovery page.everywhere
[if:user.avatar]<img src="{user.avatar}" alt="">[/if]addressAddress of the avatar; empty when there is none (wrap it in a condition).everywhere
{user.role}valueName of the member’s role.everywhere
[if:user.role=editor]…[/if]valueMachine 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]valueNumber of unread private messages; empty when the Messages module is off.everywhere
{user.pm_total}valueNumber of all the visitor's private messages (not only unread ones); empty if the Messages module is off.everywhere
{user.pm_url}addressAddress of private messages.everywhere
{user.favorites_count}valueNumber of bookmarks.everywhere
{user.favorites_url}addressAddress of bookmarks.everywhere
[if:user.can_admin]<a href="{user.admin_url}">…</a>[/if]addressAddress of the admin panel; empty for those who are not allowed in.everywhere
[if:user.can_admin]…[/if]conditionCondition: the member is allowed into the admin panel.everywhere
{user.field:name}valueOwn 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

InsertKindWhat it outputsWhere it works
{profile.name}valueThe 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}valueThe login (shown as @login).auth/public-profile, auth/profile, auth/profile-dashboard, auth/profile-security, auth/profile-sessions, auth/profile-privacy
{profile.url}addressThe 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]addressThe 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]valueThe «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]valueThe 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]valueThe 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]valueThe 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]addressThe 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]addressAddress 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]addressAddress 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]addressAddress 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]addressAddress 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]addressAddress 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]conditionCondition: 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]valueWhen 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]conditionCondition: 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]addressAddress 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]conditionCondition: 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]markupThe 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}valueYour 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]valueThe 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]conditionCondition: 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]conditionCondition: 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]valueA 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]valueA 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]loopThe 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]loopLinks 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]loopAll 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]loopThe 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]loopButtons 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

InsertKindWhat it outputsWhere it works
{status}valueThe response code (403, 404, 500, 503).errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503
{message}markupThe 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]valueThe 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]valueWhen the site is promised to be back (maintenance page); empty if the owner did not set it.errors/maintenance
{reason}valueThe 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}valueThe reason of a ban (same as {reason} on the refusal page).errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503
{end}valueWhen 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]conditionCondition: 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}valueThe reason written in the blacklist.errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503
{ban.until}valueThe 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}valueWhen the ban was set, as a date.errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503
{ban.address}valueThe visitor's own address that is blocked.errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503
{ban_from}valueWhen the ban was set (same as {ban.from}).errors/maintenance, errors/error, errors/403, errors/404, errors/500, errors/503

Page, category, breadcrumbs

InsertKindWhat it outputsWhere it works
{page.title}valueTitle of this page, as in the browser tab.everywhere
{page.description}valueDescription of this page, as given to search engines.everywhere
[if:page.route=news.show]…[/if]valueRoute name of the page; compare it in a condition to show something only on one kind of page.everywhere
[if:page.home]…[else]…[/if]conditionCondition: this is the home page.everywhere
{page.path}valueAddress of the page without the domain.everywhere
[if:page.number]стр. {page.number}[/if]valueNumber 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]valueThe 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]conditionCondition: a module is on (any name from the modules folder).everywhere
{category.title}valueTitle of the current category, if the module named one.everywhere
{category.url}addressAddress of the current category.everywhere
{category.key}valueShort name of the current category.everywhere
{category.description}valueDescription of the current category (plain text), if the module gave one.everywhere
[each:crumbs]<a href="{item.url}">{item.title}</a>[/each]loopBreadcrumbs: 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]loopThe 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}addressAddress of the search across the whole site with the same query and filters (the “Everywhere” item of the row).search
{search.everywhere_total}valueNumber of hits across the whole site.search
[if:search.everywhere_active]…[/if]conditionCondition: the search runs across the whole site (no section chosen).search
[if:search.found_line]{search.found_line}[/if]valueThe line “Found: N” (with the right word form). Only when there are results.search
[if:search.capped]{search.capped}[/if]valueThe 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]valueThe line “Nothing found for …” with the query. Only when the search found nothing.search
[if:search.nothing_hint]{search.nothing_hint}[/if]valueThe advice under “nothing found” (check the spelling, try other words). Only when nothing was found.search
[if:search.corrected]{search.corrected}[/if]valueThe 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]addressAddress 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]loopPopular queries to suggest on an empty result: {item.title}, {item.url}. Empty when there are none.search
{search.pager}markupReady page links of the results (“1 2 3 …”). Only when there is more than one page. Ready HTML.search

Who has come

InsertKindWhat it outputsWhere it works
[if:visitor.country=UA]…[/if]valueCountry code of the visitor («UA»), from the CDN header or the local address base; empty when unknown.everywhere
[if:visitor.mobile]…[/if]conditionCondition: the visitor is on a phone (by the browser string).everywhere
[if:visitor.tablet]…[/if]conditionCondition: the visitor is on a tablet.everywhere
[if:visitor.desktop]…[/if]conditionCondition: the visitor is on a computer.everywhere
{visitor.device}valueDevice type of the visitor: phone, tablet or computer.everywhere
{visitor.os}valueSystem of the visitor: ios, android, windows, macos, linux, tv or other (by the browser string).everywhere
[if:visitor.ios]…[/if]conditionConditions 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]valueMain language of the visitor’s browser, two letters (ru, uk, en…); empty when unknown. Differs from the language of the page.everywhere

Account area

InsertKindWhat it outputsWhere it works
[if:propose_url]<a href="{propose_url}">…</a>[/if]addressLink «Suggest a post»; empty when the module or the setting is off.everywhere
{social_login}blockReady «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]conditionCondition: at least one social network sign-in is on.everywhere
[if:social.google]<a href="{social.google.url}">{social.google.title}</a>[/if]conditionOne 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}blockBlock «Linked services» for the account: link and unlink with a password; empty for guests.everywhere

Forms in parts

InsertKindWhat it outputsWhere it works
{form}blockThe ready form of the view with fields and the security key (the first form; the second is form:2).everywhere
{form_open}placeOpening of the form with its address and hidden fields; the security key is there.everywhere
{field:name}placeValue 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}placeSubmit button of the form.everywhere
{form_close}placeClosing of the form.everywhere
{t.title}wordA 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

InsertKindWhat it outputsWhere it works
{fieldlabel:name}valueLabel of an extra field. Empty when the field is not filled, so «Director:» never hangs without a value.everywhere
{fields}blockA 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

InsertKindWhat it outputsWhere it works
[if:name]…[else]…[/if]condition or loopCondition: the part is shown only when the value is not empty; «else» is the other branch.everywhere
[each:name]{item.title}[/each]condition or loopRepeat for every item of a list; inside, the fields of the item are item.name.everywhere
{item.name}condition or loopA field of the current list item (title, url and others; the list tells which).everywhere
{index}condition or loopNumber of the current item of a list, from 1.everywhere
{title limit=60 wordsafe=1}condition or loopCutting 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 loopDate 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

Updated 16.10.2026

On this page
Share: Telegram WhatsApp
You can save things without signing in: they stay in this browser and you can move them to your account after signing in. Sign in
Discussion

Comments

No discussion yet

No one has commented yet. Be the first.

Report this post