Есть много учебных пособий и предложений, включая установку пользовательских расширений и т. Д.
Я добавил штрафа shipping_description, основываясь на различных советах и хитростях, изменив файл Grid.php с помощью следующего кода, но когда дело доходит до сортировки по цене или состоянию, выдается ошибка:
SQLSTATE [23000]: Нарушение ограничения целостности: 1052 «Состояние» столбца, где предложение неоднозначно
или же
SQLSTATE [23000]: Нарушение ограничения целостности: 1052 Столбец ‘increment_id’, где предложение неоднозначно
Это сортирует хорошо по Биллингу и имени доставки, хотя.
Следующий код был добавлен в Grid.php:
protected function _prepareCollection()
{
$collection = Mage::getResourceModel($this->_getCollectionClass());
$tableName = Mage::getSingleton("core/resource")->getTableName('sales_flat_order');
$collection->getSelect()->join($tableName, "main_table.entity_id = $tableName.entity_id",array("shipping_description"));
$this->setCollection($collection);
return Mage_Adminhtml_Block_Widget_Grid::_prepareCollection();
}protected function _prepareColumns()
{
$this->addColumnAfter('shipping_description', array(
'header' => Mage::helper('sales')->__('Delivery'),
'width' => '180px',
'type' => 'text',
'index' => 'shipping_description'
),'shipping_name');
return parent::_prepareColumns();
}
любые мысли, идеи будут оценены !!!
Я предполагаю, что вы делаете, добавляете поле «shipping_description» в коллекцию, но я могу помочь вам с легким. т.е. используя рендерер в сетке. Это намного проще, на мой взгляд.
После того, как вы переопределите блок сетки для порядка (рекомендуется переопределить блок), добавьте это в функцию _prepareColumn ()
$this->addColumn('shipping_description', array(
'header'=> Mage::helper('sales')->__('Shipping Description'),
'index' => 'shipping_description',
'filter' => false,
'sortable' => false,
'renderer' => 'PackageName_ModuleName_Block_Adminhtml_Sales_Order_Renderer_Shipping',
));
Здесь вы можете увидеть средство визуализации, которое указывает на класс «PackageName_ModuleName_Block_Adminhtml_Sales_Order_Renderer_Shipping». Теперь перейдите и создайте папку с именем «Renderer» в указанном выше пути, и внутри этой папки создайте файл «Shipping.php».
<?php
class Custom_Customer_Block_Adminhtml_Customer_Renderer_Lifetime extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
{
public function render(Varien_Object $row)
{
$customerId = $row->getData('entity_id');
$customer = Mage::getModel('customer/customer')->load($customerId);
$customerTotals = Mage::getResourceModel('sales/sale_collection')
->setCustomerFilter($customer)
->load()
->getTotals();
$customerLifetimeSales = $customerTotals->getLifetime();
//$customerNumberOfOrders = $customerTotals->getNumOrders();
echo Mage::helper('core')->currency($customerLifetimeSales);
}
}
В вышеприведенном классе я переопределяю клиентский модуль, чтобы определить продажи клиента в течение всей жизни. В этой функции вы можете выполнять любые операции, и то, что вы «возвращаете» или «эхом» в этом файле, будет отображаться в сетке.
Таким образом, вам не нужно объединять таблицы в коллекции. Просто вызовите модель, которая получает описание доставки, и распечатайте его. Вот и все. Это облегчит задачу
Надеюсь, это поможет.
Для того, чтобы предотвратить этот тип ошибки в сортировке столбцов
SQLSTATE[23000]: Integrity constraint violation: 1052 Column ‘status’ in where clause is ambiguous ERROR
при сортировке ваших заказов … Убедитесь, что вы добавили это:
'filter_index'=>'main_table.status',
в массив статуса addColumn
надеюсь, это поможет вам.
Следующее сработало в моем случае. Сортировка теперь работает с каждого поля. Файлы ядра не переопределены.
Шаг за шагом для тех, кто находится в одной лодке. Протестировано в 1.8.1
Скопируйте ваш Grid.php из
/app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php to /app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php
если путь не существует, создайте его.
Откройте новый Grid.php и добавьте следующий код в _prepareCollection()
после getResourceModel
линия:
$collection->getSelect()->join(array('mt'=>'sales_flat_order'),
'mt.entity_id = main_table.entity_id',
array('mt.increment_id','mt.store_id','mt.created_at','mt.shipping_description','mt.status','mt.base_grand_total','mt.grand_total'));
$collection->getSelect()->group('main_table.entity_id');
Добавьте следующий код в _prepareColumns()
функция (между желаемым addColumn()
звонки)
$this->addColumn('shipping_description', array(
'header' => Mage::helper('sales')->__('Delivery'),
'type' => 'text',
'index' => 'shipping_description',
'filter_index' => 'mt.shipping_description',
));
найти addColumns()
функции для increment_id, store_id, created_at, base_grand_total, grand_total, status
и добавьте следующий аргумент в каждом:
'filter_index' => 'mt.___your_column_name____',
Любые предложения по оптимизации приведенного выше кода приветствуются.