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

Posted

技术标签:

【中文标题】Magento:在发票上包含可配置的产品 Sku - 目前仅显示相关的简单产品【英文标题】:Magento: Include Configurable Product Sku on Invoice - Currently Associated Simple Product Only Shown 【发布时间】:2012-12-03 17:00:10 【问题描述】:

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

谢谢。

【问题讨论】:

【参考方案1】:

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

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

    $order/$invoice->getAllItems()

    使用与order_item存储的product_id获取可配置产品的product_id

    $item->getProductId()

    加载可配置产品

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

    设置**order_item上的SKU为真品的SKU

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

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

**- 除非您调用 $item->save(),否则这不会将任何内容保存到数据库中。你只是临时修改加载到内存中的对象

【讨论】:

我找到了这个答案,因为我正在寻找为什么在购买可配置产品的简单“变体”时,Magento 也会自动将可配置父产品添加到发票的项目集合中。我仍然不清楚 Magento 为何这样做(我认为这是有充分理由的),但我在 Magento 的 PDF 发票生成类中发现了这段代码,这很有帮助。使用$invoice->getAllItems() 获取项目,并测试特定项目是否是可配置的父产品,使用if ($item->getOrderItem()->getParentItem()) // ignore me 更好:使用$invoice->getOrder()->getAllVisibleItems()。这将返回订单中的所有项目,除了上述可配置的父产品,以及已从订单中删除的任何产品。【参考方案2】:

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

【讨论】:

【参考方案3】:

您可以为简单的产品类型提供自己的 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.
    

【讨论】:

以上是关于Magento:在发票上包含可配置的产品 Sku - 目前仅显示相关的简单产品的主要内容,如果未能解决你的问题,请参考以下文章

在 magento 产品导入数据流配置文件中显示 SKU

Magento - 自定义选项不会更新可配置产品的价格

在Magento | Magento教程中按属性(SKU名称等)加载类别或产品

Magento 2:从数据库中获取产品、Sku 和制造商名称

sql Magento查询搜索产品SKU

Magento:产品sku和url