【问题标题】:Magento: Include Configurable Product Sku on Invoice - Currently Associated Simple Product Only ShownMagento:在发票上包含可配置的产品 Sku - 目前仅显示相关的简单产品
【发布时间】: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。

谢谢。

【问题讨论】:

    标签: php magento magento-1.5


    【解决方案1】:

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

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

      $order/$invoice->getAllItems()

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

      $item->getProductId()

    3. 加载可配置产品

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

    4. 设置**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.
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-10-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-29
        • 1970-01-01
        • 1970-01-01
        • 2015-02-01
        相关资源
        最近更新 更多