Domanda

Questa domanda riguarda la griglia in:. Vendita-> Ordini -> [selezionare un ordine] -> Informazioni

In fondo si può vedere una griglia con gli ordini. Vorrei ordinare loro da SKU.

In: /app/code/core/Mage/Sales/Model/Order.php ho trovato:

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

Questo crea la griglia di ordine, ma come faccio a ordinarla da SKU?

È stato utile?

Soluzione

In realtà il pezzo di codice non crea la griglia di ordine. Questo recupera gli articoli ordinati per un'ordinazione. E 'utilizzato sia in frontend e backend.

Se si modifica a Ordina per Codice allora gli articoli saranno ordinate per sku nel backend e frontend.
Per fare questo è necessario aggiungere questo pezzo di codice:

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

Subito dopo

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

Naturalmente, non modificare il codice. Sovrascrivere il modello corretto.
Ma io non consiglierei questo approccio. Se si desidera che l'ordine degli elementi di sku solo nel backend si poteva ordinare nel modello.
Il modello è app\design\adminhtml\default\default\template\sales\order\view\items.phtml. È possibile sostituire il codice che rende gli oggetti (voglio dire questo):

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

Con questa:

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

Anche in questo caso ... non modificare il modello. Metti nel tuo proprio tema e modificarlo lì.
Ecco come si può cambiare e admin tema .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top