menu
Fórum Adianti
menu Menu
7 dúvidas comuns ao utilizar o Adianti Framework Neste artigo vou tentar responder algumas das dúvidas mais comuns sobre o uso do Adianti Framework. 1) Como conecto no banco de dados ***SQL? O Adianti framework atualmente suporta cinco tipos de bancos de dados de maneira nativa: PostgreSQL, MySQL, Sqlite, SqlServer e Oracle. Novos bancos serão adicionados em novas versões, o que depende de uma homologação e testes. Mas s...
PD
7 dúvidas comuns ao utilizar o Adianti Framework  
Fechado
Neste artigo vou tentar responder algumas das dúvidas mais comuns sobre o uso do Adianti Framework.

1) Como conecto no banco de dados ***SQL?

O Adianti framework atualmente suporta cinco tipos de bancos de dados de maneira nativa: PostgreSQL, MySQL, Sqlite, SqlServer e Oracle. Novos bancos serão adicionados em novas versões, o que depende de uma homologação e testes. Mas se você quiser adicionar um suporte a outro banco de dados é possível. Como o framework usa a biblioteca PDO do PHP para realizar as conexão com a base de dados, esta tarefa não é tão complexa.

Inicialmente você precisará alterar o método Open da classe TConnection (lib/adianti/database/TConnection.class.php), e acrecentar dentro do switch/case, o banco de dados apropriado e instanciar o objeto PDO.

Além de implementar a criação do objeto PDO, o próximo passo é verificar como os Selects neste banco de dados são tratados. Como o framework usa paginação, o tratamento dado à cláusulas como LIMIT e OFFSET nos bancos livres (PostgreSQL, MySQL, Sqlite) e dos proprietários (Oracle, SqlServer) é diferente. Assim, a classe TSqlSelect (lib/adianti/database/TSqlSelect.class.php) possui um tratamento específico para alguns bancos como Oracle e SqlServer. Veja o método getInstruction().

Por fim, caso você tenha implementado o suporte à um driver banco de dados novo e ele tenha passado com sucesso nos testes de inserção, exclusão, ateração e listagem com paginação, nos envie!


2) Como colocar outros componentes em um Designer ?

A ferramenta Adianti Studio Designer facilita em muito o trabalho de criação de interfaces para o framework, permitindo criarmos interfaces com notebooks, formulários, datagrids, e outros. Entretanto alguns componentes ainda não estão disponíveis no Designer, mas isso não impede o seu uso. Você pode adicionar objetos como THtmlEditor e TMultifield em tempo de execução à uma interface criada pelo Adianti Studio Designer, veja como.

Em primeiro lugar, é preciso acrescentar o objeto visualmente ao formulário desenhado. Como todo TUIBuilder é também filho de TPanel, podemos instanciar o objeto desejado e em seguida usar o método put() para adicioná-lo à tela. Tendo em mãos o objeto instanciado, basta adicioná-lo ao formulário desenhado da mesma forma que colocamos objetos em um painel qualquer.

  1. <?php
  2. $html = new THtmlEditor('html');
  3. $ui = new TUIBuilder(500,300);
  4. $ui->put($html40,40); // coluna e linha
  5. ?>


Em segundo lugar, desejamos que o objeto em questão seja postado pelo formulário. Então é necessário que o formulário tenha conhecimento sobre este objeto, para gerenciá-lo. Assim, você terá de adicionar o campo ao setFields(), caso contrário, ele não será postado junto com os dados do formulário. Lembrando que o setFields() indica quais objetos serão postados com o formulário:

  1. <?php
  2. $fields $ui->getFields();
  3. $fields[] = $html;
  4. $this->form->setFields($fields);
  5. ?>


3) Como alterar o visual dos componentes?

Os estilos CSS dos componentes ficam localizados na pasta lib/adianti/include/nome-do-componente. É recomandado utilizar ao máximo as características originais do framework para não ter problemas de compatibilidade em mudanças de versão. Mas você é livre para alterar estes arquivos. Lembre-se que em futuras atualizações do framework, toda a pasta lib/adianti será substituída pela nova versão e você terá de compatibilizar as mudanças manualmente.

Além disso, alguns componentes como TTable, TTableRow, e TTableCell são filhos de TElement, mas o que isso significa? TElement é a classe-base para criação de objetos HTML. Na prática, você pode alterar atributos HTML destes objetos de maneira direta, como no exemplo a seguir.

Neste exemplo, acrescentamos uma linha ($row), e dentro da linha uma nova célula ($cell). Em seguida, alteramos o atributo colspan da célula, para fazer com que ela ocupe 3 colunas.

  1. <?php
  2.     $row=$table1->addRow();
  3.     $row->addCell(new TLabel(_t('Code')));
  4.     $cell=$row->addCell(578);
  5.     $cell->colspan=3;
  6. ?>


Nesse exemplo, alteramos o colspan, mas poderia ser o atributo "style".

4) Como programar eventos javascript sobre os componentes do framework?

Em alguns casos, é necessário acrescentar um comportamento não previsto à um componente do framework. A partir da versão 1.0.1, é possível usar o método setExitAction() para anexar eventos de saída em campos. Neste exemplo iremos acrescentar um evento onBlur à um TEntry.

Os objetos de formulário (TEntry, TText, TDate, etc) são filhos de TField, e permitem alterar características de exibição por meio do método setProperty(). Na prática, este método permite definir atributos que o objeto terá quando for gerado o HTML para sua apresentação, como no exemplo a seguir:

  1. <?php
  2.     $field1 = new TEntry('field1');
  3.     $field1->setProperty('onBlur''alert(123)');
  4. ?>



5) Como alterar o layout do sistema?

O layout do sistema é considerada toda a parte visual externa à aplicação, ou seja, externa aos formulários e datagrids e outras interfaces. Compreende o background, paineis laterais com atalhos, menu do sistema, barras de navegação e outros. Embora o framework traga exemplos com layouts prontos, é papel de cada aplicação definir o seu próprio layout.

Os layouts são gravados em app/templates no formato HTML e carregados pelo index.web.php. Um layout deve carregar as bibliotecas básicas do sistema, {LIBRARIES}, ter um painel (DIV) para o conteúdo com ID="adianti_div_content", e sobrescrever o comportamento padrão de carga de páginas para executar a função javascript __adianti_load_page(). Você poderá criar vários layouts para a mesma aplicação e até mesmo carregar o layout conforme o perfil do usuário, como faz o aplicativo library (www.adianti.com.br/framework-library).

Por fim, o aplicativo tutor, vem com um menu drop down montado no index.web.php por meio da classe TMenuBar, que lê um arquivo XML (menu.xml) com os itens do menu. Este é apenas um exemplo, você pode remover o uso deste tipo de menu e escrever o HTML (layout template) do seu jeito, criando um menu próprio com outros componentes, diferentes daquele que é apresentado no tutor. Os aplicativos de exemplo (tutor, library, changeman) trazem somente sugestões de layout.

6) Como implementar autenticação com o framework?

Autenticação ainda é um assunto considerado fora do escopo do framework. Embora esteja previsto em breve a elaboração de uma aplicação de exemplo com todas as funcionalidades de permissões por usuário/grupo/páginas, autenticação é considerado um assunto responsabilidade da aplicação. Cada aplicação pode montar o seu mecanismo de antenticação (local, banco de dados, ldap), utilizando permissões por página, link, usuário, enfim... Cada organização possui as suas preferências nesse assunto. Para facilitar o uso do framework quando o assunto é autenticação, a aplicação library (www.adianti.com.br/framework-library) possui um exemplo de autenticação por grupo de usuários. Então, vale a pena estudar os arquivos que foram modificados para acrescentar este controle:
index.web.php engine.php app/control/LoginForm.class.php


Além disso, foi adicionado uma verificação no início de cada classe de controle para analisar se o usuário logado tem permissão de acesso àquela classe. Veja por exemplo:
app/control/AuthorForm.class.php


7) Como criar um novo componente como uma árvore?

Novos componentes estão previstos para as próximas versões do framework e provavelmente você terá surpresas agradáveis em breve. Mesmo oferecendo um bom grupo de componentes, provavelmente em algum momento você precisará daquele componente avançado que o framework não oferece. Neste momento, talvez seja o ponto de escrever um novo. De início, é importante a leitura sobre as diretrizes de extensibilidade do framework. Nesta página (www.adianti.com.br/framework-extensibility), você descobre como acrescentar características ao framework sem perdê-las em futuras atualizações, mantendo-as aparte do framework. Nesta página você encontra um exemplo de como implementar uma accordion baseado na jQuery.

Atualizando esse post: A versão 1.0.2 já traz um componente de árvore, o TTreeView.

Por fim, o que hoje é apenas uma sugestão, amanhã poderá estar incorporado ao núcleo do framework.

um abraço!

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto Quero me inscrever agora!

Comentários (8)


WB

WB

Olá,

Como é feita a conexão com o Banco de dados MySql?
PD

www.adianti.com.br/doc-framework-Persistence-Setup-SetupConnection
LM

Como eu consigo o html de uma TTable que eu montei, por exemplo eu preciso pegar o script html
"<table>
<tr>
<td>abc<td>
</tr>......"
</td></td></table>
PD

Luy,

Favor abrir sempre outro tópico no fórum quando a dúvida não tiver relação com o post:
->getContents()
CV

Olá a todos,

Ainda estou me familiarizando com a ferramenta, mas estou gostando muito. Venho do scriptcase, mas acho ela muito limitada mas não foi por esse motivo que posto a minha primeira mensagem, A ferramenta é constituída de uma estrutura de diretórios, cada um com sua função... eu possuo um arquivo contendo algumas funções (em PHP) que me são bastante úteis, então gostaria de saber em qual diretório seria o correto colocar o arquivo ? Seria em app/lib/include ? Porq que acho que o diretório /lib não deve ser muito legal de colocar arquivos (caso saia alguma atualização. Estou certo ou escrevendo besteira ?
PD

Carlos,

Por favor, crie um POST específico para usa dúvida.
Este artigo já tem bastante tempo, é de 2013.

Att,
JH

Boa Tarde Pablo,

Estou tendo problema, para conectar ao Banco Firebird, já fiz a alteração que foi informado por você acima no arquivo TConnection.class.php:

case 'ibase':
$name = isset($host) ? "{$host}:{$name}" : $name;
$conn = new PDO("firebird:dbname={$name}", $user, $pass);
break;

No arquivo ini já fiz a seguinte configuração:
host = "localhost"
port = "3050"
name = "C:CaminhoDoBancoBanco.FDB"
user = "user"
pass = "pass"
type = "ibase"

E no arquivo php.ini já descomentei a seguinte linha:
extension=php_pdo_firebird.dll

E mesmo assim quando tento conectar ao banco ele informa o seguinte erro: could not find driver.

Ficarei muito grato se poderem me ajudar !
Desde já agradeço.