상거래 제품의 가격과 동일하게 사용자 포인트를 부여하는 방법은 무엇입니까?


9

제품 판매 후 제품 가격으로 제품 소유자 에게 User Point 를 부여하고 싶습니다 .

이를 위해 다음과 같이 규칙을 정의했습니다.

  • 이벤트 : 체크 아웃 프로세스 완료

  • 동작 : 루프 ( commerce-order:commerce-line-items)

그리고 규칙 구성 요소를 아래와 같이 정의했습니다.

  • 조건 : 엔터티 필드가 (법인 : commerce-line-item, 필드 : commerce_product)

  • 작업 : 그랜트 포인트를 사용자에게 (사용자 : commerce-line-item:commerce-product:creator, 포인트 : commerce-line-item:commerce-product:commerce-price:amount)

그러나 구성 요소를 저장하면이 오류 메시지가 생성됩니다.

매개 변수 포인트에 대한 데이터 선택기 상거래-라인-항목 : commerce-product : commerce-price : a 금액이 유효하지 않습니다.

내가 어떻게 할 수 있습니까?


이 조건이 왜 필요한가요?
subhojit777

아마도 결제가 ​​완료되어 상거래 제품이 이미 범위를 벗어 났기 때문일 수 있습니다 (확실하지 않음). 값을 인쇄하고 한 번 확인하십시오.
Gokul NK

@Daniele 제품을 만든 사용자에게 포인트를 부여 하시겠습니까?
subhojit777

@ subhojit777 예. 예를 들어 사용자 포인트를 사용자 크레딧으로 관리합니다. 한 번 구매하면 실제 제품을 구매하는 데 필요한 사용자 포인트를 제공하는 가상 제품을 만듭니다. 슬프게도 commerce_credits는 commerce_userpoints와 같이 유연성과 통화 대체가 없습니다.
Daniele Napolitano

@DanieleNapolitano 왜 그 조건이 필요합니까? 질문이 규칙 구성 요소에 조건이 있음을 나타냅니다.
subhojit777

답변:


5

처음 사용하여 질문에 대답하려 I에서 규칙userpoints 모듈 만 추가하는 동안 것을 나는 보았다 사용자에게 부여 포인트를 작업으로 제품을 생성 한 사용자를 선택하는 이러한 데이터 선택이 없습니다. 주문 소유자 인 사용자를 선택하기위한 데이터 선택기를 찾았지만 이는 귀하의 요구 사항이 아닙니다. (그래서 나는 이것을 주석으로 명확히했다.)

귀하의 질문에 대한 모듈 솔루션을 찾았습니다. 모듈은 hook_commerce_checkout_complete ()를 사용합니다 . 훅 페이지에서 :

주문이 체크 아웃을 완료 할 때 모듈이 비즈니스 로직을 수행 할 수 있도록합니다.

이 후크는 "고객 완료 체크 아웃"이벤트와 일치합니다. 주문 상태 업데이트, 주문을 사용자 계정에 할당 또는 알림 이메일 전송과 같이 비즈니스 로직 만 호출해야합니다. 대신 결제 완료 페이지의 결제 창을 통해 사용자와의 상호 작용이 이루어져야합니다.

이것은 내가 디자인 한 모듈의 코딩입니다.

YOURMODULE.info 파일 :

name = YOURMODULE
description = Module description
dependencies[] = commerce
dependencies[] = commerce_cart
dependencies[] = commerce_checkout
dependencies[] = userpoints
core = 7.x

업데이트 Clive 에서 제안한 대로이 사용자 정의 모듈이 다국어 사이트에서도 작동하도록 모듈 파일을 변경했습니다.

YOURMODULE.module 파일 :

/**                                                                             
 * Implements hook_commerce_checkout_complete().                                
 */                                                                             
function YOURMODULE_commerce_checkout_complete($order) {
  // Iterate through every commerce line item added in product.
  foreach (field_get_items('commerce_order', $order, 'commerce_line_items') as $line_item_id) {

    // Load commerce line item by line item id.
    $line_item = commerce_line_item_load($line_item_id['line_item_id']);

    // We do not want to include shipping cost in userpoints.
    if ($line_item->type != 'shipping') {
      // Load commerce product by product id.
      $product = commerce_product_load(field_get_items('commerce_line_item', $line_item, 'commerce_product')[0]['product_id']);

      // Create parameters.
      $params = array(
        'uid' => $product->uid,
        'points' => commerce_currency_amount_to_decimal(field_get_items('commerce_line_item', $line_item, 'commerce_total')[0]['amount'], field_get_items('commerce_line_item', $line_item, 'commerce_total')[0]['currency_code']),
      );

      // Grant userpoints programmatically.
      userpoints_userpointsapi($params);
    }
  }
}

참조 링크 :

userpoints_userpointsapi ($ params)

commerce_checkout API

commerce_line_item_load ($ line_item_id)

commerce_product_load ($ product_id)

사용자 포인트 : 프로그래밍 방식으로 포인트 공제

commerce_currency_amount_to_decimal ()


훌륭한 해결책은 유용 할 것입니다. 작은 변화 하나만 제안해도 될까요? 사용하는 것이 더 좋을 것이다 field_get_items()검색 $order->commerce_line_items이 너무 다국어 사이트와 함께 작동합니다 그런 식으로
이브

@Clive 제안에 감사드립니다 .... 전에 field_get_item ()을 사용한 적이 없습니다. 사용법을 배우고이 답변에 적용해야합니다. 시간이 필요해 :)
subhojit777

0

사용자 정의 코드가 필요한 이전 답변의 대안으로 아래 설명 된 대안을 시도하여 해당 오류 메시지를 해결할 수 있습니다 ...

귀하의 질문은 " 사용자 사용자 포인트를 특정 필드의 값 / 계산 된 값과 동일하게 부여하는 방법? "이라는 질문의 변형 (중복이 아님) 인 것으로 보입니다 . 해당 질문에 대한 답변과 마찬가지로 규칙 구성 요소를 다음과 같이 조정하십시오.

  1. 오류를 발생시키는 규칙 구성 요소에서 규칙 조치 앞에 다음과 같은 추가 규칙 조치를 추가하십시오.

    • Set a variable이는 ' 제품 가격 금액 '(질문과 같이)에 해당합니다 commerce-line-item:commerce-product:commerce-price:amount. 해당 변수의 이름을 지정한다고 가정 해 봅시다 price_amount.
    • Convert data type해당 price_amount변수를 integer바꿉니다 . 해당 변환 결과의 이름을 지정한다고 가정하겠습니다 amount_of_points.
  2. 부여 할 사용자 포인트 수가이를 사용하도록 (계산 된 + 변환 된) 기존 규칙 조치 (규칙 구성 요소 내)를 조정하십시오 amount_of_points.

추신 1 : 이러한 "데이터 유형 변환"은 단순히 규칙이 작동하는 방식 (설계 상)의 문제이므로 버그로 간주되지 않습니다.

추신 2 : 나는 당신의 질문이 D7에 관한 것이라고 가정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.