Вопрос

Этот вопрос касается сетки в: Sales-> Orders-> [Выберите заказ]-> Информация.

Внизу вы можете увидеть сетку с заказами. Я хотел бы сортировать их по SKU.

В:/app/code/core/mage/sales/model/order.php я нашел:

public function getItemsCollection($filterByTypes = array(), $nonChildrenOnly = false)
{   
    if (is_null($this->_items)) {
        $this->_items = Mage::getResourceModel('sales/order_item_collection')
            ->setOrderFilter($this);

        if ($filterByTypes) {
            $this->_items->filterByTypes($filterByTypes);
        }
        if ($nonChildrenOnly) {
            $this->_items->filterByParent();
        }

        if ($this->getId()) {
            foreach ($this->_items as $item) {

                $item->setOrder($this);
            }
        }
    }
    return $this->_items;
}

Это создает сетку для заказов, но как я могу сортировать ее по SKU?

Это было полезно?

Решение

На самом деле кусок кода не создает сетку заказа. Это получает заказанные предметы для заказа. Он используется как на переднем крае, так и на бэкэнд.

Если вы измените его для сортировки SKU, то предметы будут заказаны SKU на бэкэнд и фронта.
Для этого вам нужно добавить этот кусок кода:

$this->_items->getSelect()->order('sku');

Сразу после

if ($nonChildrenOnly) {
    $this->_items->filterByParent();
}

Конечно, не редактируйте код. Правильно переопределите модель.
Но я бы не рекомендовал этот подход. Если вы хотите порядок предметов SKU только в бэкэнд, вы можете разобраться в их шаблоне.
Шаблон есть app\design\adminhtml\default\default\template\sales\order\view\items.phtmlАнкет Вы можете заменить код, который отображает элементы (я имею в виду это):

<?php $_items = $this->getItemsCollection() ?>
    <?php $i=0;foreach ($_items as $_item):?>
        <?php if ($_item->getParentItem()) continue; else $i++;?>
        <tbody class="<?php echo $i%2?'even':'odd' ?>">
            <?php echo $this->getItemHtml($_item) ?>
            <?php echo $this->getItemExtraInfoHtml($_item) ?>
        </tbody>
    <?php endforeach; ?> 

С этим:

<?php $_items = $this->getItemsCollection() ?>
    <?php $_sortedItems = array(); ?>
    <?php foreach ($_items as $_item) : ?>
        <?php $_sortedItems[$_item->getSku()] = $_item;?>
    <?php endforeach;?>
    <?php ksort($_sortedItems);//sort by sku?>
    <?php $i=0;foreach ($_sortedItems as $_item):?>
        <?php if ($_item->getParentItem()) continue; else $i++;?>
        <tbody class="<?php echo $i%2?'even':'odd' ?>">
            <?php echo $this->getItemHtml($_item) ?>
            <?php echo $this->getItemExtraInfoHtml($_item) ?>
        </tbody>
    <?php endforeach; ?> 

Опять же ... не изменяйте шаблон. Поместите это в свою собственную тему и измените его там.
Вот как вы можете изменить и административную тему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top