Pregunta

Esta pregunta se refiere a la red en:. Ventas-> órdenes -> [seleccionar una orden] -> información

En la parte inferior se puede ver una cuadrícula con las órdenes. Me gustaría ordenarlos por SKU.

En: /app/code/core/Mage/Sales/Model/Order.php que encontré:

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

Esto crea la red de orden, pero ¿Cómo puedo ordenar por SKU?

¿Fue útil?

Solución

En realidad, la pieza de código no crea la red de orden. Esto recupera los artículos pedidos para un pedido. Se utiliza tanto en frontend y backend.

Si lo modifica para ordenar por SKU continuación, los artículos serán clasificadas por SKU en el backend y frontend.
Con el fin de hacer esto es necesario agregar este pedazo de código:

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

Justo después

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

Por supuesto, no edite el código. Invalidar el modelo correctamente.
Pero yo no recomendaría este enfoque. Si desea que el orden de los elementos de SKU única en el back-end que podría clasificarlos en la plantilla.
La plantilla es app\design\adminhtml\default\default\template\sales\order\view\items.phtml. Puede reemplazar el código que hace que los objetos (me refiero a esto):

<?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 esta:

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

Una vez más ... no modifique la plantilla. Ponerlo en su propio tema y modificarlo allí.
Aquí es cómo se puede cambiar el tema y admin .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top