使用特定运输方式时所选产品的自定义促销

时间:2014-01-23 16:06:02

标签: magento magento-1.7

我正在尝试在Magento中创建一个模块,允许管理员在使用特定的送货方式时选择符合运费折扣条件的产品和类别。

我首先在System-> Config中创建一个自定义部分,然后分别使用system.xml文件为每个产品添加一个启用/禁用选项。如果计算出运费方法的费率,我会扫描购物车中的商品,如果在管理员中启用了商品,则会应用折扣。

我的问题是这种方法仅适用于产品数量少的商店。我怀疑在Magento中有更好的方法可以解决这个问题,但到目前为止,我还没有太多运气找到有关该主题的信息。有没有更好的方法来完成这项任务?

2 个答案:

答案 0 :(得分:0)

1)使用选项是/否

创建属性'eligible_for_discount'

2)创建一个包含 product_id 的CSV文件,并为值'是/否'(即1或0)分配属性'eligible_for_discount' 对于您希望应用折扣的任何产品。

3)从Magento Admin。

导入CSV文件

4)在购物车页面上,您可以检查产品是否包含'eligible_for_discount'的属性值,如果,则应用折扣。

答案 1 :(得分:0)

虽然另一个答案很棒,但是有一些事情给我带来了一些麻烦,我想尝试澄清一下。我决定使用安装脚本创建产品属性。我将以下代码放在我的mysql4-install-0.1.0.php文件中:

$entity = $this->getEntityTypeId('catalog_product');

$this->addAttribute($entity, 'reduced_shipping', array(
    'type'      => 'varchar',
    'input'     => 'boolean',
    'label'     => 'Product Qualified For Free Shipping',
    'visible'   => true,
    'default'   => '0',
    'required'  => true,
    'used_in_forms' => array(
        'adminhtml_checkout',
        'adminhtml_customer',
        'admin_html_customer_address',
        'checkout_register',
        'customer_account_create',
        'customer_account_edit',
        'customer_address_edit',
        'customer_register_address',
    )
));

虽然布尔值是创建属性时输入的有效形式,但看起来它不能用于存储属性 type 。这可以通过使用varchar来解决。运行安装脚本后,管理员可以转到目录 - >管理产品,他们可以为每个项目的免费送货属性选择是或否。

最后,我在我创建的Carrier的collectRates()方法中使用了以下内容来循环浏览客户购物车中的商品,看看管理员是否已选择免费送货。

$quote = Mage::getModel('checkout/session')->getQuote();
$itemList = $quote->getAllVisibleItems();

foreach($itemList as $item)
{
    $product = Mage::getModel('catalog/product')->load($item->getProductId());
    if($product->getReducedShipping() == 1)
    {
         //update the price of shipping here
    } 
}

我已经略过了几件事来保持这个答案不会太久,所以如果有任何我可以澄清的部分,请告诉我。