Contêineres e linhas
Alterna a herança de um contêiner e cria, edita, exclui e reordena linhas.
Cada página tem quatro contêineres: top_panel, header, content e footer. Dentro de cada um ficam as linhas (rows), que empilham de cima para baixo. Os contêineres são criados com a página; você não os cria nem exclui, só muda a herança (uses_default) e o estilo. Os contêineres compartilhados (top_panel, header e footer) de uma página comum nascem herdando os da página padrão do layout, para o cabeçalho e o rodapé serem editados uma única vez.
Atualizar contêiner
uses_default: true faz o contêiner usar o da página padrão; false faz a página ter o seu próprio, mantendo as linhas que já tinha (alternar não apaga nada). Envie pelo menos um dos campos.
/api/v1/admin/advanced-layouts/containers/{id}AdminAtualizar herança ou estilo do contêiner
Requer o privilégio manage_layouts.
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
uses_defaultbooleantrue herda da página padrão; false usa linhas próprias. No content e na página padrão o valor é sempre false.designobjectbase, tablet e mobile. O formato dos campos vem de Esquema de design. Substitui o objeto inteiro quando enviado; envie {} para limpar.Exemplo de requisição
curl -X PATCH "$BASE_URL/api/v1/admin/advanced-layouts/containers/11054" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"uses_default": false
}'Resposta
{
"id": 11054,
"page_id": 2929,
"position": "top_panel",
"sort_order": 0,
"uses_default": false,
"rows": []
}Campos da resposta
idintegerpage_idintegerpositionstringtop_panel, header, content ou footer.sort_orderintegeruses_defaultbooleandesignobjectrowsarrayErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id de container no caminho não é um inteiro. | {"error":"invalid container id","detail":"id must be an integer"} |
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_layouts. | {"error":"insufficient privileges","required":"manage_layouts"} |
| 404 | Contêiner não existe. | {"error":"container not found","detail":"11054"} |
| 500 | Nenhum campo enviado (no fields to update) ou falha de banco. | {"error":"failed to update container","detail":"no fields to update"} |
Criar linha
Adiciona uma linha vazia ao contêiner. Em seguida crie colunas nela e blocos nas colunas.
/api/v1/admin/advanced-layouts/containers/{id}/rowsAdminCriar uma linha no contêiner
Requer o privilégio manage_layouts.
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
sort_orderintegerpadrão: 0full_widthbooleanpadrão: falsebg_colorstringdesign).bg_imagestringspacingstringpadrão: normalnonetightnormalloosedisplay_modestringpadrão: normalnormaltabsvisibilityobjectdesktop, tablet e mobile, valores booleanos. Se omitido na criação, vale true nos três.usergroup_idsstring[]guest (visitante anônimo) e registered (logado), além de UUIDs de grupos.custom_classstringcustom_cssstringdesignobjectbase, tablet e mobile. O formato dos campos vem de Esquema de design. Opcional.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/advanced-layouts/containers/11056/rows" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"full_width": true,
"spacing": "loose"
}'Resposta
{
"id": 8029,
"container_id": 11056,
"sort_order": 0,
"full_width": false,
"spacing": "normal",
"display_mode": "normal",
"visibility": {
"desktop": true,
"tablet": true,
"mobile": true
}
}Campos da resposta
idintegercontainer_idintegersort_orderintegerfull_widthbooleantrue faz a linha ocupar a largura inteira da tela, sem o limite de largura do tema.spacingstringnone, tight, normal ou loose.display_modestringnormal (colunas lado a lado) ou tabs (cada coluna vira uma aba).visibilityobjectbg_colorstringdesign tem prioridade.bg_imagestringusergroup_idsstring[]custom_classstringcustom_cssstring<script> e @import são removidos ao gravar).designobjectcolumnsarrayErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id de container no caminho não é um inteiro. | {"error":"invalid container id","detail":"id must be an integer"} |
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_layouts. | {"error":"insufficient privileges","required":"manage_layouts"} |
| 500 | Falha ao gravar ou ler no banco, ou id inexistente onde a rota não trata 404. | {"error":"failed to create row","detail":"..."} |
Atualizar linha
Altera só os campos enviados. visibility é enviado como objeto completo; usergroup_ids enviado como lista substitui a lista inteira.
/api/v1/admin/advanced-layouts/rows/{id}AdminAtualizar uma linha
Requer o privilégio manage_layouts.
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
sort_orderintegerfull_widthbooleanbg_colorstringbg_imagestringspacingstringnonetightnormalloosedisplay_modestringnormaltabsvisibilityobjectdesktop, tablet e mobile, valores booleanos. Se omitido, o valor atual é mantido. Se enviado, substitui o objeto inteiro.usergroup_idsstring[]guest (visitante anônimo) e registered (logado), além de UUIDs de grupos.custom_classstringcustom_cssstringdesignobjectbase, tablet e mobile. O formato dos campos vem de Esquema de design. Substitui o objeto inteiro quando enviado; envie {} para limpar.Exemplo de requisição
curl -X PUT "$BASE_URL/api/v1/admin/advanced-layouts/rows/8029" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"display_mode": "tabs",
"visibility": {
"desktop": true,
"tablet": true,
"mobile": false
}
}'Resposta
{
"id": 8029,
"container_id": 11056,
"sort_order": 0,
"full_width": false,
"spacing": "normal",
"display_mode": "tabs",
"visibility": {
"desktop": true,
"tablet": true,
"mobile": false
}
}Campos da resposta
idintegercontainer_idintegersort_orderintegerfull_widthbooleantrue faz a linha ocupar a largura inteira da tela, sem o limite de largura do tema.spacingstringnone, tight, normal ou loose.display_modestringnormal (colunas lado a lado) ou tabs (cada coluna vira uma aba).visibilityobjectbg_colorstringdesign tem prioridade.bg_imagestringusergroup_idsstring[]custom_classstringcustom_cssstring<script> e @import são removidos ao gravar).designobjectcolumnsarrayErros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id de row no caminho não é um inteiro. | {"error":"invalid row id","detail":"id must be an integer"} |
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_layouts. | {"error":"insufficient privileges","required":"manage_layouts"} |
| 500 | Falha ao gravar ou ler no banco, ou id inexistente onde a rota não trata 404. | {"error":"failed to update row","detail":"..."} |
Excluir linha
Remove a linha e, em cascata, suas colunas e blocos.
/api/v1/admin/advanced-layouts/rows/{id}AdminExcluir uma linha
Requer o privilégio manage_layouts.
Parâmetros de caminho
idintegerobrigatórioExemplo de requisição
curl -X DELETE "$BASE_URL/api/v1/admin/advanced-layouts/rows/8029" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"message": "row deleted"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id de row no caminho não é um inteiro. | {"error":"invalid row id","detail":"id must be an integer"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_layouts. | {"error":"insufficient privileges","required":"manage_layouts"} |
| 404 | Linha não existe. | {"error":"row not found","detail":"8029"} |
| 500 | Falha ao gravar ou ler no banco, ou id inexistente onde a rota não trata 404. | {"error":"failed to delete row","detail":"..."} |
Reordenar linhas
Define a nova ordem: a linha na posição 0 do array vira a primeira, e assim por diante. Ids que não pertencem ao contêiner são ignorados em silêncio.
/api/v1/admin/advanced-layouts/containers/{id}/rows/reorderAdminReordenar as linhas de um contêiner
Requer o privilégio manage_layouts.
Parâmetros de caminho
idintegerobrigatórioCorpo da requisição
row_idsinteger[]obrigatórioExemplo de requisição
curl -X PUT "$BASE_URL/api/v1/admin/advanced-layouts/containers/11056/rows/reorder" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"row_ids": [
8031,
8029,
8030
]
}'Resposta
{
"message": "rows reordered"
}Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | O id de container no caminho não é um inteiro. | {"error":"invalid container id","detail":"id must be an integer"} |
| 400 | Corpo JSON inválido. | {"error":"invalid request body","detail":"unexpected EOF"} |
| 400 | row_ids vazio ou ausente. | {"error":"row_ids is required"} |
| 401 | Sem token, token inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Seu usuário não tem o privilégio manage_layouts. | {"error":"insufficient privileges","required":"manage_layouts"} |
| 500 | Falha ao gravar ou ler no banco, ou id inexistente onde a rota não trata 404. | {"error":"failed to reorder rows","detail":"..."} |