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
.incpara 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
.inco 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.incpertence 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 |