JD
[BUG][DUVIDA] - Usando dois TDate no mesmo form
Fechado
Olá pessoal, estou com um problema estranho ao utilizar dois TDate no mesmo form, quando utilizo dois TDate um deles, mais precisamente o segundo que foi adicionado, fica sem o "data-picker" enquanto que o outro apresenta dois.
Estou enviando o anexo com um print do form, notem os campos "Entrega Doc:" e "Data de Fundacao:"
Vou deixar o código também.
Deste já agradeço qualquer ajuda.
Obrigado.
Estou enviando o anexo com um print do form, notem os campos "Entrega Doc:" e "Data de Fundacao:"
Vou deixar o código também.
Deste já agradeço qualquer ajuda.
Obrigado.
- <?php
- /**
- * ClientefinanceiroForm Registration
- * @author Jheferson Fonseca Gonçalves
- */
- class ClientefinanceiroForm extends TPage
- {
- protected $form; // form
- /**
- * Class constructor
- * Creates the page and the registration form
- */
- function __construct()
- {
- parent::__construct();
- // creates the notebook
- // creates the form
- $this->form = new TForm('form_Clientefinanceiro');
- $this->form->class = 'tform'; // CSS class
- $this->form->style = 'width: 100%';
- $page1 = new TTable;
- $page2 = new TTable;
- $page3 = new TTable;
- $page4 = new TTable;
- // add a table inside form
- $page1-> width = '100%';
- $page1->style = 'width: 100%';
- // add a row for the form title
- $row = $page1->addRow();
- $row->class = 'tformtitle'; // CSS class
- $row->addCell( new TLabel('Cliente') )->colspan = 2;
- // create the form fields
- $cod = new TEntry('cod');
- $nome = new TEntry('nome');
- $cnpj = new TEntry('cnpj');
- $estado = new TEntry('estado');
- $data_doc = new TDate('data_doc');
- $capital = new TEntry('capital');
- $data_fundacao = new TDate('data_fundacao');
- $limite_credito = new TEntry('limite_credito');
- $responsavel = new TEntry('responsavel');
- $representante = new TEntry('representante');
- $municipio = new TEntry('municipio');
- $observacoes = new TText('observacoes');
- // define the sizes
- $cod->setSize(200);
- $nome->setSize(200);
- $cnpj->setSize(100);
- $estado->setSize(200);
- $data_doc->setSize(150);
- $capital->setSize(200);
- $data_fundacao->setSize(150);
- $limite_credito->setSize(200);
- $responsavel->setSize(200);
- $representante->setSize(200);
- $municipio->setSize(200);
- $observacoes->setSize(200, 40);
- // validations
- //$cod->addValidation('cod', new TRequiredValidator);
- $nome->addValidation('nome', new TRequiredValidator);
- $cnpj->addValidation('cnpj', new TRequiredValidator);
- $estado->addValidation('estado', new TRequiredValidator);
- // add one row for each form field
- $page1->addRowSet( $label_cod = new TLabel('Cod:'), $cod );
- //$label_cod->setFontColor('#FF0000');
- $page1->addRowSet( $label_nome = new TLabel('Nome:'), $nome );
- $label_nome->setFontColor('#FF0000');
- $page1->addRowSet( $label_cnpj = new TLabel('CNPJ:'), $cnpj );
- $label_cnpj->setFontColor('#FF0000');
- $page1->addRowSet( new TLabel('Municipio:'), $municipio );
- $page1->addRowSet( $label_estado = new TLabel('Estado:'), $estado );
- $label_estado->setFontColor('#FF0000');
- $page1->addRowSet( new TLabel('Entrega Doc:'), $data_doc );
- $page1->addRowSet( new TLabel('Capital:'), $capital );
- $page1->addRowSet( new TLabel('Data de Fundacao:'), $data_fundacao );
- $page1->addRowSet( new TLabel('Limite De Crédito:'), $limite_credito );
- $page1->addRowSet( new TLabel('Responsável:'), $responsavel );
- $page1->addRowSet( new TLabel('Representante:'), $representante );
- $page1->addRowSet( new TLabel('Observação:'), $observacoes );
- $this->form->setFields(array($cod,$nome,$cnpj,$estado,$data_doc,$capital,$data_fundacao,$limite_credito,$responsavel,$representante,$municipio,$observacoes));
- // create the form actions
- $save_button = TButton::create('save', array($this, 'onSave'), _t('Save'), 'ico_save.png');
- $new_button = TButton::create('new', array($this, 'onEdit'), _t('New'), 'ico_new.png');
- $this->form->addField($save_button);
- $this->form->addField($new_button);
- $buttons_box = new THBox;
- $buttons_box->add($save_button);
- $buttons_box->add($new_button);
- // add a row for the form action
- $row = $page1->addRow();
- $row->class = 'tformaction'; // CSS class
- $row->addCell($buttons_box)->colspan = 2;
- $notebook = new TNotebook('100%',630);
- $notebook->appendPage('Dados Básicos', $page1);
- $notebook->appendPage('Sócios', $page2);
- $notebook->appendPage('Fornecedores/Ref', $page3);
- $notebook->appendPage('Histórico/Limites', $page4);
- $this->form->add($notebook);
- $vbox = new TVBox;
- $vbox->add(new TXMLBreadCrumb('menu.xml', 'ClientefinanceiroForm'));
- $vbox->add($this->form);
- $vbox->style = "width: 100%";
- parent::add($vbox);
- }
- /**
- * method onSave()
- * Executed whenever the user clicks at the save button
- */
- function onSave()
- {
- try
- {
- TTransaction::open('dados'); // open a transaction
- // get the form data into an active record Clientefinanceiro
- $object = $this->form->getData('Clientefinanceiro');
- $this->form->validate(); // form validation
- $object->store(); // stores the object
- $this->form->setData($object); // keep form data
- TTransaction::close(); // close the transaction
- // shows the success message
- new TMessage('info', TAdiantiCoreTranslator::translate('Record saved'));
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // shows the exception error message
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback(); // undo all pending operations
- }
- }
- /**
- * method onEdit()
- * Executed whenever the user clicks at the edit button da datagrid
- */
- function onEdit($param)
- {
- try
- {
- if (isset($param['key']))
- {
- $key=$param['key']; // get the parameter $key
- TTransaction::open('dados'); // open a transaction
- $object = new Clientefinanceiro($key); // instantiates the Active Record
- $this->form->setData($object); // fill the form
- TTransaction::close(); // close the transaction
- }
- else
- {
- $this->form->clear();
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', '<b>Error</b> ' . $e->getMessage()); // shows the exception error message
- TTransaction::rollback(); // undo all pending operations
- }
- }
- }
- ?>
Isso ocorre principalmente com o vertrigo troque pelo wamp ou atualize a versão de seu PHP.
Estou utilizando o Xampp com PHP 5.6.11
Compilação do xampp não roda legal com o adianti mude para o wamp que resolve.
Entendi...
Não há nenhuma configuração que resolva o problema no Xampp ?
Pensei que o Adianti não dependesse de configurações no servidor, isso vai ser um problema.
Na empresa onde trabalho é utilizado o xampp, que já está com o Apache devidamente configurado para rodar algumas aplicações COM e .NET
Se souber de alguma maneira de resolver o problema sem trocar o pacote do servidor fico muito agradecido.
Obrigado.
Não é aconselhável usar o xamp em ambiente de produção, porém como te falei é um problema que pode ser resolvido atualizando a versão do PHP, senão me engano tem alguns tutoriais na net mostrando como atualizar o xamp tente atualizar numa máquina a parte para testar.
Atualizei para o PHP 5.6.15 e o erro continua.
Vou experimentar na maquina local utilizando o wamp pra ver se resolve.
Obrigado.
não esqueça de limpar o cache dos navegadores.
tb tinha esse problema quando usava wamps da vida...
caso utilize windows como SO, eu recomendo baixar o VBox,
configurar uma maquina virtual com ubuntu, instalar php, apache, base de dados, samba, e mapear no windows e começar a desenvolver.
Ou ainda você instalar os dois sistemas operacionais e gerenciar o uso pelo GRUB (é o que faço atualmente).
Acessei o site do Wamp Server e verifiquei que a versão do php dele é a 5.5 o que não me agrada por não ser muito recente.
Confesso que não tenho experiencia com Wamp Server e isso me assusta um pouco, nunca tive problemas com o Xampp, está é a primeira vez.
Criar uma maquina virtual apenas para rodar um web server não acho legal, devido ao consumo de recursos que uma maquina virtual exige.
Um amigo meu utiliza o adianti com o Xampp vou ver com ele se ele teve este problema, estou suspeitando que a causa não é o Xampp e sim a versão ou configuração do PHP, afinal é o nucleo do PHP que é responsável por executar o código.
E tanto o Wamp quanto o Xampp ou um hambiente individual (Apache/PHP) deve ter o mesmo retorno do código, se a versão e o nucleo do php for o mesmo.
De qualquer forma as especificações do Adianti dizem o seguinte:
Independente de plataforma;
Compatível com PHP5.X;
Não necessita configuração especial para setup (Apenas descompacte e use);
Ou seja, ter que mudar o pacote de web server, criar uma maquina virtual com outro SO ou mudar versão do PHP do 5.6.11 pra outra versão inferior até 5.0 é fugir destes conceitos.
Agradeço a ajuda e compreensão de todos.
Como já havia imaginado a causa do problema não é o Xampp...
Verifiquei que no construtor da classe TDate é setado um id da seguinte maneira:
Note que é utilizado a função uniqid() do PHP que gera um id "UNICO" de acordo com o tempo atual em milionésimos de segundo, porém identifiquei no html da tela que os dois campos estavam com o mesmo ID e esta é a verdadeira causa do problema.
Resolvi o problema trocando a função uniqid() para:
E assim garanti que fosse gerado um ID unico e o bug foi resolvido.
Show de bola !!! Eu tinha parado de usar o vertrigo somente por causa disso.
Uma solução mais limpa foi:
Esse bug já está resolvido, a próxima versão usará a mt_rand() que é melhor que a rand().
Vários componentes foram revisados.
Lembrando: a uniqid() é bugada em algumas versões do PHP para Windows.
Att,
Maravilha !!!
Pablo já tem alguma previsão de quando vai ser lançada a próxima versão?
Creio que no início do mês que vem.
Reta final :-)
Não vejo a hora! kkk
Parabéns pelo framework, simplesmente incrível!