不同产品类型的不同付款方式


11

有没有办法为不同的产品类型提供不同的付款方式?

这是我的情况,到目前为止我已经弄清楚了:

我在Drupal Commerce网站上有两种产品类型,用于销售公交旅行通行证。一种类型是预订公交通行证,您可以在其中选择公交车票的日期和时间(自定义订单项)。另一种是实际付款方式,您可以选择公交车票,添加其他游览(也包含自定义订单项),然后使用Paypal付款。

我使用示例付款模块的定制版本作为预订付款类型,并使用Drupal Commerce Paypal模块进行实际付款。

我需要的是为一种产品类型提供自定义预订付款方式,为另一种产品类型提供贝宝付款方式。

我尝试为产品类型添加条件,但无法执行此操作。我们可以为特定产品添加条件,但不能为产品类型添加条件。这将是理想的:https : //skitch.com/ipwa/eywxa/add-a-new-condition-chasquibus

我现在要做的是为每种付款产品类型克隆Paypal规则,并选择该产品SKU作为条件。这是不理想的,因为如果用户拥有多个付款产品,我们将为订单上的每个其他付款产品获得重复的贝宝付款方式。我想这很有意义,因为我们每个人都有一个付款方式规则。

我的解决方案将能够在付款方式规则上具有产品类型的条件,或者能够在“订单包含特定产品”条件中具有四个付款产品SKU。

Answers:


10

产品typecommerce_product实体的属性,因此您可以使用内置的“数据比较”条件对其进行测试。

只需添加类型为“数据比较”的新条件,并使数据选择器如下所示:

屏幕截图1

当您继续时,您将看到如下屏幕:

屏幕截图2

如您所见,您会得到一个不错的产品类型下拉列表供您选择。我刚刚测试了一下,效果很好。

如果由于某种原因该命令不起作用,则可以很容易地在自定义模块中实现您自己的规则条件:

function MYMODULE_rules_condition_info() {
  return array(
    'commerce_product_is_type' => array(
      'label' => t('Product is a certain type'), 
      'parameter' => array(
        'product' => array(
          'label' => t('Product'),
          'type' => 'commerce_product',
        ),
        'type' => array(
          'label' => t('Product Type (Machine Name)'),
          'type' => 'text'
        )
      ), 
      'group' => t('Commerce Product'),
      'callbacks' => array(
        'execute' => 'MYMODULE_commerce_product_is_type',
      )
    ),
  );
}


function MYMODULE_commerce_product_is_type($product, $type) {
  return $product->type == $type;
}

哇,谢谢,这似乎是现在的路。尽管答案不能完全回答问题(我可能需要为Commerce提交问题以提供产品类型规则条件),但确实可以解决我的问题。我将开放赏金,让更多人回答,但到目前为止,似乎您将获得赏金。谢谢你的截图,顺便说一句。
ipwa 2012年

@ipwa事实并非如此,我已经更新了答案
Clive

希望您没有删除先前的答案,而是将此答案添加为另一个答案。当我尝试将commerce-product:type用作数据比较条件的数据选择器时,出现以下错误:“参数数据的数据选择器commerce-product:type无效。”
ipwa 2012年

@ipwa是什么意思?有代码的还是第一个?如果您的意思是,我将代码放回了答案
Clive

我的意思是您关于将SKUS与OR一起使用的答案,这有助于我了解OR以及如何使用它。当前使用该功能,将尝试使用自定义模块来实现我自己的条件。感谢您从答案中学到了很多有关规则的知识。
ipwa 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.