Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Alterar o layout da aplicação dinamicamente. Bom dia pessoal, alguem poderia me dizer se é possível e como fazer para alterar o layout da aplicação dinamicamente? Por exemplo, preciso, de dentro de Formulario (TForm), alterar uma informação inseria previamente no layout. Pra ser mais claro, imaginem que inseri no layout um label que fica ao lado do combo de busca (template ERPIII), em função de algumas coisas que verifico na clas...
GJ
Alterar o layout da aplicação dinamicamente.  
Fechado
Bom dia pessoal,

alguem poderia me dizer se é possível e como fazer para alterar o layout da aplicação dinamicamente? Por exemplo, preciso, de dentro de Formulario (TForm), alterar uma informação inseria previamente no layout. Pra ser mais claro, imaginem que inseri no layout um label que fica ao lado do combo de busca (template ERPIII), em função de algumas coisas que verifico na classe eu preciso mudar esse label.

Desde já agradeç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 (7)


JD

Olá Geraldo, tudo bom?
É possível sim, verifique seu arquivo index.php
Procure por:

  1. <?php
  2. $theme 'theme3';
  3. ?>


É esta a variável responsável por carregar o tema da aplicação, sugiro que você alimente esta variavel com uma informação da sessão, por exemplo:
  1. <?php
  2. $theme = empty(TSession::getValue('tema')) ? 'theme3' TSession::getValue('tema');
  3. ?>

Assim basta você criar uma rotina que sete este valor na sessão, por exemplo:

  1. <?php
  2. TSession::setValue('tema','theme2');
  3. ?>

Lembre-se, é importante recarregar a aplicação inteira apos setar isso na sessão, você pode fazer com:
location.reload(true);

Pronto, você terá como trocar o tema dinamicamente, só tome cuidado ao utilizar componentes exclusivos de um tema, pois isso pode gerar uma desconfiguração na tela.
Sabemos que o tema 'theme3' é o AdminLTE, sendo assim, posso consumir todos os recursos deste tema utilizando a classe TElement para criar os componentes, como os widgets por exemplo, e montar uma dashboard como esta https://almsaeedstudio.com/themes/AdminLTE/index.html
Se eu mudar o tema, vou perder toda a estrutura CSS do mesmo, fazendo com que minha dashboard fique desconfigurada, nesse caso é necessário criar uma dashboard com os componentes de cada tema e carregar a dashboard de acordo com o tema escolhido.
Espero ter ajudado.
GJ

Olá Jheferson,

muito obrigado pelo retorno. Creio que o que você disse vai me ajudar.... qq dúvida posto aqui novamente.
MM

Jheferson, gostei muito do link acima com os dashboards. Foi vc quem fez?
JD

Olá Marcus, tudo bom?
O link que apresentei anteriormente é um link demo do tema AdminLTE que é utilizado pelo Adianti como 'theme3' no Template ERP.
Se você gostou sugiro que estude a documentação do tema, veja em:

https://almsaeedstudio.com/themes/AdminLTE/documentation/index.html

Estude também a classe TElement ela permite a criação de novos componentes.
Futuramente irei postar novos componentes que estou desenvolvendo e que são voltados para a criação de dashboards.
Mas até la, tente o seguinte:

1- Criando um componente: Crie o componente TSmallCard.

TSmallCard.class.php
  1. <?php
  2. class TSmallCard {
  3.     private $main null;
  4.     const CardAcua "bg-aqua";
  5.     const CardGreen "bg-green";
  6.     const CardRed "bg-red";
  7.     const CardYellow"bg-yellow";
  8.     public function __construct($title,$value,$iconCLass,$color,$linkHref=null,$linkText=null) {
  9.         $divParent = new TElement("div");
  10.         $divParent->class "col-lg-3 col-xs-6";
  11.         
  12.         $div = new TElement("div");
  13.         $div->class "small-box $color";
  14.         $divInner = new TElement("div");
  15.         $divInner->class "inner";
  16.         $divInner->add("<h3>$value</h3>
  17.             <p>$title</p>");
  18.         $divIcon = new TElement("div");
  19.         $divIcon->class "icon";
  20.         $icon = new TElement("i");
  21.         $icon->class $iconCLass;
  22.         $link = new TElement("a");
  23.         $link->class "small-box-footer";
  24.         $link->href $linkHref;
  25.         $link->add($linkText."<i class=\"fa fa-arrow-circle-right\"></i>");
  26.         $divIcon->add($icon);
  27.         
  28.         $div->add($divInner);
  29.         $div->add($divIcon);
  30.         $div->add($link);
  31.         $divParent->add($div);
  32.         $this->main $divParent;
  33.     }
  34.     public function show(){
  35.         echo $this->main;
  36.     }
  37. }
  38. ?>

Salve este arquivo na pasta app/lib/util/

2- Crie um controle TDashBoard
TDashBoard.class.php
  1. <?php
  2. class TDashBoard extends TPage {
  3.   private $datagrid;
  4.   public function __construct($param) {
  5.     parent::__construct();
  6.     //TPage::include_css('app/lib/morrisChart/morris.css');
  7.     //TPage::include_js('http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js');
  8.     //TPage::include_js('app/lib/morrisChart/morris.js');
  9.     //montando o cabeçalho
  10.     $cabecalho = new TElement("section");
  11.     $cabecalho->class "content-header";
  12.     $cabecalho->add('<h1>
  13.       Dashboard
  14.       <small>Exemplo</small>
  15.     </h1>');
  16.     $breadcrumb = new TElement("ol");
  17.     $breadcrumb->class "breadcrumb";
  18.     $breadcrumb->add('
  19.       <li><a href="#"><i class="fa fa-dashboard"></i> Home</a></li>      <li class="active">Dashboard</li>');
  20.     $cabecalho->add($breadcrumb);
  21.     //montanto corpo
  22.     $corpo = new TElement("section");
  23.     $corpo->class "content";
  24.     //criando linha
  25.     $linha1 = new TElement("div");
  26.     $linha1->class "row";
  27.     //criando os widgets
  28.     $cardAzul = new TSmallCard("Vendas","237,00","fa fa-bar-chart",TSmallCard::CardAcua,"#","Azul");
  29.     $cardAmarelo = new TSmallCard("Compras","9.885,32","fa fa-user",TSmallCard::CardYellow,"#","Amarelo");
  30.     $cardVermelho = new TSmallCard("Gastos","5,50","fa fa-thumbs-o-up",TSmallCard::CardRed,"#","Vermelho");
  31.     $cardVerde = new TSmallCard("Lucro Real","20,19","fa fa-lock",TSmallCard::CardGreen,"#","Verde");
  32.     
  33.     $linha1->add($cardAzul);
  34.     $linha1->add($cardAmarelo);
  35.     $linha1->add($cardVermelho);
  36.     $linha1->add($cardVerde);
  37.     $corpo->add($linha1);
  38.     parent::add($cabecalho);
  39.     parent::add($corpo);
  40.   }
  41.   function show() {
  42.     parent::show();
  43.   }
  44. }
  45. ?>

Coloque o arquivo na pasta app/control/

3- Va em programas no menu Administração->Programas e adcione a classe TDashBoard
4- Vá no seu usuário ou no seu grupo de usuário e adicione o programa criado no item 3.
5- Vá na url do seu app e faça a chamada da classe TDashBoard por exemplo: localhost/meuapp/?class=TDashBoard
Pronto!

Veja o resultado, estude as classes.
Não abstrai muita coisa, para mostrar como funciona a classe TElement e como ela é útil.
JD

Lembrando que para funcionar você deve usar o 'Theme3'.
EO

Jheferson, bom dia, Excelente o exemplo que postou, só gostaria de colaborar com uma dica que por eu ser iniciante com o Adianti e php acabei sofrendo um poco para resolver (kkk), mas eu chego lá. Na linha 32 do TSmallCard.class.php precisa trocar a primeira e última aspa por apóstrofo, da forma como está escrita a linha ocorre o erro abaixo Parse error: syntax error, unexpected 'fa' (T_STRING) in C:\wamp64\www\adelino\app\lib\util\TSmallCard.class.php on line 24 A linha alterada deve ficar da seguinte forma: $link->add($linkText.'<i class="fa fa-arrow-circle-right"></i>'); Espero ter colaborado com a dica. Abraço
IL

Ola, Jheferson Fonseca

Fiz aqui e funcionou,

Como faço para colocar as div e um datagrid pois as divs nao estao no tamanho correto.