Magento на русском

Новости, обмен опытом, база знаний для разработчиков.

Наворачиваем свой модуль. Вывод коллекции данных в грид.

После создания модуля, мне нужно было вывести некие данные, причем не из моей таблицы, а сборку из многих стандартных, как плоских, так и EAV.

Вообщем, чем меньше букв, тем лучше….

Вывод всех товаров из заказаных. С добавлением Shipping Date из моей таблицы.

вот функция для Collection.php:


public function getOrderCollection()
{
/*Ugly hack… this is block need replace for SQL queries;
*
*/
$attr_state_id = 98;
$attr_customer_fn_id = 185;
$attr_customer_ln_id = 187;
$attr_shipping_method_id = 125;
/*
* end of block
*/

$resource = Mage::getSingleton(’core/resource’);
$orderTable = $resource->getTableName(’sales/order’);
$eavAttributeTable = $resource->getTableName(’eav/attribute’);
$orderDateTable = $resource->getTableName(’cc_delivery’);

$collection = Mage::getResourceModel(’sales/order_item_collection’);

$collection->getSelect()
->joinLeft(array(’o’ => $orderTable), ‘o.entity_id=main_table.order_id’, ‘o.increment_id’)
->joinLeft(array(’dd’ => $orderDateTable), ‘dd.order_id=main_table.order_id’, ‘dd.*’)
->joinLeft(array(’vc1′ => $orderTable.’_varchar’), ‘vc1.entity_id=o.entity_id’, ‘vc1.value as vc1_value’)
->where(’vc1.attribute_id = ‘.$attr_state_id)
->where(’vc1.value = «processing»‘)
->joinLeft(array(’vc2′ => $orderTable.’_varchar’), ‘vc2.entity_id=o.entity_id’, ‘vc2.value as customer_firstname’)
->where(’vc2.attribute_id = ‘.$attr_customer_fn_id)
->joinLeft(array(’vc3′ => $orderTable.’_varchar’), ‘vc3.entity_id=o.entity_id’, ‘vc3.value as customer_lastname’)
->where(’vc3.attribute_id = ‘.$attr_customer_ln_id)
->joinLeft(array(’vc4′ => $orderTable.’_varchar’), ‘vc4.entity_id=o.entity_id’, ‘vc4.value as shipping_method’)
->where(’vc4.attribute_id = ‘.$attr_shipping_method_id)
->columns(’CONCAT(vc2.value,» «,vc3.value) as cname’)
->columns(’ROUND(main_table.qty_ordered) as qty’)
;
return $collection;
}

А вот код для Grid.php

class Oggetto_Vportal_Block_Adminhtml_Vportal_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
public function __construct()
{
parent::__construct();
//$this->setId(’sales_order_grid’);
$this->setId(’item_id’);
//$this->setUseAjax(true);
$this->setDefaultSort(’increment_id’);
$this->setDefaultDir(’ASC’);
$this->setSaveParametersInSession(true);
}

protected function _prepareCollection()
{
$collection = Mage::getModel(’vportal/vportal’)->getCollection()->getOrderCollection();
$this->setCollection($collection);
return parent::_prepareCollection();
}

protected function _prepareColumns()
{
$this->addColumn(’increment_id’, array(
‘header’=> Mage::helper(’sales’)->__(’Order #’),
‘width’ => ‘80px’,
‘type’  => ‘text’,
‘index’ => ‘increment_id’,
));

$this->addColumn(’cname’, array(
‘header’=> Mage::helper(’sales’)->__(’Customer name’),
‘width’ => ‘80px’,
‘type’  => ‘text’,
‘index’ => ‘cname’,
‘filter_index’ => ‘CONCAT(vc2.value,» «,vc3.value)’,
));

$this->addColumn(’name’, array(
‘header’=> Mage::helper(’sales’)->__(’Item name’),
‘width’ => ‘80px’,
‘type’  => ‘text’,
‘index’ => ‘name’,
));

$this->addColumn(’sku’, array(
‘header’=> Mage::helper(’sales’)->__(’SKU’),
‘width’ => ‘80px’,
‘type’  => ‘text’,
‘index’ => ’sku’,
));

$this->addColumn(’qty’, array(
‘header’=> Mage::helper(’sales’)->__(’Quantity’),
‘width’ => ‘20px’,
‘type’  => ‘text’,
‘index’ => ‘qty’,
‘filter_index’ => ‘ROUND(main_table.qty_ordered)’

));

$this->addColumn(’shipping_method’, array(
‘header’=> Mage::helper(’sales’)->__(’Shipping method’),
‘width’ => ‘20px’,
‘type’  => ‘text’,
‘index’ => ’shipping_method’,
#’filter’    => false,
‘filter_index’ => ‘vc4.value’
));

$this->addColumn(’delivery_date’, array(
‘header’=> Mage::helper(’sales’)->__(’Ship date’),
‘width’ => ‘20px’,
‘type’  => ‘date’,
‘format’=> Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM),
‘index’ => ‘delivery_date’,
‘filter_index’ => ‘dd.delivery_date’
));

$this->addColumn(’vc1_value’, array(
‘header’=> Mage::helper(’sales’)->__(’State’),
‘width’ => ‘20px’,
‘index’ => ‘vc1_value’,
‘type’  => ‘text’,
‘filter’ => false,
’sortable’ => false,
‘filter_index’ => ‘vc1.value’
));

$this->addExportType(’*/*/exportCsv’, Mage::helper(’vportal’)->__(’CSV’));
$this->addExportType(’*/*/exportXml’, Mage::helper(’vportal’)->__(’XML’));

return parent::_prepareColumns();
}

public function getRowUrl($row)
{
return; // $this->getUrl(’*/*/edit’, array(’id’ => $row->getId()));
}

}

Не обращайте внимания на хак, это будет в последствии исправлено!

Похожие Magento-статьи:

  1. Самый лучший аттрибут => filter_index
  2. Создание нового модуля с нуля.
  3. Простой пример кода начинающим разработчикам
  4. Вышел в свет еще один мой бесплатный модуль Echeck
  5. SEO оптимизация поисковых урлов в Magento
  6. Структура базы данных Magento
  7. Диаграмма базы данных Magento

The URI to TrackBack this entry is: http://magento.verych.ru/2009/02/%d0%bd%d0%b0%d0%b2%d0%be%d1%80%d0%b0%d1%87%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-%d1%81%d0%b2%d0%be%d0%b9-%d0%bc%d0%be%d0%b4%d1%83%d0%bb%d1%8c-%d1%87%d0%b0%d1%81%d1%82%d1%8c-3-%d0%b2%d1%8b%d0%b2%d0%be%d0%b4/trackback/

Комментариев - 2 для “Наворачиваем свой модуль. Вывод коллекции данных в грид.”

  1. Sergey:

    Спасибо за статью, пометил себе на заметку.

    Но есть проблема
    Пробую делать по такой схеме с \app\code\core\Mage\Adminhtml\Block\Sales\Order\Grid.php все вроде бы хорошо , но при выводе грида бьет ошибку (проверил запрос который у меня генерится в Collection.php – сам запрос правильный, ошибок не дает)

    Unrecognized method ’setPageSize()’
    Trace:
    #0 [internal function]: Zend_Db_Select->__call(’setPageSize’, Array)
    #1 …\app\code\core\Mage\Adminhtml\Block\Widget\Grid.php(387): Varien_Db_Select->setPageSize(20)
    #2 …\app\code\core\Mage\Adminhtml\Block\Widget\Grid.php(347): Mage_Adminhtml_Block_Widget_Grid->_preparePage()

    Не подскажете как избежать данную ошибку?

  2. Попробуйте убрать функцию setPageSize (я полагаю, что она где-нить в конструкторе) и посмотреть что получится.
    А так на вскидку очень трудно понять что не работает.

Оставить комментарий

© 2009-2012 Magento по-русски 99% авторских статей