Frage

Diese Frage betrifft das Netz in: Verkauf-> Bestellungen-> [Wählen Sie eine Bestellung aus]-> Informationen.

Unten können Sie ein Netz mit den Bestellungen sehen. Ich möchte sie von SKU sortieren.

In: /app/code/core/mage/sales/model/order.php Ich fand:

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;
}

Dies schafft das Bestellgitter, aber wie sortiere ich es nach SKU?

War es hilfreich?

Lösung

Tatsächlich erstellt der Code nicht das Bestellgitter. Dadurch werden die bestellten Elemente für eine Bestellung abgerufen. Es wird sowohl im Frontend als auch im Backend verwendet.

Wenn Sie es so ändern, dass sie nach SKU sortiert werden, werden die Artikel von SKU im Backend und Frontend bestellt.
Um dies zu tun, müssen Sie diesen Code hinzufügen:

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

Gleich nach

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

Bearbeiten Sie den Code natürlich nicht. Überschreiben Sie das Modell ordnungsgemäß.
Aber ich würde diesen Ansatz nicht empfehlen. Wenn Sie die Reihenfolge der Artikel von SKU nur im Backend wünschen, können Sie sie in der Vorlage sortieren.
Die Vorlage ist app\design\adminhtml\default\default\template\sales\order\view\items.phtml. Sie können den Code ersetzen, der die Elemente rendert (ich meine das):

<?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; ?> 

Mit diesem:

<?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; ?> 

Wieder ... ändern Sie die Vorlage nicht. Setzen Sie es in Ihr eigenes Thema und ändern Sie es dort.
So können Sie sich ändern und das Administrator -Thema haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top