Magento更改“订购商品”的排序顺序

时间:2013-07-10 14:12:13

标签: php magento mage

有人可以指出我在正确的方向上按字母顺序而不是按时间顺序显示订单中的项目吗?

我主要需要这个pdf发票(我已经修改了相当数量以满足我的需要,但我坚持这个)我确实意识到我可能需要改变发票的分类/订购方式,而不仅仅是pdf制作。

通常,客户购物车和发票中的“订购商品”按照时间顺序排列,当它们被添加到购物篮时,不过我希望他们按SKU或描述/标题排序以帮助采摘。甚至按类别排序也是一种改进。

如果有人可以帮忙解决这个问题,我会在过去的两天里试图解决这个问题并且无处可去。

感谢阅读。

哦,我正在使用1.5 CE。再次感谢。

跟进:

我找到了在创建发票时对订单进行排序的代码:

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

并将其替换为:

<?php $_items = $this->getInvoice()->getAllItems() ?>
<?php $_sortedItems = array(); ?>
<?php foreach ($_items as $_item) : ?>
    <?php $_sortedItems[$_item->getSku()] = $_item;?>
<?php endforeach;?>
<?php ksort($_sortedItems);>
<?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->getOrderItem()) ?>
                </tbody>
<?php endforeach; ?>

然而,现在发票首先生成A,就像它应该的那样,但它实际上只显示第一个项目。发票的其余部分是项目少! :(

我对在adminhtml中为订单生成表的文件进行了非常类似的代码更改,这是完美的工作! ??困惑??也许有人可以帮助我了吗?

在进一步检查时,显然单个剩余的可见项目实际上是一个简单的产品,可配置的产品正在从发票中消失!???

_编辑__

我已经解决了!

我之所以上传简单产品的原因是线索! 而不是按SKU排序我只是使用getName()代替上面代码中的getSKU按名称对列表进行排序! :d

2 个答案:

答案 0 :(得分:1)

答案是:

<?php $_items = $this->getInvoice()->getAllItems() ?>
<?php $_sortedItems = array(); ?>
<?php foreach ($_items as $_item) : ?>
    <?php $_sortedItems[$_item->getName()] = $_item;   //getName() was the key! ?>
<?php endforeach;?>
<?php ksort($_sortedItems);?>
<?php $i=0;foreach ($_sortedItems as $_item):?>
<?php if ($_item->getOrderItem()->getParentItem()) continue; else $_i++; ?>
    <?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->getOrderItem()) ?>
                </tbody>
<?php endforeach; ?> 

由SKU排序是一个问题,因为可配置产品具有不同的SKU类型。所以我简化了它并按名称排序。现在列出所有项目,并按字母顺序列出。 这会在adminhtml

中对发票进行排序

另外对于invoice.php中实际打印方面的事情,请使用:

$items = $invoice->getAllItems()  ; // Gets items --- need to sort them first! 
            $_sortedItems = array();                        // build array, inserts order items into array and sort
            foreach ($items as $item) :
                $_sortedItems[$item->getName()] = $item;
            endforeach;

            ksort($_sortedItems);
            foreach ($_sortedItems as $item) {   //pass sorted items back one at a time in alpha' order

            if ($item->getOrderItem()->getParentItem()) {
                continue;

取代

foreach ($invoice->getAllItems() as $item){  
            if ($item->getOrderItem()->getParentItem()) {
                continue;

答案 1 :(得分:0)

  1. 您需要找到您想要更改的集合。

  2. 做这样的事情:

    $ collection-&gt; getSelect() - &gt; order('main_table.attribute_id ASC');

  3. 当然,您需要将attribute_id更改为要排序的字段/属性,并将订单的ASC和DESC更改为...

    祝你好运!