menu

Adianti Framework

Extensibilidade

Adianti, Framework, PHP, MVC, Active record, Front controller, IDE, RAD, Web, multiplataforma, geração de código, desenvolvimento rápido, relatórios, formulários, listagens, datagrids, gráficos, banco de dados, padrões de projeto, design patterns Estendendo o Adianti Framework.
Adianti Framework
menu Menu
extension
Estensibilidade
Como criar novos componentes no Adianti Framework.
Livro Adianti Framework
Obra completa sobre o Adianti Framework, escrita pelo criador do framework:
  • check Instalação e configuração; Modelos, persistência e BD;
  • check Componentes de apresentação; Cadastros e listagens;
  • check Logins, permissões, relatórios; Desenvolvimento com Studio Pro.


Novos componentes globais
Novos componentes podem ser acrescentados ao framework de maneira simples. Para acrescentar um novo componente, você deverá salvar a classe na pasta /app/lib/widget. Caso o componente inclua arquivos não presentes no framework como arquivos javascript, estes devem ser disponibilizados nesta pasta /app/lib/include e incluídos nos headers da aplicação (app/templates/.../layout.html). Novos componentes devem preferencialmente ser subclasse de TElement, classe base para criação de novos componentes HTML. TElement simula o comportamento de uma tag HTML.
  1. <?php
  2. class TAccordion extends TElement
  3. {
  4.     protected $elements;
  5.     
  6.     public function __construct()
  7.     {
  8.         parent::__construct('div');
  9.         $this->id 'taccordion_' uniqid();
  10.         $this->elements = array();
  11.     }
  12.     
  13.     public function appendPage($title$object)
  14.     {
  15.         $this->elements[] = array($title$object);
  16.     }
  17.     
  18.     public function show()
  19.     {
  20.         foreach ($this->elements as $child)
  21.         {
  22.             $title = new TElement('h3');
  23.             $title->add($child[0]);
  24.             
  25.             $content = new TElement('div');
  26.             $content->add($child[1]);
  27.             
  28.             parent::add($title);
  29.             parent::add($content);
  30.         }
  31.         
  32.         TScript::create('$(document).ready( function() {
  33.                             $( "#'.$this->id.'" ).accordion();
  34.                         });');
  35.         parent::show();
  36.     }
  37. }
Novos componentes com Namespaces
Agora vamos supor que você queira criar um novo componente utilizando Namespaces. Vamos supor que você queira criar uma barra de progresso no estilo da Bootstrap progress bar, que possui um código similar ao que podemos ver a seguir.
  1. <div class="progress">
  2. <div class="progress-bar" role="progressbar"
  3. aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width: 60%;">
  4. <span class="sr-only">60% Complete</span>
  5. </div>
  6. </div>
Então agora que já sabemos a estrutura do componente, vamos declará-lo. Para tal, vamos usar a classe TElement, classe base do framework para construção de novos componentes. Vamos supor que sua empresa chama-se "Acme". Então, este novo componente terá como Namespace "namespace Acme\Widget", e ficará no caminho "lib/acme/widget/ProgressBar.php". A classe se chamará ProgressBar. Basicamente ela é uma div com outra div em seu interior, e esta outra div, com um span. Passamos como parâmetros o percentual, e uma mensagem para a barra.
  1. <?php
  2. namespace Acme\Widget;
  3. use Adianti\Widget\Base\TElement;
  4. class ProgressBar extends TElement
  5. {
  6.     public function __construct($percentage$message)
  7.     {
  8.         parent::__construct('div');
  9.         $this->{'class'} = 'progress';
  10.         
  11.         $div = new TElement('div');
  12.         $div->{'class'} = 'progress-bar';
  13.         $div->{'role'}  = 'progressbar';
  14.         $div->{'aria-valuenow'} = $percentage;
  15.         $div->{'aria-valuemin'} = '0';
  16.         $div->{'aria-valuemax'} = '100';
  17.         $div->{'style'} = "width: {$percentage}%;";
  18.         
  19.         $span = new TElement('span');
  20.         $span->{'class'} = 'sr-only';
  21.         $span->add($message);
  22.         $div->add($span);
  23.         
  24.         parent::add($div);
  25.     }
  26. }
Agora que já criamos o componentes, vamos ver como usá-lo. Em primeiro lugar, devemos usar o operador "use" (use Acme\Widget\ProgressBar) para importar a classe daquele Namespace. Neste caso, estamos usando o componente criado (ProgressBar) dentro de uma tabela (TTable).
  1. <?php
  2. use Acme\Widget\ProgressBar;
  3. class TestView extends TPage
  4. {
  5.     function __construct()
  6.     {
  7.         parent::__construct();
  8.         
  9.         $table = new TTable;
  10.         $table->width '500px';
  11.         $table->addRow()->addCell( new ProgressBar(50'teste') );
  12.         
  13.         parent::add($table);
  14.     }
  15. }