Lançado Adianti Framework 7.6!
Clique aqui para saber mais
Função Recursiva Com método ->setTransformer não funciona. Criei uma função recursiva sob o conceito de árvore binária (id é o pai e parent_id é o filho) ao coloca-la em uma página comum e invoca-la stand-alone os procedimentos em questão funcionam perfeitamente. Tive que adaptar minhas rotinas para faze-lo funcionar no padrão do framework. Eu ia até criar um artigo sobre o assunto entretanto não consegui faze-lo funcionar junto ao grid e n...
RM
Função Recursiva Com método ->setTransformer não funciona.  
Criei uma função recursiva sob o conceito de árvore binária (id é o pai e parent_id é o filho) ao coloca-la em uma página comum e invoca-la stand-alone os procedimentos em questão funcionam perfeitamente. Tive que adaptar minhas rotinas para faze-lo funcionar no padrão do framework.

Eu ia até criar um artigo sobre o assunto entretanto não consegui faze-lo funcionar junto ao grid e não queria usar um recurso work around como armazenar o resultado da montagem no caminho em um campo no banco de dados.

Se alguém quiser me dar uma luz vou postar os códigos e os sql para que reproduzam o mesmo em seu ambiente.

Primeiramente as tabelas e registros de exemplo:
-- -- Estrutura da tabela `crm_category` -- CREATE TABLE IF NOT EXISTS `crm_category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `image` varchar(255) DEFAULT NULL, `parent_id` int(11) NOT NULL DEFAULT '0', `name_br` varchar(255) NOT NULL, `description_br` text NOT NULL, `meta_description_br` varchar(255) NOT NULL, `meta_keyword_br` varchar(255) NOT NULL, `top` tinyint(1) NOT NULL, `column` int(3) NOT NULL, `sort_order` int(3) NOT NULL, `status` tinyint(1) NOT NULL, `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=19 ; INSERT INTO `crm_category` (`id`, `image`, `parent_id`, `name_br`, `description_br`, `meta_description_br`, `meta_keyword_br`, `top`, `column`, `sort_order`, `status`, `date_added`, `date_modified`) VALUES (1, NULL, 0, 'Produtos', 'produtos', 'produtos', 'produtos', 0, 0, 0, 1, '2015-09-17 00:00:00', '2015-09-17 00:00:00'), (16, NULL, 1, 'Almofadas', 'desc', 'meta', 'keys', 1, 1, 2, 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00'), (18, NULL, 16, 'Namorados', 'Almofadas de Namorados
', 'almofadas de namorados', 'namorados, almofadas', 0, 1, 1, 1, '2015-09-27 11:29:55', '2015-09-27 11:29:55');


Agora o model (CrmCategory.class.php):
  1. <?php
  2. /**
  3.  * CrmCategory Active Record
  4.  * @author  <your-name-here>
  5.  */
  6. class CrmCategory extends TRecord
  7. {
  8.     const TABLENAME 'crm_category';
  9.     const PRIMARYKEY'id';
  10.     const IDPOLICY =  'serial'// {max, serial}
  11.     
  12.     
  13.     /**
  14.      * Constructor method
  15.      */
  16.     public function __construct($id NULL$callObjectLoad TRUE)
  17.     {
  18.         parent::__construct($id$callObjectLoad);
  19.         parent::addAttribute('image');
  20.         parent::addAttribute('parent_id');
  21.         parent::addAttribute('name_br');
  22.         parent::addAttribute('description_br');
  23.         parent::addAttribute('meta_description_br');
  24.         parent::addAttribute('meta_keyword_br');
  25.         parent::addAttribute('top');
  26.         parent::addAttribute('column');
  27.         parent::addAttribute('sort_order');
  28.         parent::addAttribute('status');
  29.         parent::addAttribute('date_added');
  30.         parent::addAttribute('date_modified');
  31.     }
  32. }
  33. ?>


Agora a page controller de teste (teste.class.php):

  1. <?php
  2. class teste extends TPage
  3. {
  4.    
  5.     public $cat_path;
  6.     
  7.     function __construct()
  8.     {
  9.         parent::__construct();
  10.         parent::add(new TLabel('Página de Testes'));
  11.         
  12.         
  13.         try
  14.         { 
  15.             echo "<pre>Teste 1:\n";
  16.             TTransaction::open('crm');
  17.             $object= new CrmCategory(18);
  18.             TTransaction::close(); 
  19.             $retorno $this->formatCategoryPath($object);
  20.             echo "Retorno: || $retorno ||\n ";
  21.             echo '</pre>';
  22.             
  23.             echo "<pre>Teste 2:\n";
  24.             TTransaction::open('crm');
  25.             $object= new CrmCategory(16);
  26.             TTransaction::close(); 
  27.             $retorno $this->formatCategoryPath($object);
  28.             echo "Retorno: || $retorno ||\n ";
  29.             echo '</pre>';
  30.         }
  31.         catch (Exception $e// in case of exception
  32.         {
  33.             new TMessage('error''<b>Error</b> ' $e->getMessage()); // shows the exception error message
  34.             TTransaction::rollback(); // undo all pending operations
  35.         }
  36.         
  37.     }
  38.     
  39.     function formatCategoryPath($object)
  40.     {
  41.         $this->buildCategoryPath($object);
  42.         return $this->cat_path
  43.     }
  44.     
  45.     public function buildCategoryPath($object)
  46.     {
  47.         static $function_loaded=1;
  48.         static $cat_path='';
  49.         ($function_loaded == 1)?($cat_path=''):("");   
  50.         ($function_loaded == 1)?($this->cat_path=''):("");   
  51.         echo "Cargas da Função Build: $function_loaded\n";
  52.         try 
  53.         { 
  54.             TTransaction::open('crm'); // open transaction
  55.             ($function_loaded != 1)?($separator=' :: '):("");
  56.             $cat_path $object->name_br.$separator.$cat_path;
  57.             $parent = new CrmCategory($object->parent_id);
  58.             TTransaction::close(); // closes transaction
  59.             if($object->parent_id != 0)
  60.             {
  61.                 $function_loaded++;
  62.                 $this->formatCategoryPath($parent);
  63.             }
  64.             else
  65.             {
  66.                 $function_loaded=1;
  67.                 $this->cat_path $cat_path;
  68.             }
  69.         } 
  70.         catch (Exception $e
  71.         { 
  72.             new TMessage('error'$e->getMessage()); 
  73.         }
  74.     }
  75. }
  76. ?>


Qualquer grid padrão gerado pelo IDE ou mesmo estanque não consigo fazer funcionar os métodos usando o settransformer aplicando a formatação desejada dentro do grid. Entretanto, funciona perfeitamente como vocês poderão checar por si caso testem em sua cópia local no framework usando a página o código da página de teste que postei acima. Copio os dois métodos para dentro do controller que contém os formulários e o grid e mesmo o código estando funcional e sem erros não obtenho o resultado desejado.

  1. <?php
  2. $name_br->setTransformer(array($this'formatCategoryPath'));  
  3. ?>


Não sei se é um bug do framework ou algum conflito ou por alguma razão existe algum conflito na conexão de dados impedindo o código de funcionar. Agradeço qualquer luz sob o assunto preciso disto para um projeto e acredito que estas funções podem ser de utilidade para outros.

Pacotão Dominando o Adianti Framework 7
O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado! Versão 7.4


Dominando o Adianti 7 Quero me inscrever agora!

Comentários (2)


RM

Resultado do Teste:
imagizer.imageshack.com/img661/7926/MgdXlB.png
RM

Retorno do setTransformer:
imagizer.imageshack.com/img538/5515/zoZV7q.png