Combinar modelos por Categoria

Hola, tengo un porblema, a pesar de estar super interesado en trabajar con yii, me cuesta mucho comprenderlo.

En fin, mi idea es lograr hacer esto para seguir poniendole muchas pilas al yii.

Quiero crear una pagina, para ciertas categorias, ej: Autos, Motos, Camiones.

Cada categoria tiene sub-categorias.

Tengo dos tablas, con contenido diferente tbl_post tbl_productos y otra tabla para categorias. No se si es correcto tener divididos los articulos por tipo en dos tablas diferentes o bien poner una columna tipo, que los clasifique, que es lo recomendable?

Mi idea es que por ejemplo exista una pagina para la categoria Autos y que dentro de ella, me liste todos los autos que se encuentran dentro de la tbl_productos y todos las notas que se encuentran dentro de la tbl_post

a su vez, y si es que se puede, me gustaria darle un aspecto diferente a cada categoria.

En principio esto es lo que tengo realizado

tres controladores PostController, ProductosControllers, CategoriaController

y utilizo la categoria/view como vista(es correcto?), aunque los datos los importo directamente desde la vista, ya que no supe como implementarla dentro del modelo de categoria.




<?php

$this->breadcrumbs=array(

	'Categorias'=>array('index'),

	$model->name,

);

<h1>View Categoria #<?php echo $model->id; ?></h1>


<?php $this->widget('zii.widgets.CDetailView', array(

	'data'=>$model,

	'attributes'=>array(

		'id',

		'name',

		'frequency',

	),

));

?>

<br />


<?php 

$rawData=Post::model()->findAll('categoria_id=:categoria_id',

	array(

  		':categoria_id'=>$model->id,

  	));

$dataProvider=new CArrayDataProvider($rawData, array(

    'id'=>'id',

	'sort'=>array(

        'attributes'=>array(

             'id', 'title', 'content','categoria'

        ),

    ),

   

));

$form=$this->beginWidget('CActiveForm', array(

	'id'=>'form1', 'action' => Yii::app()->createUrl('post/create'), 

	'enableAjaxValidation'=>false,)); ?>




<?php $dataProvider->pagination->pageSize=5;?>

	<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'proveedor-grid',

	'dataProvider'=>$dataProvider,

	'columns'=>array(

	 array(

	 	'class' => 'SCLinkColumnWithSort',

		'name'=>'title',

        'labelExpression'=>'$data->title',

		'urlExpression'=>'"index.php?r=post/view&id=".$data->id',

        'header'=>'Titulo'

      ),

	array('name'=>'content', 'htmlOptions'=>array('width'=>'80px')),

	array('name'=>'categoria.name', 'header'=>'Categoria','htmlOptions'=>array('width'=>'80px')),

	array('name'=>'marca.name', 'header'=>'Marca', 'htmlOptions'=>array('width'=>'80px')),

	), ));?>

	<?php echo CHtml::submitButton('crear nuevo', array('style'=>'width','40px'))?>


<?php $this->endWidget()?>




<?php 

$rawData2=Productos::model()->findAll('categoria_id=:categoria_id',

	array(

  		':categoria_id'=>$model->id,

  	));

$dataProvider2=new CArrayDataProvider($rawData2, array(

    'id'=>'id',

	'sort'=>array(

        'attributes'=>array(

             'id', 'title', 'content','categoria'

        ),

    ),

   

));

$form=$this->beginWidget('CActiveForm', array(

	'id'=>'form1', 'action' => Yii::app()->createUrl('post/create'), 

	'enableAjaxValidation'=>false,)); ?>




<?php $dataProvider->pagination->pageSize=5;?>

	<?php $this->widget('zii.widgets.grid.CGridView', array(

	'id'=>'proveedor-grid',

	'dataProvider'=>$dataProvider2,

	'columns'=>array(

	 array(

	 	'class' => 'SCLinkColumnWithSort',

		'name'=>'title',

        'labelExpression'=>'$data->title',

		'urlExpression'=>'"index.php?r=post/view&id=".$data->id',

        'header'=>'Titulo'

      ),

	array('name'=>'content', 'htmlOptions'=>array('width'=>'80px')),

	array('name'=>'categoria.name', 'header'=>'Categoria','htmlOptions'=>array('width'=>'80px')),

	array('name'=>'marca.name', 'header'=>'Marca', 'htmlOptions'=>array('width'=>'80px')),

	), ));?>

	<?php echo CHtml::submitButton('crear nuevo', array('style'=>'width','40px'))?>


<?php $this->endWidget()?>




Muchas gracias

H.

Explica algo.

Tienes las siguientes tablas

Productos -> Almacena informacion de todos tus productos

Categorias -> Informacion solo de las categorias

Post -> Notas sobre cada producto

Estas fijando la siguiente relaciónes entre tus tablas

Productos-> categorias <- Post

Si las notas se refieren a cada producto deberian ir ligada a los productos, no a las categorias.

O las notas de los posts se refieren a las categorias?

Genio, muchas gracias por colaborar con mi duda.

Mi planteo es correcto, no existe relacion entre las notas y los productos mas que por coincidir en la categoria.

Mi idea es generar un menu principal de categorias destacadas, y cargar en estos links los productos y notas que coincidan para esa categoria y por otra parte un boton en el menu principal que me lleve solo a las notas con un submenu para las subcategorias.

mi problema radica en como cargar las notas y productos desde el modelo de categorias, ya que solo puedo hacer que me cargue las notas y modelos desde la vista.

Genio gracias!!!!

H.

Ya teniendo claro el esquema de la base datos podrias mejorar aun más el diseño de tu codigo si fijas relaciones entre las tablas desde los modelos. Eso evitara que tus vistas esten superpobladas, tambien en los modelos seria bueno que definieras metodos que regresaran dataproviders de activerecord. asi solo seria de pasar a tus grids, de hecho para ello fueron hechos los dataproviders.

Saludos

Hay un ejemplo arreglado?