Caminho no Gestor bibliotecas/modelo.php
modelo.php é a biblioteca de templates do Gestor. Tudo o que o Conn2Flow desenha no servidor passa por ela: páginas, layouts, componentes e respostas de widgets são strings HTML em que o código troca marcadores por valores e recorta, repete ou remove blocos. Não há engine de templates, AST nem escape automático; são funções puras de string.
A biblioteca é carregada no bootstrap do Gestor e registra a própria versão em $_GESTOR['biblioteca-modelo'] (atualmente 1.1.0).
Os dois tipos de marcador
| Marcador | Formato | Usado para |
|---|---|---|
| Variável | Qualquer string literal, por convenção #nome# ou @[[grupo#nome]]@ |
Um valor pontual |
| Bloco (célula) | Par de comentários <!-- nome < --> … <!-- nome > --> |
Um trecho a extrair, repetir, trocar ou remover |
As funções não impõem formato. Elas procuram exatamente a string recebida. A convenção dos comentários de bloco é seguida pelos módulos do core e pelos widgets.
Substituir variáveis
| Função | Ocorrências | Maiúsculas/minúsculas |
|---|---|---|
modelo_var_troca($modelo, $var, $valor) |
só a primeira | diferencia |
modelo_var_troca_fim($modelo, $var, $valor) |
só a última | ignora |
modelo_var_troca_tudo($modelo, $var, $valor) |
todas | ignora |
modelo_var_in($modelo, $var, $valor) |
insere antes da primeira, mantendo a variável | diferencia |
Quando a variável não é encontrada, o modelo volta inalterado; não há erro nem aviso.
modelo_var_troca() e modelo_var_troca_tudo() também aceitam um array associativo no lugar de $var. Cada chave é usada literalmente como marcador; o # não é acrescentado, apesar do que diz o docblock da função:
$html = modelo_var_troca_tudo($html, [
'#titulo#' => $titulo,
'#url#' => $url,
]);modelo_var_troca_tudo() usa str_ireplace() de propósito. A versão antiga com preg_replace() tratava $19 no valor como referência de grupo e corrompia preços como $19.97.
Trabalhar com blocos
| Função | Resultado |
|---|---|
modelo_tag_val($modelo, $in, $out) |
Devolve o conteúdo entre as tags (ou '') |
modelo_tag_in($modelo, $in, $out, $valor) |
Troca o bloco inteiro, com as tags, por $valor |
modelo_tag_troca_val($modelo, $in, $out, $valor) |
Troca só o conteúdo, preservando as tags |
modelo_tag_del($modelo, $in, $out) |
Remove o bloco inteiro, com as tags |
O padrão de repetição ("célula")
É assim que os módulos do core montam listas no servidor: extraem o bloco como modelo, deixam um marcador no lugar e inserem cada linha antes do marcador.
$cel_nome = 'linha';
// 1. Guarda o modelo e deixa um marcador no lugar do bloco.
$cel = modelo_tag_val($_GESTOR['pagina'], '<!-- '.$cel_nome.' < -->', '<!-- '.$cel_nome.' > -->');
$_GESTOR['pagina'] = modelo_tag_in($_GESTOR['pagina'], '<!-- '.$cel_nome.' < -->', '<!-- '.$cel_nome.' > -->', '<!-- '.$cel_nome.' -->');
// 2. Para cada registro, preenche uma cópia e a insere antes do marcador (a ordem se mantém).
foreach ($registros as $r) {
$linha = modelo_var_troca_tudo($cel, '#nome#', htmlspecialchars($r['nome']));
$_GESTOR['pagina'] = modelo_var_in($_GESTOR['pagina'], '<!-- '.$cel_nome.' -->', $linha);
}
// 3. Remove o marcador.
$_GESTOR['pagina'] = modelo_var_troca($_GESTOR['pagina'], '<!-- '.$cel_nome.' -->', '');O mesmo par de funções resolve blocos condicionais: modelo_tag_del() apaga a seção quando a condição é falsa. É o que faz, por exemplo, o módulo publisher com as mensagens templates-todos-linkados-msg.
Funções legadas
-
modelo_abrir($modelo_local)lê um arquivo e remove o bloco de desenvolvimento<!--!#del#(#!-->…<!--!#del#)#!-->. Não tem chamadores no core: templates vivem no banco e emresources/, não em arquivos lidos em runtime. Também só remove o primeiro bloco. -
modelo_input_in($modelo, $in, $out, $valor)chamapaginaTrocaVarValor(), que não existe no core. Chamá-la causa erro fatal. Não tem chamadores; não use.
Veja também
-
Módulo menus: um widget que usa blocos
<!-- item < -->com regras próprias.
Funções
Gerado a partir de gestor/bibliotecas/modelo.php · 10 funções
modelo_input_in
ver no código · linha 33 ↗modelo_input_in(string $modelo, string $name_input_in, string $name_input_out, string $valor): stringSubstitui variáveis de input em um modelo HTML.
Parâmetros
$modelostring- O template HTML onde as substituições serão feitas.
$name_input_instring- Nome do placeholder de entrada (ex: 'campo').
$name_input_outstring- Nome do campo de saída que substituirá o placeholder.
$valorstring- Valor a ser atribuído ao campo.
Retorno
modelo_var_troca
ver no código · linha 57 ↗modelo_var_troca(string $modelo, string|array $var, string $valor = null): stringSubstitui a primeira ocorrência de uma variável em um modelo.
Parâmetros
$modelostring- O template onde a substituição será feita.
$varstring|array- A variável/placeholder a ser substituída, ou array de variáveis.
$valorstring- O valor que substituirá a variável (ignorado se $var for array).
Retorno
modelo_var_troca_fim
ver no código · linha 101 ↗modelo_var_troca_fim(string $modelo, string $var, string $valor): stringSubstitui a última ocorrência de uma variável em um modelo.
Parâmetros
$modelostring- O template onde a substituição será feita.
$varstring- A variável/placeholder a ser substituída.
$valorstring- O valor que substituirá a variável.
Retorno
modelo_var_troca_tudo
ver no código · linha 137 ↗modelo_var_troca_tudo(string $modelo, string|array $var, string $valor = null): stringSubstitui todas as ocorrências de uma variável em um modelo.
Parâmetros
$modelostring- O template onde as substituições serão feitas.
$varstring|array- A variável/placeholder a ser substituída, ou array de variáveis.
$valorstring- O valor que substituirá todas as ocorrências da variável (ignorado se $var for array).
Retorno
modelo_var_in
ver no código · linha 165 ↗modelo_var_in(string $modelo, string $var, string $valor): stringInsere um valor antes da variável mantendo a variável no modelo.
Parâmetros
$modelostring- O template onde a inserção será feita.
$varstring- A variável/placeholder de referência.
$valorstring- O valor a ser inserido antes da variável.
Retorno
modelo_tag_val
ver no código · linha 199 ↗modelo_tag_val(string $modelo, string $tag_in, string $tag_out): stringExtrai o conteúdo entre duas tags em um modelo.
Parâmetros
$modelostring- O template de onde o conteúdo será extraído.
$tag_instring- A tag de abertura.
$tag_outstring- A tag de fechamento.
Retorno
modelo_tag_in
ver no código · linha 231 ↗modelo_tag_in(string $modelo, string $tag_in, string $tag_out, string $valor): stringSubstitui um bloco delimitado por tags incluindo as próprias tags.
Parâmetros
$modelostring- O template onde a substituição será feita.
$tag_instring- A tag de abertura do bloco.
$tag_outstring- A tag de fechamento do bloco.
$valorstring- O valor que substituirá todo o bloco (tags + conteúdo).
Retorno
modelo_tag_del
ver no código · linha 267 ↗modelo_tag_del(string $modelo, string $tag_in, string $tag_out): stringRemove um bloco delimitado por tags incluindo as próprias tags.
Parâmetros
$modelostring- O template de onde o bloco será removido.
$tag_instring- A tag de abertura do bloco a ser removido.
$tag_outstring- A tag de fechamento do bloco a ser removido.
Retorno
modelo_tag_troca_val
ver no código · linha 305 ↗modelo_tag_troca_val(string $modelo, string $tag_in, string $tag_out, string $valor): stringSubstitui apenas o conteúdo entre as tags, preservando as tags.
Parâmetros
$modelostring- O template onde a substituição será feita.
$tag_instring- A tag de abertura (será preservada).
$tag_outstring- A tag de fechamento (será preservada).
$valorstring- O novo conteúdo que ficará entre as tags.
Retorno
modelo_abrir
ver no código · linha 340 ↗modelo_abrir(string $modelo_local): stringCarrega um arquivo de template e remove blocos de exclusão.
Parâmetros
$modelo_localstring- Caminho do arquivo de template a ser carregado.
Retorno