Uma ajudinha na Consulta

Meus amigos poderia ajudar em uma consulta.

O caso é o seguinte estou desenvolvendo uma loja virtual como eu ja disse em outro momento, e estou com uma pequena dificuldade na ora de listar os rodutos.

Tenho uma tabela Categoria/subcategoria com os campos id, sort, parent, nome.

referencia que usei:

http://www.yiiframework.com/wiki/61/creating-a-database-driven-hierarchical-structure-combined-with-cmenu-and-superfish/

Categoria Pai

– Categoria filha

------Categoria filha da filha

Categoria Pai

Para listar as categoria esta ok, mais como eu poderia fazer a seguinte consulta:

1 Quando o usuario clicar na categoria pai, lista os produtos relacionados desta categoria inclusive as categorias filhas.

2 Uma olha consulta seria se ele clicar na categoria filha como saber a rota ate a categoria pai.

Bom acho que é isso a ideia é ilha a uma loja virtual com varias categorias.

Alguem poderia me ajudar.

Valew

Edson,

Para listar as categorias você conseguir listar de forma correta? Com os array sequenciais com as filhas?

Vou postar abaixo 2 função que criei para criar o array.

Vamos fazer sua dúvida número 1 primeiro.




function categorias() {

   $models = Categoria::model()->findAll('codpai = 0');

   

   foreach ($models as $model) {

	   $row['text'] = '<p><a href="' . Yii::app()->createAbsoluteUrl('produto', array('categoria' => $model->id)) . '">' . $model->titulo . '</a></p>';

	   $row['children'] = filhas($model->id);

	   $data[] = $row;

	   

   }

   return $data;

}


function filhas($id) {

   foreach (Categoria::model()->findAll('codpai = ' . $id) as $model) {

	   $row['text'] = '<p><a href="' . Yii::app()->createAbsoluteUrl('produto', array('categoria' => $model->id)) . '">' . $model->titulo . '</a></p>';

	   $row['children'] = filhas($model->id);

	   $data[] = $row;

   }

   return $data;

}



Usa assim:


$this->widget('CTreeView', array('data' => categorias()));

Faz o teste e veja como fico.

Vou testar aqui valew…

mais sera que da para usar no CMenu do yii?

Edson,

Dá sim, eu uso extensão do CMenu:


$this->widget('application.extensions.mbmenu.MbMenu', array(

                'items' => categorias(),

                'encodeLabel' => false

            ));

Se o array não de certo faz assim:




function categorias() {

   $models = Categoria::model()->findAll('codpai = 0');

   

   foreach ($models as $model) {

		$itens[$model->id] = array('label' => $model->nome, 'url' => Yii::app()->createAbsoluteUrl('produto', array('categoria' => $model->id)));

		$itens[$model->id]['items'] = $this->filhas($model->id);

		$data = $itens;

   }

   return $data;

}


function filhas($id) {

   foreach (Categoria::model()->findAll('codpai = ' . $id) as $model) {

        $itens[$model->id] = array('label' => $model->nome, 'url' => Yii::app()->createAbsoluteUrl('produto', array('categoria' => $model->id)));

		$itens[$model->id]['items'] = $this->filhas($model->id);

		$data = $itens;

   }

   return $data;

}



Melhorando a resposta:

Supondo que sua tabela tenha uma coluna "id" para primary key da categoria, uma coluna chamada "idPai" que refere-se ao id da categoria pai (óbvio), "nome" com o nome da categoria.

No model Categorias.php, que se refere a esta tabela, coloca algo assim:




public function relations()

	{

            return array(

            'pai'=>array(self::BELONGS_TO, 'Categorias', 'idPai'),

            'filhas'=>array(self::HAS_MANY, 'Categorias', 'idPai'),

		);

	}



Agora no view basta chamar o pai de cada categoria

(supondo o controller renderizando $model=Categorias::model()->findByPk($id))




$model->nome //(exibe o nome da categoria)

$model->pai->nome //(exibe o nome pai da categoria do model)

$model->pai->pai->nome //(exibe o pai do pai)

...



Para exibir as filhas, foreach resolve




foreach($model->filhas as $filhas1){

$filhas1->nome //exibe as filhas


   foreach($filhas1->filhas as $filhas2){

   $filhas2->nome //exibe as filhas das filhas

   }

}




Agora para relacionar as categorias com os produtos, supondo sua tabela de produtos com uma coluna que indentifica a categoria dele como por exemplo "categoriaId", seu model Categorias.php deve ter outro relacionamento:




public function relations()

	{

            return array(

            'pai'=>array(self::BELONGS_TO, 'Categorias', 'idPai'),

            'filhas'=>array(self::HAS_MANY, 'Categorias', 'idPai'),

            'produtos'=>array(self::HAS_MANY, 'Produtos', 'categoriaId'),

	     );

	}



Seguindo o exemplo acima:




$model->nome //(exibe o nome da categoria)


    foreach($model->produtos as $produtos){

       echo $produtos->nome; //(exibe o nome dos produtos da categoria atual)

     }




$model->pai->nome //(exibe o nome pai da categoria do model)

    foreach($model->pai->produtos as $produtosPai1){

       echo $produtosPai1->nome; //(exibe o nome dos produtos da categoria pai)

     }




$model->pai->pai->nome //(exibe o pai do pai)

    foreach($model->pai->pai->produtos as $produtosPai2){

       echo $produtosPai2->nome; //(exibe o nome dos produtos da categoria pai do pai)

     }

...




Para exibir as filhas, foreach resolve (neste ponto minha cabeça já está dando um nó mas vamos tentar)




foreach($model->filhas as $filhas1){

$filhas1->nome //exibe as filhas

 foreach($filhas1->produtos as $produtosFilhas1){

   echo $produtosFilhas1->nome //exibe os produtos das categorias filhas

   }


   foreach($filhas1->filhas as $filhas2){

   $filhas2->nome //exibe as filhas das filhas

        foreach($filhas2->produtos as $produtosFilhas2){

           echo $produtosFilhas2->nome //exibe os produtos das categorias filhas das filhas

         }

   }

}



Creio que o caminho seja este, claro que vc deve agora fazer um widget ou uma função no controller para limpar o código

Legal meus brodis vou testar estas alternativas…

valew

Entao Newerton… seu codigo funcionou um belezinha…

Mais eutou com um probleminha, ë o seguinte na home eu gostaria de lista as cotegoria da seguinte maneiras:

Informática

  • Notebooks

  • Computadores

  • Monitores LCD

  • veja mais…

So que no banco esta desta maneira:

Informatica

  • Notebook

  • Computadores

-----Monitores LCD

-----Teclados

--------Splay de Limpeza

Como pode ver o meu problema é limitar as subcategorias da categoria pai e como pode ver tem uma sub da sub.

É que na home eu queri resumir as categorias de uma pai, teria que contar todas as subs categoria da pai e gerar o limit um lista só e incluir o veja mais é o link da categoria pai.

minha ideia é igual o site da magazine luiza.

Será que teria como estou penando aqui?

Valew

Edson,

Faz assim:




function filhas($id) {

	$categorias = Categoria::model()->findAll(array(

		'condition' => 'codpai = :codpai',

		'params' => array(':codpai' => $id),

		'limit' => 3

	));

   foreach ($categorias as $model) {

        $itens[$model->id] = array('label' => $model->nome, 'url' => Yii::app()->createAbsoluteUrl('produto', array('categoria' => $model->id)));

                $itens[$model->id]['items'] = $this->filhas($model->id);

                $data = $itens;

   }

   return $data;

}



Ai você limita as subcategorias.

O link do "veja mais…" você faz com a categoria pai.

Tenta fazer o link do "veja mais…" dentro da função categorias(), depois do foreach(){}

valew resolvido agradeço!!!!

Meu amigos a respeito de lista as categoria esta ok:

Mais agora estou com um outro problema, gostaria de fazer um recursivo inverso preciso sabe o id da pai root

Categoria Pai

— Categoria 1

----- Categoria 2

---------Categoria 3

Quando o usuario acessar a categoria 3 eu gostaria de saber o id e o nome da categoria pai. Estou tentando fazer assim:


function CategoriaPai($id){

            $cat = Categoria::model()->findByPk($id);

            if($cat->parent == 0):

                return $cat->id;

            endif;                           

            $this->CategoriaPai($cat->parent);          

        }

mais nao esta dando certo esta dando um erro. Alguem poderi me ajudar pois sou mei leigo em OO

Valew

Que erro está dando?

Tenta coloca a variavel no array e depois da um print_r().

Eu to achando, que quando ele acha o parent == 0, ele executa denovo a função.




function CategoriaPai($id){

	$cat = Categoria::model()->findByPk($id);

	if($cat->parent == 0):

		$row[] = $cat->id;

	else:

		$this->CategoriaPai($cat->parent);

	endif;


	return $row;        

}


print_r(CategoriaPai(<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/cool.gif' class='bbc_emoticon' alt='8)' />);



Simplimente nao retorna nada, mas agora quando eu coloco esta funcao em uma classe de funcao que esta dentro da pasta compoments e a chamo:


funcao::CategoriaPai();

Retorna o erro:


HomeController and its behaviors do not have a method or closure named "CategoriaPai". 

É estranho pois parece que ele nao chama a funçao novamente.

Continua nao retornando nada.

Ola! Newerton blz! estou iniciando com Yii a poucas semanas e estou gostando muito. andei futucando alguns posts

e vir muito material e me deparei com esse aqui… achei o mais fácil no momento pra mim.

minha duvida e o seguinte

adaptei esse código pra gerar uma Treeview





function categorias() {

		$data=array();

   		$models = GrupoAcessoCategoria::model()->findAll('codpai = 0');

   		// $controller, $value, $id

		//'GrupoAcessoCategoria', $model, 'codpai'	

   foreach ($models as $model) {

          

		  $id = $model->codcategoria;

		  $codpai = $model->codpai;

		$row['text'] = CHtml::label(CHtml::checkBox(ucfirst('GrupoAcesso') . "[{$codpai}]", ($model->codcategoria == $model->codpai ? true : false), array('value' => $model->codcategoria)) . ' ' . $model->titulo, '');

		

		  $row['children'] = $this->filhas($model->codcategoria);

           $data[] = $row;

           

   }

   return $data;

}


function filhas($id) {

	$data=array();

   foreach (GrupoAcessoCategoria::model()->findAll('codpai = ' . $id) as $model) {

           

		   $row['text'] = CHtml::label(CHtml::checkBox(ucfirst('GrupoAcesso') . "[{$id}]", ($model->codcategoria == $model->codpai ? true : false), array('value' => $model->codcategoria)) . ' ' . $model->titulo, '');

		   

           $row['children'] = $this->filhas($model->codcategoria);

           $data[] = $row;

   }

   return $data;

}






esta funcionando certinho… meu caso é

01 caso = a possibilidade de fazer com que ao selecionar a categoria pai que esta como um checkBox selecionar todos os filhos???

02 caso = apos eu selecionar todos esses checkBox inserir no banco de dados e depois coletar esses valores para visualização dando um checked?;

essa função é tipo uma que voce tem em seu sistema de controle de usuario por cargo

tenho essa outra função ja funcionando com o usuário logado





public function accessRules() {


        $aRules = array();


        if( isset(Yii::app()->user->id) && Yii::app()->user->id <> '') {


            $cod = User::model()->find('id=?', Yii::app()->user->getId());


            if($cod->id_GrupoAcesso) {


                $group = GrupoAcesso::model()->find('id=?', $cod->id_GrupoAcesso);

                $permissao = json_decode('['.$group->permissao.']');


                foreach($permissao as $key => $value) {


                    $controllers = explode(',', $value->controllers);

                    if($value->controllers == '') {

                        $controllers = array('');

                    }


                    $actions = explode(',', $value->actions);

                    if($value->actions == '') {

                        $actions = array('index', 'view', 'create', 'update', 'delete', 'admin');

                    }


                    $rule = array('allow',

                            'controllers' => $controllers,

                            'actions' => $actions,

                            'users' => array(Yii::app()->user->usuario)

                    );


                    array_push($aRules, $rule);


                }


            } else {


                array_push($aRules,

                        array('allow',  // allow all users to perform 'index' and 'view' actions

                        'users'=>array(Yii::app()->user->usuario),

                        )

                );


            }

        }


        array_push($aRules,

                array('allow',  // allow all users to perform 'index' and 'view' actions

                'actions'=>array('login', 'logout'),

                'users'=>array('*'),

                ),

                array('deny',

                'users'=>array('*'),

                )

        );


        return $aRules;

    }




puxando uma array que esta no banco de dados assim, também que tem em uma imagem que você postou do seu sistema

{"controllers":"grupoacesso","actions":"create,admin,update,index,view"},

{"controllers":"user","actions":"create,admin,update,index,view"}

esse método ja esta funcionando o que esta faltando somente e a questão de gerar esse código e gravar no banco pois coloquei ele manual.

se poder dar uma força ai…

grato

Dárlecio,

Vou postar o código todo aqui.

Dúvida 01




Yii::app()->clientScript->registerScript('jquery', "


jQuery('input[type=checkbox]').live('click',function() {

        var id = this.id;

	var checked=this.checked;

	jQuery('input[id*=' + id + '_]').each(function() {

		this.checked=checked;

	});

});


");



Dúvida 02




$model->permissao = '';

if( !is_null($_POST['Usuariocargo']['permissao']) ) {


	foreach($_POST['Usuariocargo']['permissao'] as $key => $value) {

		$permissoes .= '{"controllers":"'.$key.'","actions":"';


		foreach($value as $k => $v) {

			$permissoes .= $k.',';

		}

		$permissoes = substr($permissoes, 0, -1);


		$permissoes .= '"},';


	}

	$permissoes = substr($permissoes, 0, -1);

	$model->permissao = $permissoes;

}



A dúvida 2, você pode colocar no seu actionCreate e actionUpdate, essas programação que fiz é antiga, não tive tempo de reduzir ela ainda, mais todas estão funcionando perfeitamente.

Obrigado por ter respondido…

meu CTreeView no _form esta assim!




$this->widget('CTreeView', array('data' =>Yii::app()->controller->categorias()  ,

		'control'=>'#treecontrol',

		'animated'=>'fast',

    	'collapsed'=>true,

		 'htmlOptions' => array('class' => 'treeview-red')

		 )

		   );



MEU /protected/controllers/GrupoAcessoController.php





public function actionCreate()

	{

		$model=new GrupoAcesso;


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);




	if(isset($_POST['GrupoAcesso']))

		{

			$model->attributes=$_POST['GrupoAcesso'];

			

			

		///////////////////// INSERIR DADOS PERMISSAO  NO CAMPO permissao

		$model->permissao = '';

		

		if( !is_null($_POST['GrupoAcesso']['permissao']) ) {


        foreach($_POST['GrupoAcesso']['permissao'] as $key => $value) {

                $permissoes .= '{"controllers":"'.$key.'","actions":"';


                foreach($value as $k => $v) {

                        $permissoes .= $k.',';

                }

                $permissoes = substr($permissoes, 0, -1);


                $permissoes .= '"},';


        }

        $permissoes = substr($permissoes, 0, -1);

        $model->permissao = $permissoes;

}


		//////////////////////////////


			if($model->save())

				$this->redirect(array('view','id'=>$model->id));

		}


		$this->render('create',array(

			'model'=>$model,

		));

	}




quando eu clico dou um submit no form ele nao grava as informações no banco de dados

MEU /protected/components/Controller.php tem essas funções:




///////////////////////// FUNCAO GERA TREEVIEW

	

	function categorias() {

		$data=array();

   		$models = GrupoAcessoCategoria::model()->findAll('codpai = 0');

   		

   foreach ($models as $model) {

          

		  $id = $model->codcategoria;

		  $codpai = $model->codpai;

		$row['text'] = CHtml::label(CHtml::checkBox(ucfirst('GrupoAcesso') . "[{$codpai}]", ($model->codcategoria == $model->codpai ? true : false), array('value' => $model->codcategoria)) . ' ' . $model->titulo, '');

		

		  $row['children'] = $this->filhas($model->codcategoria);

           $data[] = $row;

           

   }

   return $data;

}


function filhas($id) {

	$data=array();

   foreach (GrupoAcessoCategoria::model()->findAll('codpai = ' . $id) as $model) {

           

		   $row['text'] = CHtml::label(CHtml::checkBox(ucfirst('GrupoAcesso') . "[{$id}]", ($model->codcategoria == $model->codpai ? true : false), array('value' => $model->codcategoria)) . ' ' . $model->titulo, '');

		   

           $row['children'] = $this->filhas($model->codcategoria);

           $data[] = $row;

   }

   return $data;

}

	////////////////////////////




minha tabela de de GrupoAcessoCategoria

codcategoria | codpai | titulo

1 6 ADMINISTRAÇÃO

2 1 User

3 2 index

4 2 create

5 2 view

6 2 update

7 2 delete

8 2 admin

ela esta sendo listada pelo treeview , mas ela pertence a outro model que é GrupoAcessoCategoria

essa forma que fiz é a correta? como se o os checkbox nao estiversse passando os valores em array pro actionCreate

adicionei tambem no form o script


 Yii::app()->clientScript->registerScript('jquery', "


jQuery('input[type=checkbox]').live('click',function() {

        var id = this.id;

        var checked=this.checked;

        jQuery('input[id*=' + id + '_]').each(function() {

                this.checked=checked;

        });

});


");

mas não funcionou.

fico muinto grato se puder me ajudar … rsrrs tenho ja uns 4 dias sem dormir… quando aprender irei postar meus resultados aqui tambem… abraços…

No seu GrupoAcessoController.php na actionCreate().

Antes do if( !is_null($_POST[‘GrupoAcesso’][‘permissao’]) ) {

Coloca um var_dump($_POST); exit();

E veja se os checkbox selecionado estão indo e com quais nomes.

Olá Newerton!

Depois de quebrar muita a cabeça fui pesquisando e testando varios widget e achei um bem interessante o MTreeView :

MTreeView

que tem varias funcionalidades, mas para o que eu queria ele nao tem por padrao então como tava precisando gerar uma TreeView por Categoria e Subcategoria fiz umas alterações no arquivo MTreeView.php para gerar uma listagem com CheckBox e atribuir como checked sendo passado por um array dentro do banco dados.

Segue abaixo o resultado;

3209

Grupoacesso.png

Depois vou criar um Post com com todo o material que usei para os que precisarem pois por eu ser iniciante quebrei muita cabeça… rsrsrs segue abaixo o codigo completo do /protected/extensions/MTreeView/MTreeView.php

adicionei esses dados




<?php


class MTreeView extends CTreeView {


    //private properties

    private $_tree;

    private $_menus;

    private $_fields_adjacency = array(

        'id' => 'id',

        'text' => 'text',

        'url' => 'url',

        'icon' => 'icon',

        'alt' => 'alt',

        'tooltip' => 'tooltip',

        'id_parent' => 'id_parent',

        'task' => 'task',

        'position' => 'position',

        'options' => false,

		// campo action adicionado na tabela padrao do mtreeview

		'action' => 'action',			

		'id2' => 'id2',

		// campo controller // campo adicionado na tabela padrao do mtreeview

		'controller' => 'controller',  

		// pega dados checked // campo  adicionado na tabela padrao do mtreeview somente para teste

		'ids_checked' => 'ids_checked', 

				

		

    );




alterei a função getAdjacentTree do MTreeView.php para essa:





 private function getAdjacentTree($menu) {

        foreach ($menu as $data) {

            if ($this->_fields_adjacency['task'])

                if (isset($data ['task']))

                    if (!Yii::app()->user->checkAccess($data ['task']))

                        continue;

            $thisref = &$refs [$data ['id']];

            $thisref ['id'] = $data ['id'];

			

			////////////////////////////////INICIO ALTERAÇÕES

			

			 if (!is_null($data ['id_parent'])) {

				if($data ['action']=="controller")	{$v=$data ['id']; $c="controller";}  

				else { $v=$data ['id2']; $c="action";}

				

					///coleta dados para dar checked

					$findArray = $this->_fields_adjacency['ids_checked'];	

					

						if($findArray=="ids_checked" or $findArray==array()){ //se o array nao existir ou nullo

						$findArray=array();

						}

										

				 $thisref ['text'] = CHtml::label(CHtml::checkBox('Grupo_dados['.$v."][]".$c."", (in_array($data ['id'],$findArray) ? true : false), 

		 		 array('value' =>$data ['id'], 'id' =>$data ['id'])) . ' ' .  $data['text'], '');

			 

			 } else {


            $thisref ['text'] = $this->formatTreeLinks($data ['text'], $this->processURL($this->_fields_adjacency, $data), $this->_fields_adjacency['icon'] ? $data ['icon'] : NULL, $this->_fields_adjacency['tooltip'] ? $data ['tooltip'] : NULL, $this->_fields_adjacency['alt'] ? $data['alt'] : '', $this->_fields_adjacency['options'] ? json_decode($data ['options'], true) : array());

			 }

			 

			 ////////////////////////////////FIm

			 

			 

            if ($data ['id_parent'] == 0) {

                $list [$data ['id']] = &$thisref;

            } else {

                $refs [$data ['id_parent']] ['children'] [$data ['id']] = &$thisref;

            }

        }

        return $list;

    }






[/code]

no meu /protected/components/Controller.php

adaptei a função que você me passou ^^





public function gera_permissao($Grupo_dados,$tipo){

		// $tipo = permissao / ids_checked

		

		$permissoes=""; 

		$checkeds=array();

		$k2=""; 

		

				if(isset($Grupo_dados))

		{

			foreach($Grupo_dados as $key=> $valor){

					

			//// ---> Cria Controllers 				 

			$controleCategoria=MenuAdjacency::model()->findByPk($valor);

				 if ($controleCategoria->action=="controller") {  

					 $permissoes .= '{"controllers":"'.$controleCategoria->controller.'","actions":"';}	

					//se nao marcar o checkbox do controler 

						 if ($controleCategoria->action!="controller" or $permissoes=="" ) {   

						  $permissoes .= '{"controllers":"'.$controleCategoria->controller.'","actions":"';	}

							

			//// ---> Cria actions 

			foreach($Grupo_dados[$key] as $k => $v) {

			$acaoCategoria= MenuAdjacency::model()->findByPk($v);

							

							$checkeds[] = $v;

							if ($acaoCategoria->action!="controller") { 

							$permissoes .= $acaoCategoria->action.',';

							}

					} 						

				

				$permissoes = substr($permissoes, 0, -1);

                $permissoes .= '"},';

				

				} 	///  final foreach

		}

		

		if(!isset($Grupo_dados)) 

			$checkeds = $checkeds;

						

		$permissoes = substr($permissoes, 0, -1);

		$checkeds = serialize($checkeds);

			

		if($tipo=="permissao") 

			return $permissoes;

		

		if($tipo=="ids_checked")

			return $checkeds;

			

		}



no Meu ActionCreate /protected/controllers/GrupoAcessoController.php

O mesmo codigo para o ActionUpdate





public function actionCreate()

	{

		$model=new GrupoAcesso;


		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);


	

	if(isset($_POST['GrupoAcesso']))

		{

			$model->attributes=$_POST['GrupoAcesso'];

			

			

		//////////////////////////	GRAVA PERMISSAO NO BANCO 

		$model->permissao = '';

		$model->ids_checked = '';

					

		if(!isset($_POST['Grupo_dados'])) { $checkeds =array(); $permissao=array(); }

		 else { $checkeds = $_POST['Grupo_dados']; $permissao = $_POST['Grupo_dados']; }

			

		$model->ids_checked = $this->gera_permissao($checkeds, "ids_checked");

		$model->permissao = $this->gera_permissao($permissao, "permissao");

	

		////////////////////////// FINAL 

		

			if($model->save())

				$this->redirect(array('view','id'=>$model->id));

		}


		$this->render('create',array(

			'model'=>$model,

		));

	}




no meu _form





/// marcar todos checkbox filho através do pai


Yii::app()->clientScript->registerScript('jquery', "

jQuery(document).ready(function($){

    $('ul[id $= yw0] input[type=checkbox]').click(function () {

                $(this).closest('li').find('input[type=checkbox]').attr('checked', this.checked);

            });

		});

");





$this->widget('application.extensions.MTreeView.MTreeView',array(

'collapsed'=>true,

'animated'=>'fast',

//---MTreeView options from here

'table'=>'menu_adjacency',//what table the menu would come from

'hierModel'=>'adjacency',//hierarchy model of the table

'conditions'=>array('visible=:visible',array(':visible'=>1)),//other conditions if any                                    

'fields'=>array(//declaration of fields

'text'=>'title',//no `text` column, use `title` instead

'alt'=>'title',//skip using `alt` column

'id_parent'=>'parent_id',//no `id_parent` column,use `parent_id` instead

'task'=>false,

'icon'=>true,

'url'=>false,

/// pega dados para do banco

'ids_checked'=>unserialize($model->ids_checked),

),

));




No controller para ler as permissao do banco;




public function accessRules() {


        $aRules = array();


        if( isset(Yii::app()->user->id) && Yii::app()->user->id <> '') {


            $cod = User::model()->find('id=?', Yii::app()->user->getId());

			

            if($cod->id_GrupoAcesso) {


				$group= GrupoAcesso::model()->findByPk($cod->id_GrupoAcesso);

				// $group = GrupoAcesso::model()->find('id=?',$cod->id_GrupoAcesso);

                $permissao = json_decode('['.$group->permissao.']');


                foreach($permissao as $key => $value) {


                    $controllers = explode(',', $value->controllers);

                    if($value->controllers == '') {

                        $controllers = array('');

                    }


                    $actions = explode(',', $value->actions);

                    if($value->actions == '') {

                        $actions = array('index', 'view', 'create', 'update', 'delete', 'admin');

                    }


                    $rule = array('allow',

                            'controllers' => $controllers,

                            'actions' => $actions,

                            'users' => array(Yii::app()->user->usuario)

                    );


                    array_push($aRules, $rule);


                }


            } else {


                array_push($aRules,

                        array('allow',  // allow all users to perform 'index' and 'view' actions

                        'users'=>array(Yii::app()->user->usuario),

                        )

                );


            }

        }


        array_push($aRules,

                array('allow',  // allow all users to perform 'index' and 'view' actions

                'actions'=>array('login', 'logout'),

                'users'=>array('*'),

                ),

                array('deny',

                'users'=>array('*'),

                )

        );


        return $aRules;

    }



pega o formato:

campo permissao

{"controllers":"grupoacesso","actions":"index,view,admin,create,update,delete"}

e para o marcar o checkbox:

serializa o array para o campo ids_checked

não esquecendo usei a tabela padrao do Mtreeview menu_adjacency

E adicionei CAMPOS:

action

controller

ids_checked

Essa foi a forma mais facil que pude fazer no momento , mas ta tudo funcionando perfeitamente…

agradeço muito ai pela força me deu uma luz suas postagem…

muito grato…