Как правильно добавить столбец shipping_description в сетку заказов magento?

Есть много учебных пособий и предложений, включая установку пользовательских расширений и т. Д.

Я добавил штрафа 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();
}

любые мысли, идеи будут оценены !!!

1

Решение

Я предполагаю, что вы делаете, добавляете поле «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);
}
}

В вышеприведенном классе я переопределяю клиентский модуль, чтобы определить продажи клиента в течение всей жизни. В этой функции вы можете выполнять любые операции, и то, что вы «возвращаете» или «эхом» в этом файле, будет отображаться в сетке.

Таким образом, вам не нужно объединять таблицы в коллекции. Просто вызовите модель, которая получает описание доставки, и распечатайте его. Вот и все. Это облегчит задачу

Надеюсь, это поможет.

2

Другие решения

Для того, чтобы предотвратить этот тип ошибки в сортировке столбцов

SQLSTATE[23000]: Integrity constraint violation: 1052 Column ‘status’ in where clause is ambiguous ERROR

при сортировке ваших заказов … Убедитесь, что вы добавили это:

'filter_index'=>'main_table.status',

в массив статуса addColumn

надеюсь, это поможет вам.

0

Следующее сработало в моем случае. Сортировка теперь работает с каждого поля. Файлы ядра не переопределены.

Шаг за шагом для тех, кто находится в одной лодке. Протестировано в 1.8.1

  1. Скопируйте ваш Grid.php из

    /app/code/core/Mage/Adminhtml/Block/Sales/Order/Grid.php to /app/code/local/Mage/Adminhtml/Block/Sales/Order/Grid.php

    если путь не существует, создайте его.

  2. Откройте новый 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');

  3. Добавьте следующий код в _prepareColumns() функция (между желаемым addColumn() звонки)

    $this->addColumn('shipping_description', array(
    'header' => Mage::helper('sales')->__('Delivery'),
    'type' => 'text',
    'index' => 'shipping_description',
    'filter_index' => 'mt.shipping_description',
    ));

  4. найти addColumns() функции для increment_id, store_id, created_at, base_grand_total, grand_total, status и добавьте следующий аргумент в каждом:

    'filter_index' => 'mt.___your_column_name____',

Любые предложения по оптимизации приведенного выше кода приветствуются.

0
По вопросам рекламы [email protected]