Referência

Pontos de extensão em PHP

Bibliotecas, variáveis, lógica local de template e a API de dados dos recursos.

Bibliotecas de shortcodes próprias

As bibliotecas de shortcodes próprias ficam como arquivos PHP únicos em ext/lib/:

ext/lib/prepare-events.php

O formato antigo em pasta ainda é suportado por compatibilidade:

ext/lib/prepare-events/prepare-events.php

Use o formato em pasta só quando a biblioteca precisa de arquivos auxiliares que ficam ao lado do arquivo principal.

A função deve se chamar <name>_sc($params), com os hífens trocados por underlines:

<?php

function prepare_events_sc($params)
{
    // Read a variable set by [#data#] or [#set#]
    $events = get_variable('data.event');

    $result = [];
    $today = date('Y-m-d');
    foreach ($events as $event) {
        if ($event['date'] >= $today) {
            $result[] = $event;
        }
    }

    // Write back - [#repeat data.event#] will now only see future events
    set_variable('data.event', $result);
}

Chamada nos templates exatamente como qualquer outro shortcode:

[#data event filter=published:1 sort=date|string|asc#]
[#prepare-events#]
[#repeat data.event#]

API de variáveis em PHP

Função Descrição
get_variable('data.event') Lê qualquer variável de template por um caminho com pontos
set_variable('data.event', $value) Grava uma variável no caminho indicado
set_variable_dot('record', $array) Grava um array associativo como variável com pontos (record.field, record.uuid etc.)

Bibliotecas locais de um template (.inc)

Nem toda biblioteca é um bloco reutilizável. Alguns arquivos PHP existem só para servir a um template: lógica de inicialização, preparação de dados de uma página ou configuração pontual que não pertence ao espaço de nomes global ext/lib/.

Coloque-os como arquivos (shortcode-name).inc ao lado do template que os usa:

core/tpl/html/
  init.tpl
  create-settings.inc    ← loaded only when called from init.tpl

O find_library() procura primeiro um .inc correspondente na pasta do template que chama, antes de recorrer a ext/lib/ ou core/lib/. Como a busca segue a pilha de shortcodes, ela chega à pasta do template chamador mais interno; assim, [#create-settings#] chamado a partir de core/tpl/html/init.tpl encontra core/tpl/html/create-settings.inc, e não uma biblioteca global.

A extensão .inc indica "privado / interno". Esses arquivos ficam invisíveis para templates de outras pastas.

Regras:

  • Use .inc para lógica que só faz sentido no contexto de um template e não seria reutilizada em outro lugar.
  • O nome da função continua seguindo a convenção <name>_sc($params).
  • Não dê a um arquivo .inc o nome de uma biblioteca global (data.inc, url-key.inc): o arquivo local substituiria a global sem aviso dentro desse template.
  • route é um nome de shortcode proibido: route.inc pertence exclusivamente ao sistema de rotas e não pode ser usado como biblioteca.

API de dados em PHP (disponível em .install.inc e route.inc)

Função Descrição
data_create_resource($name, $meta) Cria um recurso novo com a definição .meta indicada
data_create($resource, $uuid, $data) Cria um registro novo
data_read($resource, $uuid) Lê um registro pelo UUID
data_exists($resource, $uuid) Devolve true se um registro existe
load_library($name) Carrega uma biblioteca de shortcodes para que suas funções PHP fiquem disponíveis

Ver esta página em Markdown