Различные способы оплаты для разных типов продуктов

11

Можно ли использовать разные способы оплаты для разных типов продуктов?

Это мой сценарий и то, что я понял до сих пор:

У меня на сайте Drupal Commerce есть два типа продуктов для продажи проездных билетов на автобус. Один из типов - просто забронировать проездной на автобус, где вы выбираете дату и время (настраиваемые позиции) для билетов на автобус. Другой тип предназначен для фактических платежей, где вы можете выбрать пропуск на автобус, добавить дополнительные туры (также с пользовательскими позициями), а затем оплатить с помощью Paypal.

Я использую настроенную версию примерного модуля оплаты для типа оплаты бронирования и использую модуль Drupal Commerce Paypal для фактических платежей.

Мне нужно, чтобы пользовательский метод оплаты бронирования был доступен для одного типа продукта, а метод оплаты PayPal для другого типа продукта.

Я пытался добавить условие для типа продукта и не смог этого сделать. Мы можем добавить условие для определенного продукта, но не для типа продукта. Это было бы идеально: https://skitch.com/ipwa/eywxa/add-a-new-condition-chasquibus

Сейчас я клонировал правило Paypal для каждого типа платежного продукта и выбрал для этого SKU продукта условие. Это не идеально, потому что если у пользователя есть более одного платежного продукта, мы получаем дубликат метода оплаты Paypal, доступный для каждого дополнительного платежного продукта в заказе. Я думаю, это имеет смысл, так как у нас есть правило метода оплаты для каждого.

Мое решение могло бы иметь условие для типа продукта в правиле метода оплаты или иметь возможность иметь четыре SKU платежных продуктов в условии «Заказ содержит определенный продукт».

ipwa
источник

Ответы:

10

Продукт typeявляется свойством commerce_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
@ipwa Оказывается, это было не так сложно, я обновил ответ
Клайв
Я бы хотел, чтобы вы не удалили свой предыдущий ответ и вместо этого добавили его в качестве другого ответа. Когда я пытаюсь использовать commerce-product: type в качестве селектора данных для условия сравнения данных, я получаю эту ошибку: «Селектор данных commerce-product: type для данных параметра недопустим».
ipwa
@ipwa Кого ты имеешь в виду? Тот, с кодом или самый первый? Я вернул код в ответ на случай, если ты имеешь в виду этот код
Клайв
Я имел в виду ваш ответ об использовании продукта SKUS с OR, который помог мне понять OR и как его использовать. В настоящее время, используя это, попробую пользовательский модуль для реализации моего собственного условия. Спасибо много узнали о правилах с вашими ответами.
ipwa