我需要在所有打印发票上包含可配置产品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。
感谢。
答案 0 :(得分:1)
Magento为每个销售的可配置产品保存两个订单商品。您可以在sales_flat_order_item表中看到这一点。但是,您会注意到这两个项目的SKU相同......简单的SKU。所以,遗憾的是,没有一种简单的方法来获得可配置产品的SKU,但它可以完成。
查找订单商品的加载位置*。寻找:
$order/$invoice->getAllItems()
使用product_id
product_id
获取可配置产品的order_item
$item->getProductId()
加载可配置产品
$product = Mage::getModel('catalog/product')->load($product_id_from_step2)
将order_item
上的SKU设为真实产品的SKU
$item->setSku($product->getSku())
* - 这是您在问题中引用的文件中的某个位置。但请注意,上面的代码实际上是显示表的标题行,而不是实际的产品数据。
** - 除非您致电$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.
}
}