💻
Documentação para desenvolvedores
  • Formação para desenvolvedores
    • Introdução
    • Entidades
    • Controladores
    • Backend dos Temas
    • Frontend dos Temas
    • Plugins
    • Módulo AngularJS
  • 📖Livro de receitas
    • Criação de um Tema
    • Adicionando campos adicionais ao seu tema
    • Gerando certificados personalizados para os selos
  • APIs
    • Guia de Hooks
Powered by GitBook
On this page
  • Registar novos metadados
  • Criar um novo template para o campo
  • Carregar novo template

Was this helpful?

  1. Livro de receitas

Adicionando campos adicionais ao seu tema

PreviousCriação de um TemaNextGerando certificados personalizados para os selos

Last updated 3 years ago

Was this helpful?

Ao estender o tema padrão do Mapas Culturais para personalizá-lo a sua realidade local ou setorial, além de poder modificar cores, textos e layouts, você também pode ter a necessidade de criar campos adicionais. Por exemplo, a plataforma , do Instituto Brasileiro de Museus, cataloga muitos dados adicionais, específicos para os museus, além das informações básicas já presentes por padrão na plataforma.

Para fazer isso no seu tema, são necessário basicamente 3 passos simples:

Registar novos metadados

Para isso, dentro do método register() no arquivo classe Theme do arquivo Theme.php do seu tema, chame o método correspondente: registerAgentMetadata(), registerSpaceMetadata(), registerEventMetadata(), registerProjectMetadata() ou registerSealMetadata().

Esses métodos recebem dois parâmetros: $key e $cfg.

$key (string) é um identificado único para este metadado. Utilize nomes sem acentos ou espaços e, para evitar conflitos, utilize um prefixo com o nome do seu tema. Ex: 'meutema_cor_preferida'.

$cfg (array) Array contendo as configurações do campo.

Exemplo:

<?php
namespace MeuTema;
use MapasCulturais\Themes\BaseV1;
use MapasCulturais\App;

class Theme extends BaseV1\Theme{

    function register() {
        $this->registerAgentMetadata('meutema_cor_preferida', array(
            'label' => 'Qual sua cor preferida?',
            'type' => 'select',
            'options' => ['Amarelo', 'Vermelho', 'Azul', 'Sou daltônico, não ligo muito pra isso']
        ));

    }

}

Exemplo adicionando um metadado em vários tipos de entidade:

    function register() {
        $teste = array(
            'label' => 'Justificativa',
            'type' => 'text',
        );
        $this->registerAgentMetadata('meutema_justificativa', $teste);
        $this->registerEventMetadata('meutema_justificativa', $teste);
        $this->registerSpaceMetadata('meutema_justificativa', $teste);

    }
    function register() {
        $this->registerAgentMetadata('meutema_lattes', array(
            'label' => 'Link do currículo Lattes',
            'type' => 'string',
            'validations' => [
                    'v::url()' => 'Url inválida'
                ]
        ));

        $this->registerSpaceMetadata('meutema_geladeiras', array(
            'label' => 'Número de geladeiras',
            'type' => 'string',
            'validations' => [
                    'v::intVal()' => 'O valor deve ser um número inteiro'
                ]
        ));
    }

Abaixo as opções e possibilidades de valores para a configuração do campo (em contrução):

  • label Nome de exibição do campo

  • type Tipo do campo. Por padrão, é exibido uma caixa de texto simples, mas alguns outros tipos já exibem campos diferentes no formlário. Valores possíveis: string (padrão), text, select, multiselect

  • validations Array com métodos de validação que devem ser acionados, sendo a chave o método e o valor a mensagem de erro. Veja exemplo acima.

  • options Array com as opções para os campos select e multiselect

  • private (bool) Padrao para false. Indica se o campo é ou não privado

  • allowOther (bool) Padrão para falso. Para campos select e multiselect, adiciona a opção 'outro' caso seja definido como true, que abre uma caixa de texto para inserção de um novo valor.

  • allowOtherText Caso allowOther seja true, define o texto do novo campo de texto. Por ex: "Especifique a cor"

Criar um novo template para o campo

Agora que já registramos o metadado, precisamos criar um template que vai exibí-lo. Para isso vamos criar um novo arquivo e salvá-lo na pasta layouts/parts do nosso tema. O conteúdo deste arquivo vai seguir o mesmo padrão dos outros campos, mas aqui você tem toda liberdade para exibir o campo da maneira que quiser.

Por exemplo, abaixo o conteúdo do arquivo layouts/parts/cor-preferida.php.

<?php if($this->isEditable() || $entity->meutema_cor_preferida): ?>
<p>
    <span class="label">Cor preferida:</span>
    <span class="js-editable" data-edit="meutema_cor_preferida" data-original-title="Cor preferida" data-emptytext="Selecione">
        <?php echo $entity->meutema_cor_preferida; ?>
    </span>
</p>
<?php endif; ?>

Carregar novo template

Agora basta carregarmos a parte no ponto em que desejarmos do tema. Para isso, utilizaremos os template hooks.

No tema BaseV1 existem hooks (ganchos) em várias partes do código onde vocẽ pode inserir ações sem precisar sobreescrever o arquivo. Essas ações devem ser colocadas no método init da classe Theme do seu Theme.php. Veja os exemplos abaixo.

Para inserir nosso campo como a primeira coisa da aba "sobre" dos agentes.

    $app->hook('template(agent.<<create|edit|single>>.tab-about):begin', function(){
        $this->part('cor-preferida', ['entity' => $this->data->entity]);
    });

Para inserir o novo campo como última coisa da aba sobre de vários tipos de entidade

    $app->hook('template(<<agent|event|space|project>>.<<create|edit|single>>.tab-about):end', function(){
        $this->part('cor-preferida', ['entity' => $this->data->entity]);
    });

Você também pode definir regras de validação para o campo, utilizando as opções da classe , consulte sua para todas as possibilidades.

📖
Validation
documentação
Museus BR
Registrar os novos metadados
Criar um novo template para o campo
Carregar novo template