960 Grid En Yii

Hallo,

Ik ben redelijk nieuw in heel het Yii gebeuren.

Om alles onder de knie te krijgen ben ik van de Blog demo vertrokken om een soort portfolio te maken.

Momenteel ben ik echter vastgelopen op een, op het eerste zicht nogal basic, probleem.

Ik wou per project in het portfolio een afbeelding tonen en de output verdelen over 3 kolommen met behulp van het 960 grid…

Ik meen op dit moment dat een Widget hiervoor de beste oplossing zou zijn. Maar misschien kan het veel eenvoudiger. Vandaar mijn topic in dit forum.

(Ik geef een stuk van de image en de project model mee… De views staan onderaan)

ProjectController




class ProjectController extends Controller

{

    ...

        /**

	 * Lists all models.

	 */

	public function actionIndex()

	{

		$dataProvider=new CActiveDataProvider('Project');

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

			'dataProvider'=>$dataProvider,

		));

	}

    ...

}



Project model




class Project extends CActiveRecord

{

	/**

	 * This is the model class for table "{{project}}".

	 *

	 * The followings are the available columns in table '{{project}}':

	 * @property integer $id

	 * @property string $name

	 * @property integer $type

	 * @property string $tags

	 * @property string $image

	 * @property string $description

	 * @property integer $create_time

	 * @property integer $update_time

	 * @property integer $author_id

	 */

	const STATUS_DRAFT=1;

	const STATUS_PUBLISHED=2;

	const STATUS_ARCHIVED=3;

	

	private $_oldTags;

    ...

}



Image model




class Image extends CActiveRecord

{

        /**

         * This is the model class for table "{{image}}".

         *

         * The followings are the available columns in table '{{image}}':

         * @property integer $id

         * @property string $filename

         * @property integer $project_id

         */

    ...

}



[size="4"]views[/size]

project/index




<?php

/* @var $this ProjectController */

/* @var $dataProvider CActiveDataProvider */


$this->breadcrumbs=array(

	'Projects',

);


$this->menu=array(

	array('label'=>'Project toevoegen', 'url'=>array('create')),

	array('label'=>'Projecten bewerken', 'url'=>array('admin')),

);

?>


<?php if(!empty($_GET['tag'])): ?>

	<h1>Projecten getagged met <i><?php echo CHtml::encode($_GET['tag']); ?></i></h1>

<?php else: ?>

	<h1>Projecten</h1>

<?php endif; ?>


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

	'items'=>$this->menu,

)); ?><!-- action menu -->

	

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

	'dataProvider'=>$dataProvider,

	'itemView'=>'_view',

	'template'=>"{items}\n{pager}",

)); ?>



project/_view




<?php

/**

 * Showing the first image from a project

 * 

 * @var $this ProjectController

 * @var $data Project

 * 

 */


$firstImage=$data->images[0];

$markup='<div class="grid_3">'.CHtml::image(Yii::app()->baseUrl.'/images/projects/'.$data->name.'/thumb/'.$data->create_time.'_'.$firstImage->filename).'</div>';


?>

<?php if(!isset($detail)):

	echo CHtml::link($markup, array('view', 'id'=>$data->id));

else:

	echo $markup;

endif; ?>



In deze laatste wordt dus per project 1 afbeelding getoond dewelke gelinkt is naar de pagina met meer info over het project.

Als class geef ik hier grid_3 op. Om 3 afbeeldingen naast elkaar te krijgen moet de eerste ook een class alpha krijgen en de derde een class omega.

normaal zou ik dit met een foreach oplossen ofzo, maar heb totaal geen idee hoe ik dit combineer met renderPartial op een goede manier.

Ik dacht er ook nog aan om $data->id te gebruiken om te checken voor even/oneven, maar als er dan records gedelete worden zou de layout breken ?!

Kan iemand me weer op het goede pad helpen ?

(Sorry als de vraag verward en onsamenhangend over komt, maar ben al een hele dag met dit domme probleem bezig en denk niet zo helder meer :mellow: )

Alvast bedankt.

At last,

Om mijn eigen probleem op te lossen:

in de index view




...

<?php 

        $class="";

	

	for($i=1;$i <= $dataProvider->itemCount;$i++):

		if($i==1 || $class=="omega") { $class="alpha"; } 

		elseif(($i%3)==0) {$class="omega";} else {$class="";}


        // !! data[$i-1] because we have 3 cols: $i%3 must be 0 in last col

	?>

	<div class="grid_3 <?= $class; ?>">

		<?php $this->renderPartial('_firstImage', array(

			'data'=>$dataProvider->data[$i-1],

		)); ?>

	</div>

<?php endfor; ?>

...



in _firstImage partial




$firstImage=$data->images[0];

echo CHtml::image(Yii::app()->baseUrl.'/images/projects/'.$data->name.'/thumb/'.$data->create_time.'_'.$firstImage->filename);



Geen idee of dit dé way to do it is. Maar het werkt :unsure: :rolleyes: