1

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

我主要需要这个 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

4

2 回答 2

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;
于 2013-07-11T08:55:01.090 回答
0
  1. 您需要找到用于您想要更改的内容的集合。

  2. 做这样的事情:

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

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

祝你好运!

于 2013-07-10T18:03:02.670 回答