207 lines
5.6 KiB
PHP
207 lines
5.6 KiB
PHP
<?php
|
|
/**
|
|
* CGridColumn class file.
|
|
*
|
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
|
* @link http://www.yiiframework.com/
|
|
* @copyright 2008-2013 Yii Software LLC
|
|
* @license http://www.yiiframework.com/license/
|
|
*/
|
|
|
|
/**
|
|
* CGridColumn is the base class for all grid view column classes.
|
|
*
|
|
* A CGridColumn object represents the specification for rendering the cells in
|
|
* a particular grid view column.
|
|
*
|
|
* In a column, there is one header cell, multiple data cells, and an optional footer cell.
|
|
* Child classes may override {@link renderHeaderCellContent}, {@link renderDataCellContent}
|
|
* and {@link renderFooterCellContent} to customize how these cells are rendered.
|
|
*
|
|
* @property boolean $hasFooter Whether this column has a footer cell.
|
|
* This is determined based on whether {@link footer} is set.
|
|
*
|
|
* @author Qiang Xue <qiang.xue@gmail.com>
|
|
* @package zii.widgets.grid
|
|
* @since 1.1
|
|
*/
|
|
abstract class CGridColumn extends CComponent
|
|
{
|
|
/**
|
|
* @var string the ID of this column. This value should be unique among all grid view columns.
|
|
* If this is not set, it will be assigned one automatically.
|
|
*/
|
|
public $id;
|
|
/**
|
|
* @var CGridView the grid view object that owns this column.
|
|
*/
|
|
public $grid;
|
|
/**
|
|
* @var string the header cell text. Note that it will not be HTML-encoded.
|
|
*/
|
|
public $header;
|
|
/**
|
|
* @var string the footer cell text. Note that it will not be HTML-encoded.
|
|
*/
|
|
public $footer;
|
|
/**
|
|
* @var boolean whether this column is visible. Defaults to true.
|
|
*/
|
|
public $visible=true;
|
|
/**
|
|
* @var string a PHP expression that is evaluated for every data cell and whose result
|
|
* is used as the CSS class name for the data cell. In this expression, you can use the following variables:
|
|
* <ul>
|
|
* <li><code>$row</code> the row number (zero-based)</li>
|
|
* <li><code>$data</code> the data model for the row</li>
|
|
* <li><code>$this</code> the column object</li>
|
|
* </ul>
|
|
* The PHP expression will be evaluated using {@link evaluateExpression}.
|
|
*
|
|
* A PHP expression can be any PHP code that has a value. To learn more about what an expression is,
|
|
* please refer to the {@link http://www.php.net/manual/en/language.expressions.php php manual}.
|
|
*/
|
|
public $cssClassExpression;
|
|
/**
|
|
* @var array the HTML options for the data cell tags.
|
|
*/
|
|
public $htmlOptions=array();
|
|
/**
|
|
* @var array the HTML options for the filter cell tag.
|
|
*/
|
|
public $filterHtmlOptions=array();
|
|
/**
|
|
* @var array the HTML options for the header cell tag.
|
|
*/
|
|
public $headerHtmlOptions=array();
|
|
/**
|
|
* @var array the HTML options for the footer cell tag.
|
|
*/
|
|
public $footerHtmlOptions=array();
|
|
|
|
/**
|
|
* Constructor.
|
|
* @param CGridView $grid the grid view that owns this column.
|
|
*/
|
|
public function __construct($grid)
|
|
{
|
|
$this->grid=$grid;
|
|
}
|
|
|
|
/**
|
|
* Initializes the column.
|
|
* This method is invoked by the grid view when it initializes itself before rendering.
|
|
* You may override this method to prepare the column for rendering.
|
|
*/
|
|
public function init()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* @return boolean whether this column has a footer cell.
|
|
* This is determined based on whether {@link footer} is set.
|
|
*/
|
|
public function getHasFooter()
|
|
{
|
|
return $this->footer!==null;
|
|
}
|
|
|
|
/**
|
|
* Renders the filter cell.
|
|
* @since 1.1.1
|
|
*/
|
|
public function renderFilterCell()
|
|
{
|
|
echo CHtml::openTag('td',$this->filterHtmlOptions);
|
|
$this->renderFilterCellContent();
|
|
echo "</td>";
|
|
}
|
|
|
|
/**
|
|
* Renders the header cell.
|
|
*/
|
|
public function renderHeaderCell()
|
|
{
|
|
$this->headerHtmlOptions['id']=$this->id;
|
|
echo CHtml::openTag('th',$this->headerHtmlOptions);
|
|
$this->renderHeaderCellContent();
|
|
echo "</th>";
|
|
}
|
|
|
|
/**
|
|
* Renders a data cell.
|
|
* @param integer $row the row number (zero-based)
|
|
*/
|
|
public function renderDataCell($row)
|
|
{
|
|
$data=$this->grid->dataProvider->data[$row];
|
|
$options=$this->htmlOptions;
|
|
if($this->cssClassExpression!==null)
|
|
{
|
|
$class=$this->evaluateExpression($this->cssClassExpression,array('row'=>$row,'data'=>$data));
|
|
if(!empty($class))
|
|
{
|
|
if(isset($options['class']))
|
|
$options['class'].=' '.$class;
|
|
else
|
|
$options['class']=$class;
|
|
}
|
|
}
|
|
echo CHtml::openTag('td',$options);
|
|
$this->renderDataCellContent($row,$data);
|
|
echo '</td>';
|
|
}
|
|
|
|
/**
|
|
* Renders the footer cell.
|
|
*/
|
|
public function renderFooterCell()
|
|
{
|
|
echo CHtml::openTag('td',$this->footerHtmlOptions);
|
|
$this->renderFooterCellContent();
|
|
echo '</td>';
|
|
}
|
|
|
|
/**
|
|
* Renders the header cell content.
|
|
* The default implementation simply renders {@link header}.
|
|
* This method may be overridden to customize the rendering of the header cell.
|
|
*/
|
|
protected function renderHeaderCellContent()
|
|
{
|
|
echo trim($this->header)!=='' ? $this->header : $this->grid->blankDisplay;
|
|
}
|
|
|
|
/**
|
|
* Renders the footer cell content.
|
|
* The default implementation simply renders {@link footer}.
|
|
* This method may be overridden to customize the rendering of the footer cell.
|
|
*/
|
|
protected function renderFooterCellContent()
|
|
{
|
|
echo trim($this->footer)!=='' ? $this->footer : $this->grid->blankDisplay;
|
|
}
|
|
|
|
/**
|
|
* Renders the data cell content.
|
|
* This method SHOULD be overridden to customize the rendering of the data cell.
|
|
* @param integer $row the row number (zero-based)
|
|
* @param mixed $data the data associated with the row
|
|
*/
|
|
protected function renderDataCellContent($row,$data)
|
|
{
|
|
echo $this->grid->blankDisplay;
|
|
}
|
|
|
|
/**
|
|
* Renders the filter cell content.
|
|
* The default implementation simply renders a space.
|
|
* This method may be overridden to customize the rendering of the filter cell (if any).
|
|
* @since 1.1.1
|
|
*/
|
|
protected function renderFilterCellContent()
|
|
{
|
|
echo $this->grid->blankDisplay;
|
|
}
|
|
}
|