*/ class Mage_Adminhtml_Block_Widget_Grid extends Mage_Adminhtml_Block_Widget { /** * Columns array * * array( * 'header' => string, * 'width' => int, * 'sortable' => bool, * 'index' => string, * //'renderer' => Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Interface, * 'format' => string * 'total' => string (sum, avg) * ) * @var array */ protected $_columns = array(); protected $_lastColumnId; /** * Collection object * * @var Varien_Data_Collection */ protected $_collection = null; /** * Page and sorting var names * * @var string */ protected $_varNameLimit = 'limit'; protected $_varNamePage = 'page'; protected $_varNameSort = 'sort'; protected $_varNameDir = 'dir'; protected $_varNameFilter = 'filter'; protected $_defaultLimit = 20; protected $_defaultPage = 1; protected $_defaultSort = false; protected $_defaultDir = 'desc'; protected $_defaultFilter = array(); /** * Export flag * * @var bool */ protected $_isExport = false; /** * Empty grid text * * @var sting|null */ protected $_emptyText; /** * Empty grid text CSS class * * @var sting|null */ protected $_emptyTextCss = 'a-center'; /** * Pager visibility * * @var boolean */ protected $_pagerVisibility = true; /** * Column headers visibility * * @var boolean */ protected $_headersVisibility = true; /** * Filter visibility * * @var boolean */ protected $_filterVisibility = true; /** * Massage block visibility * * @var boolean */ protected $_messageBlockVisibility = false; protected $_saveParametersInSession = false; /** * Count totals * * @var boolean */ protected $_countTotals = false; /** * Count subtotals * * @var boolean */ protected $_countSubTotals = false; /** * Totals * * @var Varien_Object */ protected $_varTotals; /** * SubTotals * * @var array */ protected $_subtotals = array(); /** * Grid export types * * @var array */ protected $_exportTypes = array(); /** * Rows per page for import * * @var int */ protected $_exportPageSize = 1000; /** * Massaction row id field * * @var string */ protected $_massactionIdField = null; /** * Massaction row id filter * * @var string */ protected $_massactionIdFilter = null; /** * Massaction block name * * @var string */ protected $_massactionBlockName = 'adminhtml/widget_grid_massaction'; /** * RSS list * * @var array */ protected $_rssLists = array(); /** * Columns view order * * @var array */ protected $_columnsOrder = array(); /** * Columns to group by * * @var array */ protected $_groupedColumn = array(); /** * Label for empty cell * * @var string */ protected $_emptyCellLabel = ''; public function __construct($attributes=array()) { parent::__construct($attributes); $this->setTemplate('widget/grid.phtml'); $this->setRowClickCallback('openGridRow'); $this->_emptyText = Mage::helper('adminhtml')->__('No records found.'); } protected function _prepareLayout() { $this->setChild('export_button', $this->getLayout()->createBlock('adminhtml/widget_button') ->setData(array( 'label' => Mage::helper('adminhtml')->__('Export'), 'onclick' => $this->getJsObjectName().'.doExport()', 'class' => 'task' )) ); $this->setChild('reset_filter_button', $this->getLayout()->createBlock('adminhtml/widget_button') ->setData(array( 'label' => Mage::helper('adminhtml')->__('Reset Filter'), 'onclick' => $this->getJsObjectName().'.resetFilter()', )) ); $this->setChild('search_button', $this->getLayout()->createBlock('adminhtml/widget_button') ->setData(array( 'label' => Mage::helper('adminhtml')->__('Search'), 'onclick' => $this->getJsObjectName().'.doFilter()', 'class' => 'task' )) ); return parent::_prepareLayout(); } public function getExportButtonHtml() { return $this->getChildHtml('export_button'); } public function getResetFilterButtonHtml() { return $this->getChildHtml('reset_filter_button'); } public function getSearchButtonHtml() { return $this->getChildHtml('search_button'); } public function getMainButtonsHtml() { $html = ''; if($this->getFilterVisibility()){ $html.= $this->getResetFilterButtonHtml(); $html.= $this->getSearchButtonHtml(); } return $html; } /** * set collection object * * @param Varien_Data_Collection $collection */ //public function setCollection(Varien_Data_Collection $collection) public function setCollection($collection) { $this->_collection = $collection; } /** * get collection object * * @return Varien_Data_Collection */ public function getCollection() { return $this->_collection; } /** * Add column to grid * * @param string $columnId * @param array || Varien_Object $column * @return Mage_Adminhtml_Block_Widget_Grid */ public function addColumn($columnId, $column) { if (is_array($column)) { $this->_columns[$columnId] = $this->getLayout()->createBlock('adminhtml/widget_grid_column') ->setData($column) ->setGrid($this); } /*elseif ($column instanceof Varien_Object) { $this->_columns[$columnId] = $column; }*/ else { throw new Exception(Mage::helper('adminhtml')->__('Wrong column format.')); } $this->_columns[$columnId]->setId($columnId); $this->_lastColumnId = $columnId; return $this; } /** * Remove existing column * * @param string $columnId * @return Mage_Adminhtml_Block_Widget_Grid */ public function removeColumn($columnId) { if (isset($this->_columns[$columnId])) { unset($this->_columns[$columnId]); if ($this->_lastColumnId == $columnId) { $this->_lastColumnId = key($this->_columns); } } return $this; } /** * Add column to grid after specified column. * * @param string $columnId * @param array|Varien_Object $column * @param string $after * @return Mage_Adminhtml_Block_Widget_Grid */ public function addColumnAfter($columnId, $column, $after) { $this->addColumn($columnId, $column); $this->addColumnsOrder($columnId, $after); return $this; } /** * Add column view order * * @param string $columnId * @param string $after * @return Mage_Adminhtml_Block_Widget_Grid */ public function addColumnsOrder($columnId, $after) { $this->_columnsOrder[$columnId] = $after; return $this; } /** * Retrieve columns order * * @return array */ public function getColumnsOrder() { return $this->_columnsOrder; } /** * Sort columns by predefined order * * @return Mage_Adminhtml_Block_Widget_Grid */ public function sortColumnsByOrder() { $keys = array_keys($this->_columns); $values = array_values($this->_columns); foreach ($this->getColumnsOrder() as $columnId => $after) { if (array_search($after, $keys) !== false) { // Moving grid column $positionCurrent = array_search($columnId, $keys); $key = array_splice($keys, $positionCurrent, 1); $value = array_splice($values, $positionCurrent, 1); $positionTarget = array_search($after, $keys) + 1; array_splice($keys, $positionTarget, 0, $key); array_splice($values, $positionTarget, 0, $value); $this->_columns = array_combine($keys, $values); } } end($this->_columns); $this->_lastColumnId = key($this->_columns); return $this; } public function getLastColumnId() { return $this->_lastColumnId; } public function getColumnCount() { return count($this->getColumns()); } /** * Retrieve grid column by column id * * @param string $columnId * @return Varien_Object || false */ public function getColumn($columnId) { if (!empty($this->_columns[$columnId])) { return $this->_columns[$columnId]; } return false; } /** * Retrieve all grid columns * * @return array */ public function getColumns() { return $this->_columns; } protected function _setFilterValues($data) { foreach ($this->getColumns() as $columnId => $column) { if (isset($data[$columnId]) && (!empty($data[$columnId]) || strlen($data[$columnId]) > 0) && $column->getFilter() ) { $column->getFilter()->setValue($data[$columnId]); $this->_addColumnFilterToCollection($column); } } return $this; } protected function _addColumnFilterToCollection($column) { if ($this->getCollection()) { $field = ( $column->getFilterIndex() ) ? $column->getFilterIndex() : $column->getIndex(); if ($column->getFilterConditionCallback()) { call_user_func($column->getFilterConditionCallback(), $this->getCollection(), $column); } else { $cond = $column->getFilter()->getCondition(); if ($field && isset($cond)) { $this->getCollection()->addFieldToFilter($field , $cond); } } } return $this; } /** * Sets sorting order by some column * * @param Mage_Adminhtml_Block_Widget_Grid_Column $column * @return Mage_Adminhtml_Block_Widget_Grid */ protected function _setCollectionOrder($column) { $collection = $this->getCollection(); if ($collection) { $columnIndex = $column->getFilterIndex() ? $column->getFilterIndex() : $column->getIndex(); $collection->setOrder($columnIndex, strtoupper($column->getDir())); } return $this; } /** * Prepare grid collection object * * @return Mage_Adminhtml_Block_Widget_Grid */ protected function _prepareCollection() { if ($this->getCollection()) { $this->_preparePage(); $columnId = $this->getParam($this->getVarNameSort(), $this->_defaultSort); $dir = $this->getParam($this->getVarNameDir(), $this->_defaultDir); $filter = $this->getParam($this->getVarNameFilter(), null); if (is_null($filter)) { $filter = $this->_defaultFilter; } if (is_string($filter)) { $data = $this->helper('adminhtml')->prepareFilterString($filter); $this->_setFilterValues($data); } else if ($filter && is_array($filter)) { $this->_setFilterValues($filter); } else if(0 !== sizeof($this->_defaultFilter)) { $this->_setFilterValues($this->_defaultFilter); } if (isset($this->_columns[$columnId]) && $this->_columns[$columnId]->getIndex()) { $dir = (strtolower($dir)=='desc') ? 'desc' : 'asc'; $this->_columns[$columnId]->setDir($dir); $this->_setCollectionOrder($this->_columns[$columnId]); } if (!$this->_isExport) { $this->getCollection()->load(); $this->_afterLoadCollection(); } } return $this; } /** * Decode URL encoded filter value recursive callback method * * @var string $value */ protected function _decodeFilter(&$value) { $value = $this->helper('adminhtml')->decodeFilter($value); } protected function _preparePage() { $this->getCollection()->setPageSize((int) $this->getParam($this->getVarNameLimit(), $this->_defaultLimit)); $this->getCollection()->setCurPage((int) $this->getParam($this->getVarNamePage(), $this->_defaultPage)); } protected function _prepareColumns() { $this->sortColumnsByOrder(); return $this; } /** * Prepare grid massaction block * * @return Mage_Adminhtml_Block_Widget_Grid */ protected function _prepareMassactionBlock() { $this->setChild('massaction', $this->getLayout()->createBlock($this->getMassactionBlockName())); $this->_prepareMassaction(); if($this->getMassactionBlock()->isAvailable()) { $this->_prepareMassactionColumn(); } return $this; } /** * Prepare grid massaction actions * * @return Mage_Adminhtml_Block_Widget_Grid */ protected function _prepareMassaction() { return $this; } /** * Prepare grid massaction column * * @return unknown */ protected function _prepareMassactionColumn() { $columnId = 'massaction'; $massactionColumn = $this->getLayout()->createBlock('adminhtml/widget_grid_column') ->setData(array( 'index' => $this->getMassactionIdField(), 'filter_index' => $this->getMassactionIdFilter(), 'type' => 'massaction', 'name' => $this->getMassactionBlock()->getFormFieldName(), 'align' => 'center', 'is_system' => true )); if ($this->getNoFilterMassactionColumn()) { $massactionColumn->setData('filter', false); } $massactionColumn->setSelected($this->getMassactionBlock()->getSelected()) ->setGrid($this) ->setId($columnId); $oldColumns = $this->_columns; $this->_columns = array(); $this->_columns[$columnId] = $massactionColumn; $this->_columns = array_merge($this->_columns, $oldColumns); return $this; } protected function _prepareGrid() { $this->_prepareColumns(); $this->_prepareMassactionBlock(); $this->_prepareCollection(); return $this; } protected function _beforeToHtml() { $this->_prepareGrid(); return parent::_beforeToHtml(); } protected function _afterLoadCollection() { return $this; } public function getVarNameLimit() { return $this->_varNameLimit; } public function getVarNamePage() { return $this->_varNamePage; } public function getVarNameSort() { return $this->_varNameSort; } public function getVarNameDir() { return $this->_varNameDir; } public function getVarNameFilter() { return $this->_varNameFilter; } public function setVarNameLimit($name) { return $this->_varNameLimit = $name; } public function setVarNamePage($name) { return $this->_varNamePage = $name; } public function setVarNameSort($name) { return $this->_varNameSort = $name; } public function setVarNameDir($name) { return $this->_varNameDir = $name; } public function setVarNameFilter($name) { return $this->_varNameFilter = $name; } /** * Set visibility of column headers * * @param boolean $visible */ public function setHeadersVisibility($visible=true) { $this->_headersVisibility = $visible; } /** * Return visibility of column headers * * @return boolean */ public function getHeadersVisibility() { return $this->_headersVisibility; } /** * Set visibility of pager * * @param boolean $visible */ public function setPagerVisibility($visible=true) { $this->_pagerVisibility = $visible; } /** * Return visibility of pager * * @return boolean */ public function getPagerVisibility() { return $this->_pagerVisibility; } /** * Set visibility of filter * * @param boolean $visible */ public function setFilterVisibility($visible=true) { $this->_filterVisibility = $visible; } /** * Return visibility of filter * * @return boolean */ public function getFilterVisibility() { return $this->_filterVisibility; } /** * Set visibility of filter * * @param boolean $visible */ public function setMessageBlockVisibility($visible=true) { $this->_messageBlockVisibility = $visible; } /** * Return visibility of filter * * @return boolean */ public function getMessageBlockVisibility() { return $this->_messageBlockVisibility; } public function setDefaultLimit($limit) { $this->_defaultLimit = $limit; return $this; } public function setDefaultPage($page) { $this->_defaultPage = $page; return $this; } public function setDefaultSort($sort) { $this->_defaultSort = $sort; return $this; } public function setDefaultDir($dir) { $this->_defaultDir = $dir; return $this; } public function setDefaultFilter($filter) { $this->_defaultFilter = $filter; return $this; } /** * Retrieve grid export types * * @return array|false */ public function getExportTypes() { return empty($this->_exportTypes) ? false : $this->_exportTypes; } /** * Add new export type to grid * * @param string $url * @param string $label * @return Mage_Adminhtml_Block_Widget_Grid */ public function addExportType($url, $label) { $this->_exportTypes[] = new Varien_Object( array( 'url' => $this->getUrl($url, array('_current'=>true)), 'label' => $label ) ); return $this; } /** * Retrieve rss lists types * * @return array */ public function getRssLists() { return empty($this->_rssLists) ? false : $this->_rssLists; } /** * Returns url for RSS * Can be overloaded in descendant classes to perform custom changes to url passed to addRssList() * * @param string $url * @return string */ protected function _getRssUrl($url) { $urlModel = Mage::getModel('core/url'); if (Mage::app()->getStore()->getStoreInUrl()) { // Url in 'admin' store view won't be accessible, so form it in default store view frontend $urlModel->setStore(Mage::app()->getDefaultStoreView()); } return $urlModel->getUrl($url); } /** * Add new rss list to grid * * @param string $url * @param string $label * @return Mage_Adminhtml_Block_Widget_Grid */ public function addRssList($url, $label) { $this->_rssLists[] = new Varien_Object( array( 'url' => $this->_getRssUrl($url), 'label' => $label ) ); return $this; } /** * Retrieve grid HTML * * @return string */ public function getHtml() { return $this->toHtml(); } /** * Retrieve file content from file container array * * @param array $fileData * @return string */ protected function _getFileContainerContent(array $fileData) { $io = new Varien_Io_File(); $path = $io->dirname($fileData['value']); $io->open(array('path' => $path)); return $io->read($fileData['value']); } /** * Retrieve Headers row array for Export * * @return array */ protected function _getExportHeaders() { $row = array(); foreach ($this->_columns as $column) { if (!$column->getIsSystem()) { $row[] = $column->getExportHeader(); } } return $row; } /** * Retrieve Totals row array for Export * * @return array */ protected function _getExportTotals() { $totals = $this->getTotals(); $row = array(); foreach ($this->_columns as $column) { if (!$column->getIsSystem()) { $row[] = ($column->hasTotalsLabel()) ? $column->getTotalsLabel() : $column->getRowFieldExport($totals); } } return $row; } /** * Iterate collection and call callback method per item * For callback method first argument always is item object * * @param string $callback * @param array $args additional arguments for callback method * @return Mage_Adminhtml_Block_Widget_Grid */ public function _exportIterateCollection($callback, array $args) { $originalCollection = $this->getCollection(); $count = null; $page = 1; $lPage = null; $break = false; while ($break !== true) { $collection = clone $originalCollection; $collection->setPageSize($this->_exportPageSize); $collection->setCurPage($page); $collection->load(); if (is_null($count)) { $count = $collection->getSize(); $lPage = $collection->getLastPageNumber(); } if ($lPage == $page) { $break = true; } $page ++; foreach ($collection as $item) { call_user_func_array(array($this, $callback), array_merge(array($item), $args)); } } } /** * Write item data to csv export file * * @param Varien_Object $item * @param Varien_Io_File $adapter */ protected function _exportCsvItem(Varien_Object $item, Varien_Io_File $adapter) { $row = array(); foreach ($this->_columns as $column) { if (!$column->getIsSystem()) { $row[] = $column->getRowFieldExport($item); } } $adapter->streamWriteCsv( Mage::helper("core")->getEscapedCSVData($row) ); } /** * Retrieve a file container array by grid data as CSV * * Return array with keys type and value * * @return array */ public function getCsvFile() { $this->_isExport = true; $this->_prepareGrid(); $io = new Varien_Io_File(); $path = Mage::getBaseDir('var') . DS . 'export' . DS; $name = md5(microtime()); $file = $path . DS . $name . '.csv'; $io->setAllowCreateFolders(true); $io->open(array('path' => $path)); $io->streamOpen($file, 'w+'); $io->streamLock(true); $io->streamWriteCsv($this->_getExportHeaders()); $this->_exportIterateCollection('_exportCsvItem', array($io)); if ($this->getCountTotals()) { $io->streamWriteCsv( Mage::helper("core")->getEscapedCSVData($this->_getExportTotals()) ); } $io->streamUnlock(); $io->streamClose(); return array( 'type' => 'filename', 'value' => $file, 'rm' => true // can delete file after use ); } /** * Retrieve Grid data as CSV * * @return string */ public function getCsv() { $csv = ''; $this->_isExport = true; $this->_prepareGrid(); $this->getCollection()->getSelect()->limit(); $this->getCollection()->setPageSize(0); $this->getCollection()->load(); $this->_afterLoadCollection(); $data = array(); foreach ($this->_columns as $column) { if (!$column->getIsSystem()) { $data[] = '"'.$column->getExportHeader().'"'; } } $csv.= implode(',', $data)."\n"; foreach ($this->getCollection() as $item) { $data = array(); foreach ($this->_columns as $column) { if (!$column->getIsSystem()) { $data[] = '"' . str_replace(array('"', '\\'), array('""', '\\\\'), $column->getRowFieldExport($item)) . '"'; } } $csv.= implode(',', $data)."\n"; } if ($this->getCountTotals()) { $data = array(); foreach ($this->_columns as $column) { if (!$column->getIsSystem()) { $data[] = '"' . str_replace(array('"', '\\'), array('""', '\\\\'), $column->getRowFieldExport($this->getTotals())) . '"'; } } $csv.= implode(',', $data)."\n"; } return $csv; } public function getXml() { $this->_isExport = true; $this->_prepareGrid(); $this->getCollection()->getSelect()->limit(); $this->getCollection()->setPageSize(0); $this->getCollection()->load(); $this->_afterLoadCollection(); $indexes = array(); foreach ($this->_columns as $column) { if (!$column->getIsSystem()) { $indexes[] = $column->getIndex(); } } $xml = ''; $xml.= ''; foreach ($this->getCollection() as $item) { $xml.= $item->toXml($indexes); } if ($this->getCountTotals()) { $xml.= $this->getTotals()->toXml($indexes); } $xml.= ''; return $xml; } /** * Write item data to Excel 2003 XML export file * * @param Varien_Object $item * @param Varien_Io_File $adapter * @param Varien_Convert_Parser_Xml_Excel $parser */ protected function _exportExcelItem(Varien_Object $item, Varien_Io_File $adapter, $parser = null) { if (is_null($parser)) { $parser = new Varien_Convert_Parser_Xml_Excel(); } $row = array(); foreach ($this->_columns as $column) { if (!$column->getIsSystem()) { $row[] = $column->getRowFieldExport($item); } } $data = $parser->getRowXml($row); $adapter->streamWrite($data); } /** * Retrieve a file container array by grid data as MS Excel 2003 XML Document * * Return array with keys type and value * * @return string */ public function getExcelFile($sheetName = '') { $this->_isExport = true; $this->_prepareGrid(); $parser = new Varien_Convert_Parser_Xml_Excel(); $io = new Varien_Io_File(); $path = Mage::getBaseDir('var') . DS . 'export' . DS; $name = md5(microtime()); $file = $path . DS . $name . '.xml'; $io->setAllowCreateFolders(true); $io->open(array('path' => $path)); $io->streamOpen($file, 'w+'); $io->streamLock(true); $io->streamWrite($parser->getHeaderXml($sheetName)); $io->streamWrite($parser->getRowXml($this->_getExportHeaders())); $this->_exportIterateCollection('_exportExcelItem', array($io, $parser)); if ($this->getCountTotals()) { $io->streamWrite($parser->getRowXml($this->_getExportTotals())); } $io->streamWrite($parser->getFooterXml()); $io->streamUnlock(); $io->streamClose(); return array( 'type' => 'filename', 'value' => $file, 'rm' => true // can delete file after use ); } /** * Retrieve grid data as MS Excel 2003 XML Document * * @param string $filename the Workbook sheet name * @return string */ public function getExcel($filename = '') { $this->_isExport = true; $this->_prepareGrid(); $this->getCollection()->getSelect()->limit(); $this->getCollection()->setPageSize(0); $this->getCollection()->load(); $this->_afterLoadCollection(); $headers = array(); $data = array(); foreach ($this->_columns as $column) { if (!$column->getIsSystem()) { $headers[] = $column->getHeader(); } } $data[] = $headers; foreach ($this->getCollection() as $item) { $row = array(); foreach ($this->_columns as $column) { if (!$column->getIsSystem()) { $row[] = $column->getRowField($item); } } $data[] = $row; } if ($this->getCountTotals()) { $row = array(); foreach ($this->_columns as $column) { if (!$column->getIsSystem()) { $row[] = $column->getRowField($this->getTotals()); } } $data[] = $row; } $xmlObj = new Varien_Convert_Parser_Xml_Excel(); $xmlObj->setVar('single_sheet', $filename); $xmlObj->setData($data); $xmlObj->unparse(); return $xmlObj->getData(); } public function canDisplayContainer() { if ($this->getRequest()->getQuery('ajax')) { return false; } return true; } /** * Grid url getter * * @deprecated after 1.3.2.3 Use getAbsoluteGridUrl() method instead * * @return string current grid url */ public function getGridUrl() { return $this->getCurrentUrl(); } /** * Grid url getter * Version of getGridUrl() but with parameters * * @param array $params url parameters * @return string current grid url */ public function getAbsoluteGridUrl($params = array()) { return $this->getCurrentUrl($params); } /** * Retrieve grid * * @param string $paramName * @param mixed $default * @return mixed */ public function getParam($paramName, $default=null) { $session = Mage::getSingleton('adminhtml/session'); $sessionParamName = $this->getId().$paramName; if ($this->getRequest()->has($paramName)) { $param = $this->getRequest()->getParam($paramName); if ($this->_saveParametersInSession) { $session->setData($sessionParamName, $param); } return $param; } elseif ($this->_saveParametersInSession && ($param = $session->getData($sessionParamName))) { return $param; } return $default; } public function setSaveParametersInSession($flag) { $this->_saveParametersInSession = $flag; return $this; } public function getJsObjectName() { return $this->getId().'JsObject'; } /** * Deprecated since 1.1.7 * * @return string */ public function getRowId($row) { return $this->getRowUrl($row); } /** * Retrieve massaction row identifier field * * @return string */ public function getMassactionIdField() { return $this->_massactionIdField; } /** * Set massaction row identifier field * * @param string $idField * @return Mage_Adminhtml_Block_Widget_Grid */ public function setMassactionIdField($idField) { $this->_massactionIdField = $idField; return $this; } /** * Retrieve massaction row identifier filter * * @return string */ public function getMassactionIdFilter() { return $this->_massactionIdFilter; } /** * Set massaction row identifier filter * * @param string $idFilter * @return Mage_Adminhtml_Block_Widget_Grid */ public function setMassactionIdFilter($idFilter) { $this->_massactionIdFilter = $idFilter; return $this; } /** * Retrive massaction block name * * @return string */ public function getMassactionBlockName() { return $this->_massactionBlockName; } /** * Set massaction block name * * @param string $blockName * @return Mage_Adminhtml_Block_Widget_Grid */ public function setMassactionBlockName($blockName) { $this->_massactionBlockName = $blockName; return $this; } /** * Retrive massaction block * * @return Mage_Adminhtml_Block_Widget_Grid_Massaction_Abstract */ public function getMassactionBlock() { return $this->getChild('massaction'); } public function getMassactionBlockHtml() { return $this->getChildHtml('massaction'); } /** * Set empty text for grid * * @param string $text * @return Mage_Adminhtml_Block_Widget_Grid */ public function setEmptyText($text) { $this->_emptyText = $text; return $this; } /** * Return empty text for grid * * @return string */ public function getEmptyText() { return $this->_emptyText; } /** * Set empty text CSS class * * @param string $cssClass * @return Mage_Adminhtml_Block_Widget_Grid */ public function setEmptyTextClass($cssClass) { $this->_emptyTextCss = $cssClass; return $this; } /** * Return empty text CSS class * * @return string */ public function getEmptyTextClass() { return $this->_emptyTextCss; } /** * Set count totals * * @param boolean $visible */ public function setCountTotals($count=true) { $this->_countTotals = $count; } /** * Return count totals * * @return boolean */ public function getCountTotals() { return $this->_countTotals; } /** * Set totals * * @param boolean $visible */ public function setTotals(Varien_Object $totals) { $this->_varTotals = $totals; } /** * Retrieve totals * * @return Varien_Object */ public function getTotals() { return $this->_varTotals; } /** * Set subtotals * * @param boolean $flag * @return Mage_Adminhtml_Block_Widget_Grid */ public function setCountSubTotals($flag = true) { $this->_countSubTotals = $flag; return $this; } /** * Return count subtotals * * @return boolean */ public function getCountSubTotals() { return $this->_countSubTotals; } /** * Set subtotal items * * @param array $items * @return Mage_Adminhtml_Block_Widget_Grid */ public function setSubTotals(array $items) { $this->_subtotals = $items; return $this; } /** * Retrieve subtotal item * * @param Varien_Object $item * @return Varien_Object */ public function getSubTotalItem($item) { foreach ($this->_subtotals as $subtotalItem) { foreach ($this->_groupedColumn as $groupedColumn) { if ($subtotalItem->getData($groupedColumn) == $item->getData($groupedColumn)) { return $subtotalItem; } } } return ''; } /** * Retrieve subtotal items * * @return array */ public function getSubTotals() { return $this->_subtotals; } /** * Check whether subtotal should be rendered * * @param Varien_Object $item * @return boolean */ public function shouldRenderSubTotal($item) { return ($this->_countSubTotals && count($this->_subtotals) > 0 && count($this->getMultipleRows($item)) > 0); } /** * Retrieve columns to render * * @return unknown */ public function getSubTotalColumns() { return $this->getColumns(); } /** * Retrieve rowspan number * * @param Varien_Object $item * @param Mage_Adminhtml_Block_Widget_Grid_Column $column * @return integer|boolean */ public function getRowspan($item, $column) { if ($this->isColumnGrouped($column)) { return count($this->getMultipleRows($item)) + count($this->_groupedColumn); } return false; } /** * Enter description here... * * @param string|object $column * @param string $value * @return boolean|Mage_Adminhtml_Block_Widget_Grid */ public function isColumnGrouped($column, $value = null) { if (null === $value) { if (is_object($column)) { return in_array($column->getIndex(), $this->_groupedColumn); } return in_array($column, $this->_groupedColumn); } $this->_groupedColumn[] = $column; return $this; } /** * Get children of specified item * * @param Varien_Object $item * @return array */ public function getMultipleRows($item) { return $item->getChildren(); } /** * Retrieve columns for multiple rows * * @param Varien_Object $item * @return array */ public function getMultipleRowColumns() { $columns = $this->getColumns(); foreach ($this->_groupedColumn as $column) { unset($columns[$column]); } return $columns; } /** * Check whether should render cell * * @param Varien_Object $item * @param Mage_Adminhtml_Block_Widget_Grid_Column $column * @return boolean */ public function shouldRenderCell($item, $column) { if ($this->isColumnGrouped($column) && $item->getIsEmpty()) { return true; } if (!$item->getIsEmpty()) { return true; } return false; } /** * Check whether should render empty cell * * @param Varien_Object $item * @param Mage_Adminhtml_Block_Widget_Grid_Column $column * @return boolean */ public function shouldRenderEmptyCell($item, $column) { return ($item->getIsEmpty() && in_array($column['index'], $this->_groupedColumn)); } /** * Retrieve colspan for empty cell * * @param Varien_Object $item * @return integer */ public function getEmptyCellColspan() { return $this->getColumnCount() - count($this->_groupedColumn); } /** * Retrieve label for empty cell * * @return string */ public function getEmptyCellLabel() { return $this->_emptyCellLabel; } /** * Set label for empty cell * * @param string $label * @return Mage_Adminhtml_Block_Widget_Grid */ public function setEmptyCellLabel($label) { $this->_emptyCellLabel = $label; return $this; } /** * Return row url for js event handlers * * @param Mage_Catalog_Model_Product|Varien_Object * @return string */ public function getRowUrl($item) { $res = parent::getRowUrl($item); return ($res ? $res : '#'); } }