Column.php 3.68 KB
Newer Older
Qiang Xue committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
<?php
/**
 * @link http://www.yiiframework.com/
 * @copyright Copyright (c) 2008 Yii Software LLC
 * @license http://www.yiiframework.com/license/
 */

namespace yii\widgets\grid;

use Closure;
use yii\base\Object;
use yii\helpers\Html;
use yii\widgets\GridView;

/**
 *
 * @author Qiang Xue <qiang.xue@gmail.com>
 * @since 2.0
 */
class Column extends Object
{
	/**
	 * @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 GridView the grid view object that owns this column.
	 */
	public $grid;
	/**
	 * @var string the header cell content. Note that it will not be HTML-encoded.
	 */
	public $header;
	/**
	 * @var string the footer cell content. Note that it will not be HTML-encoded.
	 */
	public $footer;
	/**
	 * @var callable
	 */
	public $content;
	/**
	 * @var boolean whether this column is visible. Defaults to true.
	 */
	public $visible = true;
	public $options = array();
	public $headerOptions = array();
	/**
	 * @var array|\Closure
	 */
	public $bodyOptions = array();
	public $footerOptions = array();
	/**
	 * @var array the HTML attributes for the filter cell tag.
	 */
	public $filterOptions=array();


	/**
	 * Renders the header cell.
	 */
	public function renderHeaderCell()
	{
		return Html::tag('th', $this->renderHeaderCellContent(), $this->headerOptions);
	}

	/**
	 * Renders the footer cell.
	 */
	public function renderFooterCell()
	{
		return Html::tag('td', $this->renderFooterCellContent(), $this->footerOptions);
	}

	/**
	 * Renders a data cell.
	 * @param mixed $item the data item
	 * @param integer $index the zero-based index of the data item among the item array returned by [[dataProvider]].
	 * @return string the rendering result
	 */
	public function renderDataCell($item, $index)
	{
		if ($this->bodyOptions instanceof Closure) {
			$options = call_user_func($this->bodyOptions, $item, $index, $this);
		} else {
			$options = $this->bodyOptions;
		}
		return Html::tag('td', $this->renderDataCellContent($item, $index), $options);
	}

	/**
	 * Renders the filter cell.
	 */
	public function renderFilterCell()
	{
		return Html::tag('td', $this->renderFilterCellContent(), $this->filterOptions);
	}

	/**
	 * 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.
	 * @return string the rendering result
	 */
	protected function renderHeaderCellContent()
	{
		return trim($this->header) !== '' ? $this->header : $this->grid->emptyCell;
	}

	/**
	 * 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.
	 * @return string the rendering result
	 */
	protected function renderFooterCellContent()
	{
		return trim($this->footer) !== '' ? $this->footer : $this->grid->emptyCell;
	}

	/**
	 * Renders the data cell content.
	 * @param mixed $item the data item
	 * @param integer $index the zero-based index of the data item among the item array returned by [[dataProvider]].
	 * @return string the rendering result
	 */
	protected function renderDataCellContent($item, $index)
	{
		if ($this->content !== null) {
			return call_user_func($this->content, $item, $index, $this);
		} else {
			return $this->grid->emptyCell;
		}
	}

	/**
	 * 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).
	 * @return string the rendering result
	 */
	protected function renderFilterCellContent()
	{
		return $this->grid->emptyCell;
	}
}