[BUG][DUVIDA] - Usando dois TDate no mesmo form 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. Obr...
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.

<?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        }    }}?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (16)


FC

Isso ocorre principalmente com o vertrigo troque pelo wamp ou atualize a versão de seu PHP.
JD

Estou utilizando o Xampp com PHP 5.6.11
FC

Compilação do xampp não roda legal com o adianti mude para o wamp que resolve.
JD

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.
FC

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.
JD

Atualizei para o PHP 5.6.15 e o erro continua.
Vou experimentar na maquina local utilizando o wamp pra ver se resolve.
Obrigado.
FC

não esqueça de limpar o cache dos navegadores.
GE

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).
JD

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.
JD

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:
<?phppublic function __construct($name)    {        parent::__construct($name);        $this->id   = 'tdate_'.uniqid();?>

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:
<?phppublic function __construct($name)    {        parent::__construct($name);        $this->id   = 'tdate_'.date("His").rand(0,100);?>


E assim garanti que fosse gerado um ID unico e o bug foi resolvido.

FC

Show de bola !!! Eu tinha parado de usar o vertrigo somente por causa disso.
JD

Uma solução mais limpa foi:

<?php$this->id   = 'tdate_'.uniqid(rand(0,100));?>
PD

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,
JD

Maravilha !!!
Pablo já tem alguma previsão de quando vai ser lançada a próxima versão?
PD

Creio que no início do mês que vem.
Reta final :-)
JD

Não vejo a hora! kkk
Parabéns pelo framework, simplesmente incrível!