* @link http://www.pradosoft.com/ * @copyright Copyright © 2005 PradoSoft * @license http://www.pradosoft.com/license/ * @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls */ /** * TDataGridColumn class file */ Prado::using('System.Web.UI.WebControls.TDataGridColumn'); /** * TTemplateColumn class * * TTemplateColumn customizes the layout of controls in the column with templates. * In particular, you can specify ItemTemplate, EditItemTemplate * HeaderTemplate and FooterTemplate to customize specific * type of cells in the column. * * @author Qiang Xue * @version $Revision: $ $Date: $ * @package System.Web.UI.WebControls * @since 3.0 */ class TTemplateColumn extends TDataGridColumn { /** * Number of seconds that a cached template will expire after */ const CACHE_EXPIRY=18000; /** * Various item templates * @var string */ private $_itemTemplate=''; private $_editItemTemplate=''; private $_headerTemplate=''; private $_footerTemplate=''; private static $_templates=array(); /** * @return string the edit item template string */ public function getEditItemTemplate() { return $this->_editItemTemplate; } /** * Sets the edit item template string * @param string the edit item template */ public function setEditItemTemplate($value) { $this->_editItemTemplate=$value; } /** * @return string the template string for the item */ public function getItemTemplate() { return $this->_itemTemplate; } /** * Sets the template string for the item * @param string the item template */ public function setItemTemplate($value) { $this->_itemTemplate=$value; } /** * @return string the header template string */ public function getHeaderTemplate() { return $this->_headerTemplate; } /** * Sets the header template. * The template will be parsed immediately. * @param string the header template */ public function setHeaderTemplate($value) { $this->_headerTemplate=$value; } /** * @return string the footer template string */ public function getFooterTemplate() { return $this->_footerTemplate; } /** * Sets the footer template. * The template will be parsed immediately. * @param string the footer template */ public function setFooterTemplate($value) { $this->_footerTemplate=$value; } /** * Initializes the specified cell to its initial values. * This method overrides the parent implementation. * It initializes the cell based on different templates * (ItemTemplate, EditItemTemplate, HeaderTemplate, FooterTemplate). * @param TTableCell the cell to be initialized. * @param integer the index to the Columns property that the cell resides in. * @param string the type of cell (Header,Footer,Item,AlternatingItem,EditItem,SelectedItem) */ public function initializeCell($cell,$columnIndex,$itemType) { parent::initializeCell($cell,$columnIndex,$itemType); $tplContent=''; switch($itemType) { case 'Header': $tplContent=$this->_headerTemplate; break; case 'Footer': $tplContent=$this->_footerTemplate; break; case 'Item': case 'AlternatingItem': case 'SelectedItem': $tplContent=$this->_itemTemplate; break; case 'EditItem': $tplContent=$this->_editItemTemplate===''?$this->_itemTemplate:$this->_editItemTemplate; break; } if($tplContent!=='') { $cell->setText(''); $cell->getControls()->clear(); $this->createTemplate($tplContent)->instantiateIn($cell); } } /** * Parses item template. * This method uses caching technique to accelerate template parsing. * @param string template string * @return ITemplate parsed template object */ protected function createTemplate($str) { $key=md5($str); if(isset(self::$_templates[$key])) return self::$_templates[$key]; else { $contextPath=$this->getOwner()->getTemplateControl()->getTemplate()->getContextPath(); if(($cache=$this->getApplication()->getCache())!==null) { if(($template=$cache->get($key))===null) { $template=new TTemplate($str,$contextPath); $cache->set($key,$template,self::CACHE_EXPIRY); } } else $template=new TTemplate($str,$contextPath); self::$_templates[$key]=$template; return $template; } } } ?>