Columns for CListView

В составе лучшего PHP фреймворка в мире — Yii есть класс для отображения списка элементов — CListView. К сожалению он не отображает список в несколько колонок, для одного из моих проектов понадобилось именно это.

Представляю ColumnListView

<?php 
 
Yii::import('zii.widgets.CListView');
 
class ColumnListView extends CListView
{
 
	public $columns = array("leftblock", "midblock", "rightblock");
 
	//@override)
	public function renderItems()
	{
		$y = 0;
		if(sizeof($this->columns))
			foreach ($this->columns as $column)
			{			
				echo CHtml::openTag('div',array('class'=>'column '.$column,))."\n";
				$columns = sizeof($this->columns);
 
				$data=$this->dataProvider->getData();
				if(count($data)>0)
				{
					$owner=$this->getOwner();
					$render=$owner instanceof CController ? 'renderPartial' : 'render';
					foreach($data as $i=>$item)
					{	
						if( ($i+ ($columns - $y)) % $columns == 0)
						{
							$data=$this->viewData;
							$data['index']=$i;
							$data['data']=$item;
							$data['widget']=$this;
							$owner->$render($this->itemView,$data);
						}
					}
				}
				else
					$this->renderEmptyText();
				echo CHtml::closeTag('div');
				$y++;
			}	
	}
 
}

Использование:

Скопируйте файл ColumnListView.php в папку protected/components.

В том месте где нужно вывести список должен выполнится примерно такой код:

 
<?php $this->widget('application.components.ColumnListView', array(
		'dataProvider'=>$dataProvider,
		'itemView'=>'_view',
		'columns'=>array("one","two","three","four"),
	)); ?>

Все наши элементы будут выведены в четырех колонках.
Обратите внимание, добавился новый параметр columns — массив, каждый элемент которого это див с одноименным классом. Правильное отображение этих дивов вам нужно обеспечить самостоятельно.

ColumnListView.php