> For the complete documentation index, see [llms.txt](https://hostmgr.gitbook.io/desenvolvedores/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hostmgr.gitbook.io/desenvolvedores/template/pagina-personalizada.md).

# Pagina Personalizada

## Como criar uma página personalizada

Este guia mostra como criar uma página dentro do HostMGR usando como referência uma pagina a ser criada  `.\pagina-modelo.php`. O exemplo abaixo carrega o HTML diretamente na página, sem depender de um arquivo `.html` separado, mas também é possível carregar do seu template.

### Estrutura mínima

Para criar uma página personalizada você precisa de apenas três blocos de código:

```php
<?php
define('HOSTMGR',true);

//REQUER LOGIN PARA ACESSAR ESSA PAGINA?
$requerLogin=false;//or true

include "includes/page.template.php";

$code = "{pageHeader}
Olá Mundo
{pageFooter}";

$tpl->pagina = $code;

include"includes/page.render.php";
```

### Fluxo passo a passo

1. **Definir a constante `HOSTMGR`**
   * A constante protege contra acesso direto e é exigida pelos arquivos `.\includes\page.template.php` e `.\includes\page.render.php`.
2. **Decidir se a página exige login**
   * Defina `$requerLogin` como `true` para forçar autenticação do cliente ou `false` para liberar acesso público.
3. **Carregar o template principal**
   * O include `includes/page.template.php` instancia a classe `.\includes\Template.class.php`, carrega o tema configurado em `$config['template']`, ajusta a sessão e define parametros.
4. **Definir o conteúdo da página**

   * Existem duas formas de se definir o conteúdo do template:
     * **Via arquivo de tempalte \[HTML].**  (arquivo html no diretório do seu teplate):

       ```php
       $tpl->addFile('pagina', 'templates/'.$config['template'].'/minha_pagina.html');
       ```
     * **Via string inline**:

       ```php
       $code = "{pageHeader}
       Olá Mundo
       {pageFooter}";

       $tpl->pagina = $code;
       $tpl->addContent('pagina', $code);
       ```

   Tanto a string quanto o template aceitam variáveis no formato `{nome}` e blocos delimitados por `<!-- BEGIN nome --> ... <!-- END nome -->`, igual a um arquivo `.html` tradicional.
5. **Renderizar a página**
   * O include `includes/page.render.php` carrega `templates/preparaTemplate.php`, a sessão, aplica idioma/tema e, por fim, inclui `includes/renderTemplate.php`, que monta a saída final e envia ao navegador.

### Exemplo com variáveis e blocos

```php
<?php
define('HOSTMGR',true);

$requerLogin=false;

include "includes/page.template.php";

$code = "{pageHeader}
<h1>Bem-vindo, {nome}!</h1>

<!-- BEGIN itens -->
<ul>
    <!-- BEGIN item -->
    <li>{item}</li>
    <!-- END item -->
</ul>
<!-- END itens -->

{pageFooter}";

$tpl->pagina = $code;

$tpl->nome = 'João';
$tpl->block('itens');
$tpl->item = 'Plano Bronze';
$tpl->block('item');
$tpl->item = 'Plano Prata';
$tpl->block('item');
$tpl->item = 'Plano Ouro';
$tpl->block('item');

include "includes/page.render.php";
```

### Variáveis e blocos disponíveis

Quando você define `$tpl->pagina = $code`, o template do tema (definido em `$config['template']`) precisa ter a variável `{pagina}` renderizada no ponto correto da `principal.html`. Os helpers abaixo vêm prontos no template principal:

* **`{pageHeader}`**: cabeçalho HTML + `<body>` + menu principal.
* **`{pageFooter}`**: rodapé, fechamento do `</body>` e `</html>`.

Variáveis automáticas populadas em `includes/page.render.php`:

* `{t_pagina}`: rótulo da página atual.
* `{titulo}`: título do site vindo de `$config['titulo']`.
* `{lang_*}`: textos de idioma carregados em `$idioma`.
* `{nome_template}`: nome do template ativo.
* `{tema_template}`: tema do template ativo.

### Métodos novos da classe Template

A revisão de `.\includes\Template.class.php` adicionou dois métodos públicos que permitem trabalhar com HTML em memória, sem arquivo físico:

* **`setContent($content, $varname = ".")`**: define o conteúdo HTML raiz do template.

  ```php
  $tpl = new Template();
  $tpl->setContent('Olá {nome}!');
  $tpl->nome = 'Maria';
  ```
* **`addContent($varname, $content)`**: concatena um novo fragmento HTML em uma variável já existente (análogo a `addFile`).

  ```php
  $tpl->addContent('pagina', '<section>...</section>');
  ```

O construtor também passou a aceitar o parâmetro `$filename` como opcional, então `new Template()` cria um template vazio pronto para receber `setContent()`.

### Dicas e boas práticas

* Use `addContent` em vez de reatribuir `$tpl->pagina` quando precisar apenas anexar trechos numa estrutura grande.
* Sempre feche os blocos `BEGIN`/`END` corretamente; em caso de marcação mal formada, a classe lança `UnexpectedValueException`.
* Variáveis são case-sensitive; siga o padrão camelCase já usado no projeto.
* Para páginas públicas simples, deixe `$requerLogin = false`; para área restrita, defina como `true`.
* O conteúdo da página não deve conter `<!DOCTYPE>`, `<html>` nem `<body>`: use sempre os placeholders `{pageHeader}` e `{pageFooter}`.
