【问题标题】:Custom Promotion for Selected Products When Using Specific Shipping Method使用特定运输方式时选定产品的自定义促销
【发布时间】:2014-01-23 16:06:01
【问题描述】:

我正在尝试在 Magento 中创建一个模块,该模块将允许管理员在使用特定运输方式时选择有资格享受运输折扣的产品和类别。

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

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

【问题讨论】:

    标签: magento magento-1.7


    【解决方案1】:

    1) 创建一个属性 'eligible_for_discount' 和选项 Yes/No

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

    3) 从 Magento Admin 导入 CSV 文件。

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

    【讨论】:

    • 感谢 Vikram,这就是我最终解决问题的方式。我将在今天晚些时候发布另一个答案,详细介绍一下。
    • 我会在这里等着看你更新的准确答案。谢谢。
    【解决方案2】:

    虽然另一个答案作为指导很好,但有几件事给我带来了一些麻烦,我想尝试澄清一下。我决定使用安装脚本创建产品属性。我将以下代码放在我的 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',
        )
    ));
    

    虽然在创建属性时 boolean 是 input 的有效形式,但它看起来不能用于存储属性 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
        } 
    }
    

    我已经浏览了几件事以防止这个答案变得太长,所以请告诉我是否有任何我可以澄清的部分。

    【讨论】:

      猜你喜欢
      • 2018-09-08
      • 1970-01-01
      • 2017-02-11
      • 2016-08-06
      • 2023-03-21
      • 2022-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多