Magento:在发票上包含可配置产品Sku - 仅显示当前关联的简单产品

时间:2012-12-16 09:09:21

标签: php magento magento-1.5

我需要在所有打印发票上包含可配置产品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。

感谢。

3 个答案:

答案 0 :(得分:1)

Magento为每个销售的可配置产品保存两个订单商品。您可以在sales_flat_order_item表中看到这一点。但是,您会注意到这两个项目的SKU相同......简单的SKU。所以,遗憾的是,没有一种简单的方法来获得可配置产品的SKU,但它可以完成。

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

    $order/$invoice->getAllItems()

  2. 使用product_id

    中存储的product_id获取可配置产品的order_item

    $item->getProductId()

  3. 加载可配置产品

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

  4. order_item上的SKU设为真实产品的SKU

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

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

    ** - 除非您致电$item->save(),否则不会向数据库保存任何内容。您只是暂时修改内存中加载的对象

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

创建自定义扩展名,将其添加到config.xml

<global>

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

在您的扩展程序中创建文件。销售\订单\全文\项目\发票\ 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.
    }
}