0

我需要在所有打印发票上包含可配置产品 SKU,因为可配置产品 SKU 是人类可读的,但简单的产品是 16 位数字条形码,这使得挑选产品成为一场噩梦。

我发现 /app/code/core/Mage/Sales/Model/Order/Pdf/Invoice.php 编写了文档。在其中,它具有以下内容,我相信这些内容会创建文件。

    $page->drawText(Mage::helper('sales')->__('Product'), 35, $this->y, 'UTF-8');
    $page->drawText(Mage::helper('sales')->__('SKU'), 255, $this->y, 'UTF-8');
    $page->drawText(Mage::helper('sales')->__('Price'), 380, $this->y, 'UTF-8');
    $page->drawText(Mage::helper('sales')->__('Qty'), 430, $this->y, 'UTF-8');
    $page->drawText(Mage::helper('sales')->__('Tax'), 480, $this->y, 'UTF-8');
    $page->drawText(Mage::helper('sales')->__('Subtotal'), 535, $this->y, 'UTF-8');

我的问题是如何将“SKU”更改为可配置的产品 SKU。我商店中的所有产品都是可配置的,因此它不会覆盖简单的产品 sku。

谢谢。

4

3 回答 3

1

Magento 为每个销售的可配置产品保存两个订单项目。您可以在 sales_flat_order_item 表中看到这一点。但是,您会注意到这两个项目上的 SKU 是相同的......简单的 SKU。所以,不幸的是,没有简单的方法来获取可配置产品的 SKU,但可以做到。

  1. 查找订单商品的加载位置*。寻找:

    $order/$invoice->getAllItems()

  2. 使用存储的来获取product_id可配置产品的product_idorder_item

    $item->getProductId()

  3. 加载可配置产品

    $product = Mage::getModel('catalog/product')->load($product_id_from_step2)

  4. 将**上的SKU设置order_item为来自真实产品的SKU

    $item->setSku($product->getSku())

*- 这是您在问题中引用的文件中的某处。但是请注意,您上面的代码实际上是显示表格的标题行,而不是实际的产品数据。

**- 除非您调用$item->save(). 您只是临时修改加载到内存中的对象

于 2012-12-16T15:33:03.713 回答
0

只需转到此文件 app\code\core\Mage\Sales\Model\Order\Pdf\Items\Invoice\Default.php 在这里你可以找到 sku 字段,打印$item数组你会得到你需要的

于 2012-12-17T07:39:43.113 回答
0

您可以为简单的产品类型提供自己的 PDF 渲染器,然后查找可配置的产品等。

创建自定义扩展将其添加到您的 config.xml

<global>

    <pdf>
        <invoice>
            <simple>invoice/sales_order_pdf_items_invoice_simple</simple>
        </invoice>
    </pdf>
</global>

在您的扩展程序中创建文件。Sales\Order\Pdf\Items\Invoice\Simple.pdf

<?php
class YourModule_Invoice_Model_Sales_Order_Pdf_Items_Invoice_Simple extends     Mage_Sales_Model_Order_Pdf_Items_Abstract
{

    public function draw()
    {
        $order  = $this->getOrder();
        $item   = $this->getItem();
        $pdf    = $this->getPdf();
        $page   = $this->getPage();
        $lines  = array();

        // Render your PDF. Look in parent class for examples.
    }
}
于 2012-12-18T13:34:59.213 回答