JJ
TWindow é Responsivo?
Tenho um sistema feito no framework 4.0. Estou migrando para o framework 5.5 por ele ser responsivo. Uso o Studio Pro e nele temos a opção de criar [New auxiliar Form]. Alguns dos meus formulários auxiliares estão extendendo de TWindow, geralmente campos com combobox tem um botão ao lado para cadastro rápido por parte do usuário final. Porém não estou conseguindo deixar os formulários que extende do TWindow responsivo. Mudei o form de TQuickForm para BootstrapFormBuilder. Alterei o addQuickFields para addFields. Alterei o Datagrid pelo BootstrapDatagridWrapper(new TDataGrid); Quando altero um formulário que extende de TPage funciona perfeitamente, ou seja o formulário fica responsivo. Porém com o TWindows fica estranho principalmente no celular. Alguém já enfrentou está dificuldade? E o TWindow é responsivo?
Segue o código:
Segue o código:
- <?php
- /**
- * CargoFormList Form List
- * @author <your name here>
- */
- class CargoFormList extends TWindow
- {
- protected $form; // form
- protected $datagrid; // datagrid
- protected $pageNavigation;
- protected $loaded;
-
- /**
- * Form constructor
- * @param $param Request
- */
- public function __construct( $param )
- {
- parent::__construct();
-
- $this->form = new BootstrapFormBuilder('form_Cargo');
- $this->form->setFormTitle('Cargo');
-
- // create the form fields
- $id = new TEntry('id');
- $nome = new TEntry('nome');
- // add the fields
- $this->form->addFields( [ new TLabel('Id') ], [ $id ] );
- $this->form->addFields( [ new TLabel('Nome') ], [ $nome ] );
- // set sizes
- $id->setSize('100%');
- $nome->setSize('100%');
- if (!empty($id))
- {
- $id->setEditable(FALSE);
- }
-
- /** samples
- $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
- $fieldX->setSize( '100%' ); // set size
- **/
-
- // create the form actions
- $btn = $this->form->addAction(_t('Save'), new TAction([$this, 'onSave']), 'fa:floppy-o');
- $btn->class = 'btn btn-sm btn-primary';
- $this->form->addAction(_t('New'), new TAction([$this, 'onEdit']), 'fa:eraser red');
-
- // creates a Datagrid
- $this->datagrid = new BootstrapDatagridWrapper(new TDataGrid);
- $this->datagrid->style = 'width: 100%';
- // $this->datagrid->datatable = 'true';
- // $this->datagrid->enablePopover('Popover', 'Hi <b> {name} </b>');
-
- // creates the datagrid columns
- $column_id = new TDataGridColumn('id', 'Id', 'left');
- $column_nome = new TDataGridColumn('nome', 'Nome', 'left');
- // add the columns to the DataGrid
- $this->datagrid->addColumn($column_id);
- $this->datagrid->addColumn($column_nome);
-
- // creates two datagrid actions
- $action1 = new TDataGridAction([$this, 'onEdit']);
- //$action1->setUseButton(TRUE);
- //$action1->setButtonClass('btn btn-default');
- $action1->setLabel(_t('Edit'));
- $action1->setImage('fa:pencil-square-o blue fa-lg');
- $action1->setField('id');
-
- $action2 = new TDataGridAction([$this, 'onDelete']);
- //$action2->setUseButton(TRUE);
- //$action2->setButtonClass('btn btn-default');
- $action2->setLabel(_t('Delete'));
- $action2->setImage('fa:trash-o red fa-lg');
- $action2->setField('id');
-
- // add the actions to the datagrid
- $this->datagrid->addAction($action1);
- $this->datagrid->addAction($action2);
-
- // create the datagrid model
- $this->datagrid->createModel();
-
- // creates the page navigation
- $this->pageNavigation = new TPageNavigation;
- $this->pageNavigation->setAction(new TAction([$this, 'onReload']));
- $this->pageNavigation->setWidth($this->datagrid->getWidth());
-
- // vertical box container
- $container = new TVBox;
- $container->style = 'width: 90%';
- // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add($this->form);
- $container->add(TPanelGroup::pack('', $this->datagrid));
- $container->add($this->pageNavigation);
-
- parent::add($container);
- }
-
- /**
- * Load the datagrid with data
- */
- public function onReload($param = NULL)
- {
- try
- {
- // open a transaction with database 'sgu'
- TTransaction::open('sgu');
-
- // creates a repository for Cargo
- $repository = new TRepository('Cargo');
- $limit = 10;
- // creates a criteria
- $criteria = new TCriteria;
-
- // default order
- if (empty($param['order']))
- {
- $param['order'] = 'id';
- $param['direction'] = 'asc';
- }
- $criteria->setProperties($param); // order, offset
- $criteria->setProperty('limit', $limit);
-
- // load the objects according to criteria
- $objects = $repository->load($criteria, FALSE);
-
- $this->datagrid->clear();
- if ($objects)
- {
- // iterate the collection of active records
- foreach ($objects as $object)
- {
- // add the object inside the datagrid
- $this->datagrid->addItem($object);
- }
- }
-
- // reset the criteria for record count
- $criteria->resetProperties();
- $count= $repository->count($criteria);
-
- $this->pageNavigation->setCount($count); // count of records
- $this->pageNavigation->setProperties($param); // order, page
- $this->pageNavigation->setLimit($limit); // limit
-
- // close the transaction
- TTransaction::close();
- $this->loaded = true;
- }
- catch (Exception $e) // in case of exception
- {
- // shows the exception error message
- new TMessage('error', $e->getMessage());
-
- // undo all pending operations
- TTransaction::rollback();
- }
- }
-
- /**
- * Ask before deletion
- */
- public static function onDelete($param)
- {
- // define the delete action
- $action = new TAction([__CLASS__, 'Delete']);
- $action->setParameters($param); // pass the key parameter ahead
-
- // shows a dialog to the user
- new TQuestion(TAdiantiCoreTranslator::translate('Do you really want to delete ?'), $action);
- }
-
- /**
- * Delete a record
- */
- public static function Delete($param)
- {
- try
- {
- $key = $param['key']; // get the parameter $key
- TTransaction::open('sgu'); // open a transaction with database
- $object = new Cargo($key, FALSE); // instantiates the Active Record
- $object->delete(); // deletes the object from the database
- TTransaction::close(); // close the transaction
-
- $pos_action = new TAction([__CLASS__, 'onReload']);
- new TMessage('info', TAdiantiCoreTranslator::translate('Record deleted'), $pos_action); // success message
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage()); // shows the exception error message
- TTransaction::rollback(); // undo all pending operations
- }
- }
-
- /**
- * Save form data
- * @param $param Request
- */
- public function onSave( $param )
- {
- try
- {
- TTransaction::open('sgu'); // open a transaction
-
- /**
- // Enable Debug logger for SQL operations inside the transaction
- TTransaction::setLogger(new TLoggerSTD); // standard output
- TTransaction::setLogger(new TLoggerTXT('log.txt')); // file
- **/
-
- $this->form->validate(); // validate form data
- $data = $this->form->getData(); // get form data as array
-
- $object = new Cargo; // create an empty object
- $object->fromArray( (array) $data); // load the object with data
- $object->store(); // save the object
-
- // get the generated id
- $data->id = $object->id;
-
- $this->form->setData($data); // fill form data
- TTransaction::close(); // close the transaction
-
- new TMessage('info', TAdiantiCoreTranslator::translate('Record saved')); // success message
- $this->onReload(); // reload the listing
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage()); // shows the exception error message
- $this->form->setData( $this->form->getData() ); // keep form data
- TTransaction::rollback(); // undo all pending operations
- }
- }
-
- /**
- * Clear form data
- * @param $param Request
- */
- public function onClear( $param )
- {
- $this->form->clear(TRUE);
- }
-
- /**
- * Load object to form data
- * @param $param Request
- */
- public function onEdit( $param )
- {
- try
- {
- if (isset($param['key']))
- {
- $key = $param['key']; // get the parameter $key
- TTransaction::open('sgu'); // open a transaction
- $object = new Cargo($key); // instantiates the Active Record
- $this->form->setData($object); // fill the form
- TTransaction::close(); // close the transaction
- }
- else
- {
- $this->form->clear(TRUE);
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage()); // shows the exception error message
- TTransaction::rollback(); // undo all pending operations
- }
- }
-
- /**
- * method show()
- * Shows the page
- */
- public function show()
- {
- // check if the datagrid is already loaded
- if (!$this->loaded AND (!isset($_GET['method']) OR $_GET['method'] !== 'onReload') )
- {
- $this->onReload( func_get_arg(0) );
- }
- parent::show();
- }
- }
- ?>
Vou compartilhar o que utilizei como solução. Não ficou 100% responsivo mais já está bom.
Minha solução envolve:
1-) obter o código do Mobile Detect encontrando em: mobiledetect.net/
Baixei a versão 2.8.33
Eu adicionei o código na pasta app/lib
2-) Obter a classe Detect Device encontado em: https://detectdevice.com/#download
Baixei a versão 1.0.4
Copie o codigo detect.php e colei na mesma pasta do mobile Detect
Alterei o nome de detect.php para Detect.class.php assim a classe é reconhecida automoticamente.
coloquei o arquivo js na pasta app/include
3-) Adicione o codigo js no arquivo libraries.html no theme3
4-) Adicionei no final do arquivo init.php o código:
Para finalizar inseri o código para verificar qual é o dispositivo do cliente e ajustar o setSize do TWindow para cada caso:
Código Completo:
</your>
Pessoal,
Acabo de descobri que o TWindow é responsivo:
Eu precisava era acrescentar estes códigos:
$this->form->style = 'display: table;width:100%'; // change style
parent::setSize(0.8, null);
parent::setProperty('class', 'window_modal');
Removi o que fiz acima para deixar mais fácil para futuras atualizações do framework.
</your>