質問

この質問には、グリッドが販売 - >注文 - > [注文を選択] - >情報に関するものです。

一番下には、注文が付いたグリッドが表示されます。 SKUで並べ替えたいです。

in:/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