Referência
Shortcodes públicos
Dados, variáveis, fluxo, conteúdo, URLs e shortcodes utilitários públicos.
Dados
[#data resource#]
Carrega todos os registros de um recurso em data.<resource>.
[#data articles#]
[#data articles sort=date|desc#]
[#data articles filter=published:1#]
[#data articles search=nimbly#]
[#data articles var=featured filter=featured:yes#]
[#data users.abc123#] → loads single record into data.users.abc123
[#data users uuid=abc123#] → same
[#data articles filter=published:1 sort=date|text|desc limit=20 offset=40#] → the third page of 20
Parâmetros:
sort-field|asc,field|desc, vários:date|desc,title|ascfilter-field:value, vários:published:1,status:new, negação:status:!draft, ou:status:new||todosearch- busca no texto completo de todos os camposvar- nome próprio para a variável em vez dedata.<resource>op-read(padrão) oulist(só UUIDs)limit,offset- uma página da lista: no máximolimitregistros, depois de pularoffset. O número de registros antes do corte fica emdata.<resource>-total(ou<var>-total)
Com limit ou offset, a lista é respondida sem ler todos os registros. Para cada campo citado em filter e sort, os valores de todos os registros ficam juntos num arquivo de cache (ext/data/.tmp/cache/_data/list/<resource>/<field>), criado na primeira vez que o campo é pedido; só os registros da página são lidos. Uma escrita acrescenta uma linha a esses arquivos, um pull do Git faz com que sejam reconstruídos, e ./nimbly data:cache:clear os remove. Use isso em toda lista de um recurso grande; uma ordenação com tipo (date|text|desc, price|num|asc) é a rápida. search continua lendo todos os registros. A partir do PHP: data_query($resource, ['filter' => …, 'sort' => …, 'limit' => 20, 'offset' => 40]) em core/lib/data-list.php devolve ['records' => …, 'total' => …].
[#repeat data.articles#]
Percorre uma variável de dados e exibe, para cada item, o template com o mesmo nome.
[#repeat data.articles#]
[#repeat data.articles tpl=article-card#]
[#repeat data.articles limit=3#]
[#repeat data.articles filter=published:1#]
[#repeat record.related_items csv tpl=related-item#]
[#repeat data.articles var=post#] → item variable named "post" instead of "item"
Dentro do template, os campos de cada registro estão disponíveis como item.<field>:
<h2>[#get item.title#]</h2>
<p>[#get item.intro#]</p>
Também disponíveis em cada repetição:
item.ix- índice numérico (a partir de 0)item.x- chave do registroitem.key- chave do registro (string)
Em campos de referência com UUIDs separados por vírgula, não crie uma biblioteca só para carregar uma parte. Carregue o recurso de destino uma vez com [#data#], depois repita a lista de UUIDs com csv e leia da variável do recurso carregado:
[#data participants#]
[#repeat stories.participants csv tpl=story-participant-item#]
<!-- ext/tpl/story-participant-item/index.tpl -->
<a href="[#get data.participants.[#item.key#].link#]">
[#get data.participants.[#item.key#].name#]
</a>
Isso usa a camada de dados do core e o cache dela, mantém a ordem dos UUIDs do registro de origem e dispensa código de backend próprio para exibir relações simples.
[#data-sort data.articles sort=title|string|asc#]
Ordena uma variável de dados existente no próprio lugar.
[#data-sort data.articles sort=date|desc#]
[#data-sort data.articles sort=title|string|asc#]
[#data-sort data.articles sort=price|numeric|asc#]
[#data-join a b#]
Junta data.a e data.b em data.join. Cada registro ganha um campo resource_type com o nome do recurso de origem.
[#data-count resource#]
Exibe o número de registros de um recurso.
Variáveis
[#set key=value#]
Define uma variável de template.
[#set page-title="About us"#]
[#set active-nav=about#]
[#set body-classes=editor-role append#] → appends with a space separator
[#set tags=news append=,#] → appends with a custom separator
[#set key=value session#] → persists in session
[#set key=value overwrite#] → replaces value even if already set
O parâmetro append acrescenta em vez de definir. Sem separador, ele coloca um espaço entre o valor existente e o novo; informe um caractere para usar outro separador. Útil para montar listas de classes CSS ou textos separados por vírgula:
[#set body-classes=site-body#]
[#set body-classes=editor-role append#] → "site-body editor-role"
[#set body-classes=dark-mode append#] → "site-body editor-role dark-mode"
[#set#] não sobrescreve por padrão. Se a variável já tem um valor, um [#set#] simples não faz nada. Isso facilita definir valores de reserva em templates compartilhados ou do core, enquanto os templates de rota podem substituí-los antes. Só acrescente overwrite quando quiser substituir de propósito um valor existente (por exemplo, ao passar dados para um template reutilizável).
[#get varname#]
Exibe um valor. [#get#] é a forma única de ler valores.
Ordem de busca:
- Variável simples: variáveis de sessão, depois variáveis do sistema. A URL e os cookies só são lidos quando o template pede, com
from(veja abaixo) - Caminho com pontos em variáveis do sistema aninhadas, usando o maior início de variável que corresponda
- Recurso aos dados para caminhos
resource.uuid.field - Escolha automática do idioma quando o resultado é um objeto com os códigos de idioma configurados como chaves
A entrada da requisição é opt-in: from=url lê o parâmetro de consulta com o mesmo nome, from=cookie um cookie, from=url,cookie (ou url|cookie) os dois na ordem dada, e from=(any) o cookie e depois a URL. Uma variável de página com esse nome sempre vence. [#if#] aceita o mesmo from nas suas condições.
[#get page-title#]
[#get item.title default="Untitled"#]
[#get q from=url#]
[#get language#]
[#get data.settings.theme#]
[#get users.abc123.name empty="Unknown"#]
[#get item.title lang=nl#]
[#get item json#]
Os padrões antigos [#get-key#], [#jget#], [#get-i18n#] e [#lookup#] devem ser migrados para [#get#].
[#fmt var=data.articles json#]
Formata uma variável para a saída.
[#fmt var=data.records json#] → JSON encode
[#fmt var=myvar empty={} json#] → JSON with fallback
[#fmt var=item.date type=date fmt="d-m-Y"#]
[#fmt var=item.body type=html#] → strips all tags
[#fmt var=item.body type=plain#] → strips tags and decodes entities
[#fmt var=item.size type=bytes#] → human-readable bytes
[#fmt var=item.hours type=hours#] → 3h 30m, 6m, 37h (whole minutes)
[#fmt var=item.created type=ago#] → "3 days ago"
[#fmt val=[#data-count users#] type=number round=-2 round_mode=floor#]
[#fmt var=item.invoice type=file#] → file download markup
[#fmt var=item.order type=pad length=4#] → zero-padded number
Tipos: text, plain, html, date, ago, json, bytes, hours, number, boolean, image, file, pad
var= lê uma variável; val= recebe o próprio valor, normalmente um shortcode aninhado. O tipo é type=, ou uma palavra solta como último parâmetro: [#fmt var=list empty={} json#] codifica, [#fmt var=list json empty={}#] não.
[#count varname#]
Exibe o número de itens de uma variável array.
[#count data.articles#]
Controle de fluxo
[#if condition action#]
[#if user=(empty) redirect=login#]
[#if language=en tpl=intro-en#]
[#if status=published echo=yes#]
[#if user=(not-empty) tpl=dashboard tpl_else=login#]
[#if score=0 echo_else=[#get score#]#]
[#if not role=admin redirect=home#]
[#if lang=en or lang=nl tpl=western-layout#]
Condições: key=value, key=(empty), key=(not-empty)
Ações: tpl=, tpl_else=, echo=, echo_else=, redirect=
Modificadores: not, or, and
[#if#] é sempre uma única tag que se fecha sozinha; não existe forma de bloco ([#if#]...[#/if#]), e isso é de propósito. Os templates não contêm lógica de negócio. O conteúdo condicional sempre fica num template separado, chamado com tpl=. Nunca escreva um bloco [#if#]…[#/if#] num template.
[#redirect url#]
Redireciona na hora.
[#redirect login#]
[#redirect [#base-url#]/dashboard#]
URL e caminho
[#base-url#]
Devolve o caminho base da instalação na URL. Use em todos os links internos.
<a href="[#base-url#]/about">About</a>
<link href="[#base-url#]/ext/static/app.css">
Em JavaScript, [#base-url#] não está disponível como tag de template. Use nb.base_url; o core a define antes de qualquer script da página rodar. Isso é essencial ao montar URLs de imagens ou caminhos da API no código, principalmente quando o site roda sob um alias ou uma subpasta (como no staging). Nunca escreva /img/ ou /api/ como caminho solto em JS.
// wrong - breaks on staging aliases
return '/img/' + uuid + '/240w';
// correct
return nb.base_url + '/img/' + uuid + '/240w';
[#base-path#]
Devolve o caminho no sistema de arquivos até a raiz da instalação. Para incluir arquivos no servidor.
[#url#]
Devolve a URL completa atual.
[#is-url segment#]
Define is-url como true se a URL atual começa com o segmento informado. Use para o estado ativo na navegação.
[#is-url about#]
[#if is-url=true echo=active#]
[#is-url (home) =#] → exact match for homepage
Conteúdo
[#get-html field#]
Exibe um campo de conteúdo HTML editável. Permite edição na página pelos administradores.
[#get-html main_text#]
[#get-html content.home.intro default="<p>Edit this text</p>"#]
Os links no conteúdo são escritos a partir da raiz do site, /contact ou /en/article/deep-space, sem [#base-url#]. Quando o site roda numa subpasta (staging sob um alias), get-html coloca o caminho base na frente ao exibir a página, e o editor o retira ao salvar, então o link guardado funciona em todos os ambientes. Um link que já começa com o caminho base, e um link para outro site, ficam como estão.
Os campos i18n são resolvidos automaticamente por [#get#] e [#fmt#] quando o valor é um objeto com os códigos de idioma configurados como chaves. Use lang= para forçar um idioma.
[#get item.title#]
[#get item.title lang=en#]
[#fmt var=item.title type=plain lang=nl#]
[#text Label_key#]
Exibe um rótulo traduzido dos arquivos .po. Use sublinhados no lugar de espaços na chave.
[#text Search#]
[#text Save_changes#]
[#text No_results_found#]
As traduções ficam em ext/data/.i18n/text.<lang>.po.
[#cfield field#]
Determina o caminho completo com pontos de um campo de conteúdo no contexto atual do template. É usado com [#get-html#] para conteúdo fixo da página, editável na própria página, guardado no recurso .content.
O recurso .content guarda, por chave, blocos de HTML editáveis que não pertencem a nenhum registro de dados. Cada bloco é identificado por content.<page>.<field>. Quando [#get-html#] aponta para um caminho de .content que ainda não existe, ele cria o registro automaticamente e exibe o valor default.
<!-- In ext/tpl/about-intro/index.tpl -->
[#get-html content.about.intro default="<p>Edit this text</p>"#]
[#get-html content.about.body default="<p>Body text here</p>"#]
[#cfield field#] determina o caminho do campo a partir do contexto atual do template; útil quando o mesmo template é usado em vários lugares:
[#get-html [#cfield intro#] default="<p>Edit this</p>"#]
Esse padrão exige que o módulo user esteja ativo (carregado automaticamente).
[#get-img-html uuid sizes="..." mode=w#]
A forma recomendada de exibir imagens. Gera um <img> responsivo com srcset, sizes, carregamento lazy e limites que evitam ampliar a imagem. Use sempre em vez de uma tag <img> escrita à mão.
[#get-img-html [#record.main_img#] sizes="sm-100,md-50,lg-33"#]
Parâmetro sizes: pares de breakpoint e porcentagem separados por vírgula. Cada parte é breakpoint-vw, em que vw é a porcentagem da largura da tela que a imagem ocupa a partir daquele breakpoint. Breakpoints omitidos usam 100vw.
| Exemplo | Significado |
|---|---|
sm-100,md-50 |
Largura total no celular, metade a partir de md |
sm-100,md-33 |
Largura total no celular, um terço a partir de md |
sm-100,md-50,lg-25 |
Total → metade → um quarto |
Parâmetro mode: define como o servidor dimensiona a imagem:
| Modo | Forma da URL | Resultado |
|---|---|---|
w (padrão) |
480w |
Redimensionada para essa largura, altura proporcional |
c |
480c |
Redimensionada para essa altura, largura proporcional; boa para layouts com altura uniforme |
w?ratio=1.0 |
480w?ratio=1.0 |
Recorte quadrado (centro); para avatares e miniaturas |
Exemplo de recorte quadrado:
[#get-img-html [#record.avatar#] sizes="sm-50,md-25" mode=w?ratio=1.0#]
Os estilos inline max-width/max-height no <img> gerado só evitam ampliar a imagem; não atrapalham o object-fit: cover do CSS nem layouts em grid quando as imagens são maiores que o tamanho exibido (o que sempre acontece com conteúdo real).
Página HTML
[#html#]
Exibe a shell HTML completa da página (doctype, head, body). Coloque no fim dos templates de rota.
Estas variáveis influenciam a shell HTML quando definidas antes de [#html#]:
| Variável | Descrição |
|---|---|
page-title |
Define a tag <title> e o título para OG/Twitter |
body-classes |
Acrescenta classes CSS à tag <body> |
page-settings-link |
Faz o botão de configurações do menu de ações da página apontar para a página de edição do registro atual no admin, em vez do modal de configurações da página. Use em páginas de detalhe para dar acesso rápido ao admin a partir do site. Exemplo: [#base-url#]/nb-admin/articles/[#record.uuid#]. O rótulo vira "Edit <resource>" (por exemplo "Edit article"). |
page-settings-label |
Substitui esse rótulo. |
page-actions |
Defina como off para ocultar o menu de ações numa página sem contexto de página. Ele nunca aparece no admin. |
page-description |
Substitui a meta description do site inteiro nesta página. Usa a description da configuração do site quando ausente. |
og-image |
Imagem para compartilhamento em redes sociais. Aceita um UUID (expandido para uma URL absoluta /img/UUID/1200w), um caminho relativo (img/og-card.png) ou uma URL absoluta. Usa o padrão do projeto definido em ext/tpl/meta/index.tpl quando ausente. |
og-type |
Tipo OG desta página. O padrão é website. Use article em páginas de detalhe de conteúdo. |
page-canonical-url |
Substitui a URL canônica normalizada e o og:url correspondente. Defina antes de [#html#]. |
[#set page-title="[#get record.title#]"#]
[#set og-type=article#]
[#set og-image=[#record.main_img#]#]
[#set page-description="[#fmt var=record.main_text type=html max_length=160#]"#]
[#set page-settings-link="[#base-url#]/nb-admin/event/[#record.uuid#]"#]
[#set body-classes=site-body#]
[#html#]
A imagem OG padrão do projeto é definida uma vez em ext/tpl/meta/index.tpl, sem overwrite, para que os valores por página sempre tenham prioridade. Há dois utilitários de imagem como shortcode:
[#img-url UUID-or-path-or-URL#]- transforma qualquer referência de imagem numa URL absoluta (útil fora do meta, por exemplo em JSON-LD)[#first-img-uuid var=record.main_text#]- extrai o UUID da primeira imagem incorporada num campo HTML; devolve(empty)quando não há nenhuma
Importar registros de recursos de DOCX
Os formulários de criação de registros podem exibir a ação Import document do core. Ela aceita um .docx, extrai os parágrafos e hiperlinks e envia o texto limitado do documento ao endpoint de importação da OpenAI configurado, para propor valores para os campos do recurso. Os editores revisam o formulário preenchido antes de salvar; a importação não cria registro sozinha.
A extração de DOCX exige a extensão ZIP do PHP, porque um documento Office Open XML é um arquivo ZIP. Todo runtime de CLI e web/FPM que possa executar a importação ou os testes dela precisa ter ZipArchive. No Debian e no Ubuntu, ela costuma ser instalada com o pacote php-zip da versão correspondente; as imagens Docker do Nimbly para desenvolvimento e produção incluem php-zip explicitamente. Verifique um servidor configurado à mão com:
php -r 'echo class_exists("ZipArchive") ? "available\n" : "missing\n";'
php core/tests/docx-test.php
Não deduza a disponibilidade na web só pela CLI quando a CLI e o PHP-FPM carregam configurações separadas. Confirme a extensão nos dois runtimes depois da instalação e teste a importação de documentos pela aplicação web.
Documentos PDF
Instale a dependência do módulo PDF do core com php core/cli/nimbly.php module:install pdf. As rotas da aplicação fornecem o próprio HTML e usam a biblioteca PDF do core para gerar, guardar em cache por conteúdo e baixar com segurança no navegador:
load_library('pdf');
$pdf_bytes = pdf_render_cached_document([
'paper_size' => 'a4',
'orientation' => 'portrait',
'margins' => ['top' => 20, 'right' => 18, 'bottom' => 20, 'left' => 18],
'pages' => [$document_html],
]);
pdf_send_download($pdf_bytes, 'Document-123.pdf');
exit();
pdf_render_document() sempre gera bytes novos. Para downloads, prefira pdf_render_cached_document(): a identidade do cache inclui a configuração completa do documento e os arquivos do renderizador do core, então conteúdo ou código de renderização alterados invalidam o cache automaticamente. Não monte timestamps de recursos nem listas de dependências de templates em rotas individuais. pdf_send_download() limpa o nome do arquivo e envia cabeçalhos de download de PDF privados, que o navegador não guarda em cache.
Utilitários
[#include file=path#]
Inclui um arquivo no servidor. O caminho precisa ficar dentro do projeto; caso contrário, não exibe nada.
[#include file=[#base-path#]ext/tpl/head-scripts/index.tpl#]
A normalização de UUID, salt, slug, MD5 e chaves de recurso, e a remoção de formatação para texto simples, são funções auxiliares do PHP em core/lib/util.php, não shortcodes. Use-as em bibliotecas PHP, arquivos de rota, scripts de instalação e scripts de CLI:
load_library('util');
$uuid = generate_uuid();
$salt = generate_salt();
$slug = make_slug($title);
$hash = md5_uuid($slug);
$text = plain_text($html);
[#env KEY default=value#]
Devolve um valor do .env, com default quando a chave falta. As configurações que o core mantém em segredo (PEPPER, STATS_KEY, ADMIN_PASSWORD, SMTP_PASSWORD, AGENT_REMOTE_PASSWORD, OPENAI_API_KEY, RESEND_API_KEY, GIT_TOKEN) nunca são exibidas: leia-as no PHP com env().
[#env STRIPE_LINK_ANNUAL#]
[#env MAIL_SERVICE default=resend#]
[#logged-in#]
Devolve "logged-in" se há uma sessão de usuário ativa.
[#if logged-in=(empty) redirect=login#]
[#feature-cond features=name#]
Exibe conteúdo conforme o usuário atual tenha ou não uma permissão específica.
[#feature-cond features=edit-articles tpl=edit-button#]
[#feature-cond features=view-admin-dashboard echo="<a href='/nb-admin'>Admin</a>"#]
[#feature-cond features=view-admin-dashboard tpl=admin-panel tpl_else=access-denied#]
[#feature-cond features=edit-articles,view-reports tpl=dashboard#]
Parâmetros:
features- lista de permissões separadas por vírgula; o acesso é dado se o usuário tem qualquer uma delas, ou(all)(admin)tpl- template exibido quando há acessotpl_else- template exibido quando não há acessoecho- texto exibido quando há acessoecho_else- texto exibido quando não há acesso
As permissões têm a forma <operation>-<resource_id>, por exemplo view-articles, create-products, edit-.content ou delete-users. Ids de recursos ocultos mantêm o ponto inicial nas permissões guardadas. manage-<resource_id> dá todas as operações padrão daquele recurso. A função admin sempre tem (all), que pula todas as verificações de permissão.
As permissões são atribuídas às funções em /nb-admin/roles/. Use a tela de permissões da função para editar as permissões com caixas de seleção; tokens próprios ainda podem ser guardados para verificações específicas do projeto. Tokens antigos como manage-content, (any), get_<resource>, add-<resource> e (any)_<resource> são convertidos ao carregar a sessão e na migração de atualização, mas o código novo usa a forma padrão.
[#date input fmt=Y-m-d#]
Formata uma data. A entrada pode ser um timestamp Unix, um texto de data ou omitida (hoje). Use fmt=full, long, medium ou short para uma saída legível no idioma da página. Qualquer outro valor de fmt usa a sintaxe de data do PHP para um formato técnico exato. Informe lang= para substituir o idioma detectado.
[#date fmt=d-m-Y#] → today in d-m-Y format
[#date item.date fmt="j F Y"#] → formats item.date
[#date 1741265734 fmt=Y-m-d#] → formats Unix timestamp
[#date item.date fmt=long#] → locale-aware long date
[#fmt var=item.date type=date fmt=long#] usa o mesmo formatador de datas. Os formatos com nome usam a extensão intl do PHP quando disponível e, sem quebrar a página, recorrem a formatos fixos em inglês do PHP.
[#get-first dataset#]
Guarda o primeiro item de um conjunto de dados em first (ou numa variável própria).
[#get-first data.articles#]
[#get first.title#]
[#get-first data.articles var=latest#]
[#get latest.date#]
[#last-update#]
Devolve um timestamp Unix do arquivo-fonte modificado mais recentemente em ext/ e core/. Útil com [#fmt type=ago#] para mostrar quando o site foi atualizado pela última vez.
[#fmt val=[#last-update#] type=ago#] → "3 days ago"
[#fmt val=[#last-update#] type=date fmt=d-m-Y#]
[#obfuscate text#]
Exibe um texto com caracteres Unicode invisíveis e Alpine.js, de modo que bots e scrapers não o veem, mas os usuários conseguem ler. Use para endereços de e-mail e números de telefone.
[#obfuscate info@example.com#]
[#uri-path#]
Devolve o caminho no sistema de arquivos da pasta da rota atual.
[#url-key#]
Devolve uma chave normalizada da URL atual, útil para classes do body ou para reconhecer a página em JS.
[#set body-classes=[#url-key#]#]
/admin/users/ → admin_users, página inicial → _home.
[#http-header type#]
Envia um cabeçalho Content-Type na resposta. Use no topo de rotas que não devolvem HTML.
[#http-header json#]
[#http-header css#]
[#http-header csv#]
Tipos: css, js, json, xml, txt, woff, csv, 403, 404, 500.
Um segundo parâmetro também envia cabeçalhos de cache longo (Cache-Control: private, Expires, Last-Modified) e responde 304 a uma requisição condicional: [#http-header css cached#].
[#system-messages#]
Exibe as mensagens do sistema na fila (definidas no servidor pela sessão). Use no template HTML ou no layout para mostrar avisos rápidos.
[#empty-img#]
Devolve um GIF transparente de 1×1 como data URI. Use como src provisório antes de haver uma imagem real.
[#max-upload-size#]
Exibe o valor upload_max_filesize do PHP em forma legível. Útil como dica em formulários de envio.
[#unquote varname#]
Exibe o valor de uma variável com as aspas escapadas em HTML (" → ", ' → '). Seguro para colocar valores dentro de atributos HTML.
<div x-data='{"title": "[#unquote item.title#]"}'></div>
[#collect-script path#]
Adia a inclusão de um script para que todos sejam exibidos juntos no fim da página, sem duplicatas. Chame sem argumentos para exibir todos os scripts coletados.
[#collect-script [#base-url#]/ext/static/chart.js#]
...
[#collect-script#] ← renders all collected scripts here
[#is-dev-env#]
Exibe DEV ou PROD. Útil para saída de depuração ou comportamento por ambiente.
[#if [#is-dev-env#]=DEV tpl=debug-panel#]
[#detect-language#]
Devolve o código do idioma ativo. Ordem de detecção:
- Prefixo da URL (
/en/,/nl/) - Preferência do usuário (
?lang=en) - TLD do domínio (
.en,.nl) - Cabeçalho de idioma do navegador
- Alternativa: o primeiro idioma definido na configuração do site
[#debug#]
Exibe informações de depuração. Use só durante o desenvolvimento.
[#debug#]
[#debug variables session#]
[#log message#]
Grava em ext/data/.tmp/logs/system.log.
[#nop#]
Não faz nada. Use para desativar shortcodes temporariamente.
Classificação da API de shortcodes
O inventário abaixo é gerado a partir das implementações *_sc() em core/lib e core/modules/*/lib e conferido com o uso no ext/ local. Os shortcodes públicos são estáveis para templates de projeto. Os shortcodes internos e do admin são suportados em templates e módulos do core, mas não devem ser tratados como API para projetos.
| Classificação | Shortcodes |
|---|---|
| Público do core | base-path, base-url, cfield, collect-script, count, data, data-count, data-join, data-last-update, data-sort, date, debug, detect-language, empty-img, env, fmt, get, get-first, get-html, http-header, if, include, is-url, last-update, log, logged-in, max-upload-size, module, nop, obfuscate, redirect, repeat, set, system-messages, text, unquote, uri-path, url, url-key |
| Público de módulo | access, api-allow, build-form, feature-cond, first-img-uuid, form-key, get-form-errors, get-img-html, get-user, honeypot-field, img-url, json2post, logout, post, role-cond, role-switch, sanitize, sticky, userfield, username, validate |
| Interno/admin | api-session, api-token, disk-space-resource, exif, field-name, files, files-unused, files-usage, find, get-resource-meta, get-resource-record, get-resource-records, get-system-log, get-user-resources, json, openai-complete, openai-translate, pages, render-field, resource-name, resources, sys-messages, thumbnail |
Outras interfaces públicas
Estas notas descrevem shortcodes públicos do inventário do framework cujo uso não foi detalhado acima. Use os guias específicos para fluxos completos.
| Shortcode | Comportamento |
|---|---|
[#module forms#] |
Não faz nada: os módulos são encontrados em toda requisição. Templates antigos ainda o contêm; ele pode ser removido. |
[#data-last-update events#] |
Devolve o timestamp do arquivo mais recente do recurso, ou zero quando o recurso não existe. |
[#access feature=view-events#] |
Exige uma permissão antes de uma saída protegida; sem acesso, redireciona para o endereço de recusa configurado. |
[#api-allow method=post resource=applications#] |
Permite e executa uma operação restrita sobre um recurso para uma rota, com as verificações públicas de chave de requisição do framework; não use para contornar permissões de recursos protegidos. |
[#role-cond roles=editor tpl=editor-tools tpl_else=visitor-tools#] |
Exibe o template escolhido quando uma das funções citadas está ativa; senão, a alternativa opcional. |
[#role-switch tpl=account-panel#] |
Exibe um template com o sufixo da primeira função ativa, ou .anonymous sem sessão. |
[#get-user var=user#] |
Carrega o registro do usuário atual numa variável; uuid= escolhe um registro explicitamente. Verifique as permissões antes de exibir campos de outro usuário. |
[#userfield name#] |
Devolve um campo do usuário atual; um UUID explícito pode escolher outro registro e exige a verificação de permissão adequada no fluxo que o chama. |
[#username#] |
Devolve o nome do usuário autenticado, ou anonymous. |
[#logout#] |
Encerra a sessão do usuário atual e redireciona; redirect= escolhe o destino. |
[#form-key contact#] |
Exibe campos ocultos com a chave da requisição e o identificador do formulário; plain devolve a chave, e x-init prepara o estado do formulário no navegador. |
[#honeypot-field#] |
Exibe o campo honeypot oculto configurado para um formulário público. |
[#post#] |
Processa um POST com chave pelos arquivos de validação e envio da rota. A validação é obrigatória antes do processamento. |
[#get-form-errors email#] |
Carrega as mensagens de validação do campo em validation_errors; sem argumento, os erros gerais. |
[#sticky email default=you@example.com#] |
Recupera um valor do formulário do estado enviado ou guardado, para exibir de novo. |
[#json2post#] |
Converte um objeto JSON enviado em valores POST do PHP para um processador existente. |
[#first-img-uuid var=record.body#] |
Encontra o UUID da primeira imagem num conteúdo formatado. |
[#img-url image-reference#] |
Transforma um UUID, um caminho ou uma URL de imagem numa URL absoluta de imagem. |
Limites de validação e limpeza
O inventário inclui hoje validate e sanitize, mas esses shortcodes não validam nem limpam nada. Não confie na chamada dessas tags para proteger a entrada. Use as funções reais de validação do PHP e o tratamento de campos e da API do framework, como descrito em Formulários e Pontos de extensão do PHP.
feature-cond e a apresentação baseada em funções escolhem quais templates exibir. Os processadores do backend continuam verificando as permissões de cada ação protegida.