Referência
Metadados de recursos
Configurações de nível superior, campos do sistema, regras de recursos e exemplos.
O arquivo .meta
Define a estrutura e o comportamento de um recurso. Todos os campos precisam ser configurados explicitamente.
{
"fields": {
"title": {
"name": "Title",
"type": "text",
"required": true
},
"title_slug": {
"name": "URL slug",
"type": "slug",
"source": "title"
},
"published": {
"name": "Published",
"type": "boolean"
},
"body": {
"name": "Body",
"type": "html",
"buttons": "h2,h3,h4,bold,italic,orderedlist,unorderedlist,quote,anchor",
"media": true,
"media_sizes": "sm-90,md-70,lg-60,xl-50,xxl-40",
"admin_col": false
},
"sort_order": {
"name": "Sort order",
"type": "text",
"admin_col": false
}
},
"sort": {
"field": "sort_order",
"flags": "numeric",
"order": "asc"
}
}
Configurações de nível superior do .meta
| Chave | Descrição |
|---|---|
sort |
Ordenação padrão (field, flags: string/numeric, order: asc/desc) |
validate |
Regras de validação (por exemplo natural-short-text) |
languages |
Idiomas ativados para este recurso |
ai_prompts |
Instruções por campo para tradução com IA |
name |
Objeto com os rótulos opcionais singular e plural, usados por [#resource-name#], pelos títulos do admin e pelos recursos na barra do Nimbly. Sem rótulos, o nome é derivado do id do recurso. Exemplo: {"singular": "Member", "plural": "Members"}. |
nimblybar |
Booleano que controla se o recurso aparece no menu Resources da barra do Nimbly. Recursos comuns aparecem por padrão; users e roles ficam ocultos por padrão. Use true para incluir ou false para ocultar explicitamente. O usuário atual ainda precisa de view-<resource>. |
actions |
Objeto com as chaves opcionais view_url e url. view_url substitui a ação genérica View do admin (padrão /nb-admin/{resource}/{uuid}?view=1); url acrescenta a ação separada "View on site". Ambas aceitam substituições [#record.<field>#]. Exemplo: {"view_url": "/review/?id=[#record.uuid#]", "url": "[#base-url#]/articles/[#record.title_slug#]"}. |
events |
Declarações de eventos do ciclo de vida do recurso. Chaves suportadas: create, update, delete. Os valores são listas de eventos por nome ou entradas de fila job:<type>. |
splitdir |
Booleano. Com true, os registros são guardados numa árvore de subpastas de dois níveis pelo início do UUID, para o desempenho do sistema de arquivos em escala (> ~10.000 registros). |
index |
Lista de nomes de campos a indexar. Cria caminhos de busca rápidos para esses campos. |
upsert |
Booleano. Com true, data_update() (e portanto PUT /api/v1/{resource}/{uuid}) cria um registro que falta em vez de falhar. Use só em recursos no estilo chave-valor em que "o registro talvez ainda não exista" é o normal (como o .config do core, usado para configurações de página), não em recursos de conteúdo comuns, em que alterar um registro inexistente deve continuar sendo um erro. |
self_edit |
Só users. Campos separados por vírgula que um usuário pode salvar no próprio registro por PUT /api/v1/users/{uuid}. Padrão: name. Quem pode editar usuários (edit-users, manage-users, admin) salva todos os campos. |
hidden |
Campos separados por vírgula que a API nunca devolve: nem numa lista, nem num registro, nem na resposta a uma criação ou alteração, nem numa exportação. Eles continuam sendo guardados e salvos normalmente; leia-os em PHP com data_read(). Campos listados em encrypt são sempre ocultos. Em users, o core oculta password, salt, api, password_reset_token e change_email_token, diga o .meta o que disser. |
keep_shortcodes |
Booleano. Por padrão, uma tag de shortcode num valor gravado num registro é guardada como texto ([# e #] viram entidades HTML), seja quem for que grave: a API, uma importação, um agente, um handler de formulário ou data_create() / data_update() numa biblioteca. Ela então aparece como foi digitada e nunca é executada quando o valor é exibido dentro de outro shortcode. Valores que um registro já tem e o próprio .meta não são tocados. Use true só para um recurso que nenhum template exibe e que precisa guardar o texto exatamente como foi escrito; o core faz isso para a fila de jobs e os registros do próprio agente. |
history |
Booleano. Se as alterações nos registros do recurso são guardadas. Padrão: ligado para recursos comuns, desligado para users e para recursos ocultos, exceto .content, .config e .navigation. |
sitemap |
Declaração para o sitemap. url é um texto ou um modelo de URL por idioma; o published opcional indica um campo de publicação e o each opcional indica um campo de lista a expandir. Na geração ficam disponíveis record, language e sitemap_item. |
Campos do sistema (gerenciados automaticamente)
Todo registro tem automaticamente: uuid, _created, _modified, _created_by, _modified_by. Nunca os defina no .meta.
Exemplos de .meta prontos para produção
Exemplo A: parceiros (lista com ordenação)
{
"fields": {
"title": {
"name": "Partner name",
"type": "text",
"required": true
},
"published": {
"name": "Published",
"type": "boolean"
},
"logo": {
"name": "Logo",
"type": "image",
"admin_col": false
},
"website": {
"name": "Website",
"type": "url",
"admin_col": false
},
"sort_order": {
"name": "Sort order",
"type": "text",
"admin_col": false
}
},
"sort": {
"field": "sort_order",
"flags": "numeric",
"order": "asc"
}
}
Exemplo B: artigos (conteúdo ordenado por data)
{
"fields": {
"title": {
"name": "Title",
"type": "text",
"required": true
},
"published": {
"name": "Published",
"type": "boolean"
},
"featured": {
"name": "Featured",
"type": "boolean"
},
"date": {
"name": "Date",
"type": "date"
},
"main_img": {
"name": "Image",
"type": "image",
"admin_col": false
},
"intro": {
"name": "Intro",
"type": "html",
"buttons": "bold,italic",
"admin_col": false
},
"main_text": {
"name": "Main text",
"type": "html",
"buttons": "h2,h3,h4,bold,italic,orderedlist,unorderedlist,quote,anchor",
"media": true,
"media_sizes": "sm-90,md-70,lg-60,xl-50,xxl-40",
"admin_col": false
}
},
"sort": {
"field": "date",
"flags": "string",
"order": "desc"
}
}
Exemplo C: colunas da visão geral do admin
Use admin_columns para controlar a ordem das colunas da tabela do admin. Ela pode incluir as colunas de sistema _modified e _created.
{
"admin_columns": ["email", "_modified", "_created"],
"sort": {
"field": "_modified",
"flags": "numeric",
"order": "desc"
}
}