वाणिज्य उत्पाद की कीमत के बराबर उपयोगकर्ता अंक कैसे प्रदान करें?


9

मैं एक उत्पाद के बिकने के बाद उत्पाद के मूल्य की मात्रा में उत्पाद के मालिक को उपयोगकर्ता बिंदु देना चाहूंगा ।

इसके लिए मैंने नीचे एक नियम को परिभाषित किया है:

  • घटनाक्रम: चेकआउट प्रक्रिया को पूरा करना

  • क्रियाएँ: लूप ( commerce-order:commerce-line-items)

और मैंने नीचे एक नियम घटक को परिभाषित किया:

  • शर्तें: इकाई क्षेत्र है (इकाई: commerce-line-item, फील्ड: commerce_product)

  • क्रियाएँ: अनुदान अंक एक उपयोगकर्ता के लिए: (उपयोगकर्ता: commerce-line-item:commerce-product:creator, अंक: commerce-line-item:commerce-product:commerce-price:amount)

लेकिन जब मैं घटक को सहेजता हूं तो यह त्रुटि संदेश उत्पन्न करता है:

डेटा चयनकर्ता वाणिज्य-लाइन-आइटम: वाणिज्य-उत्पाद: वाणिज्य-मूल्य: पैरामीटर बिंदुओं के लिए राशि अमान्य है।

मैं ऐसा कैसे कर सकता हूं?


आपको इस शर्त की आवश्यकता क्यों है?
सबजोत 777

संभवतः कारण यह है कि चेक-आउट पूरा होने के बाद वाणिज्य-उत्पाद पहले से ही दायरे से बाहर है (मुझे यकीन नहीं है)। मान को मुद्रित करने और इसे एक बार जांचने का प्रयास करें।
गोकुल एनके

@Daniele क्या आप सुनिश्चित हैं कि आप उस उपयोगकर्ता को अंक देना चाहते हैं जिसने उत्पाद बनाया है?
सबजोत

@ subhojit777 हां, उदाहरण के लिए उपयोगकर्ता क्रेडिट के रूप में प्रबंधक उपयोगकर्ता को। मैं एक आभासी उत्पाद बनाता हूं, जिसे एक बार खरीदने के बाद, मुझे वास्तविक उत्पाद खरीदने के लिए आवश्यक उपयोगकर्ता बिंदु प्रदान करते हैं। अफसोस की बात यह है कि वाणिज्य_क्रेडिट्स में वाणिज्य_सुपर पॉइंट की तरह लचीलापन और मुद्रा नहीं है।
डेनियल नेपोलिटानो

@DanieleNapolitano आपको उस स्थिति की आवश्यकता क्यों है? मुझे लगता है कि प्रश्न में नियम घटक की स्थिति है।
सुबोहितजीत

जवाबों:


5

पहले तो मैंने नियमों और यूजर पॉइंट्स मॉड्यूल का उपयोग करते हुए आपके प्रश्न का उत्तर देने का प्रयास किया , लेकिन मैंने देखा कि उपयोगकर्ता के लिए ग्रांट बिंदुओं को जोड़ते समय कार्रवाई के रूप में ऐसा कोई डेटा चयनकर्ता नहीं है, जिसने उत्पाद का निर्माण किया हो। मुझे उपयोगकर्ता का चयन करने के लिए डेटा चयनकर्ता मिला जो ऑर्डर का मालिक है, लेकिन यह आपकी आवश्यकता नहीं है। (इसीलिए मैंने टिप्पणियों में इसे स्पष्ट किया)।

मुझे आपके प्रश्न का एक मॉड्यूल समाधान मिला। मॉड्यूल hook_commerce_checkout_complete () का उपयोग करता है । हुक पृष्ठ से:

जब कोई ऑर्डर चेकआउट पूरा करता है, तो मॉड्यूल को व्यावसायिक तर्क करने की अनुमति देता है।

यह हुक "ग्राहक पूर्ण चेकआउट" घटना के साथ मेल खाता है। जब इसे लागू किया जाता है, तो केवल व्यावसायिक तर्क का प्रदर्शन किया जाना चाहिए, जैसे कि ऑर्डर की स्थिति को अपडेट करना, उपयोगकर्ता खाते को आदेश सौंपना, या अधिसूचना ई-मेल भेजना। उपयोगकर्ता के साथ सहभागिता इसके बजाय चेकआउट पूर्ण पृष्ठ पर चेकआउट पैन के माध्यम से होनी चाहिए।

यह मेरे द्वारा डिज़ाइन किए गए मॉड्यूल की कोडिंग है:

YourMODULE.info फ़ाइल:

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

UPDATE जैसा कि क्लाइव द्वारा सुझाया गया है , मैंने मॉड्यूल फ़ाइल को बदल दिया है ताकि यह कस्टम मॉड्यूल बहुभाषी साइटों के साथ भी काम करे।

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 ($ पैरामीटर)

कॉमर्स_चेकआउट एपीआई

commerce_line_item_load ($ LINE_ITEM_ID)

commerce_product_load ($ product_id)

उपयोगकर्ता के बिंदु: प्रोग्राम के अनुसार कटौती करें

commerce_currency_amount_to_decimal ()


महान समाधान, यह काम आने वाला है। क्या मैं एक छोटा परिवर्तन सुझा सकता हूं? यह उपयोग करने के लिए बेहतर होगा field_get_items()पुनः प्राप्त करने $order->commerce_line_items, कि जिस तरह से इस बहुभाषी साइटों के साथ भी काम करेगा
क्लाइव

@ सुझाव के लिए धन्यवाद .. लेकिन मैंने पहले कभी field_get_item () का उपयोग नहीं किया है .. मुझे इसका उपयोग सीखना होगा और इस उत्तर में आवेदन करना होगा। कुछ समय की आवश्यकता है :)
subhojit777

0

पिछले उत्तर के विकल्प के रूप में, जिसे कस्टम कोड की आवश्यकता होती है, आप उस त्रुटि संदेश को प्राप्त करने के लिए नीचे वर्णित विकल्प को आज़माना चाह सकते हैं ...

आपका प्रश्न प्रश्न का एक भिन्नरूप (नकल नहीं) प्रतीत होता है " उपयोगकर्ता के अंकों को कुछ क्षेत्र के मूल्य / गणना मूल्य के बराबर कैसे दें? " उस प्रश्न के स्वीकृत उत्तर के समान, अपने नियम घटक को अनुकूलित करने का प्रयास करें:

  1. त्रुटि के कारण आपके नियम घटक में नियम कार्रवाई से पहले इन अतिरिक्त नियम क्रियाओं को जोड़ें:

    • Set a variableयह " उत्पाद की कीमत की राशि " (आपके प्रश्न के अनुसार) से मेल खाती है , जो प्रतीत होता है commerce-line-item:commerce-product:commerce-price:amount। मान लेते हैं कि आप उस चर को नाम देते हैं price_amount
    • Convert data typeउस price_amountचर के पूर्णांक के लिए । मान लेते हैं कि आप उस रूपांतरण परिणाम को नाम देते हैं amount_of_points
  2. अपनी मौजूदा नियम कार्रवाई (उस नियम घटक में) को अनुकूलित करें ताकि दिए जाने वाले उपयोगकर्ता बिंदुओं की संख्या इस (गणना + परिवर्तित) का उपयोग करती है amount_of_points

पुनश्च 1: इस तरह के "कन्वर्ट डेटा प्रकार" बस एक नियम है कि नियम कैसे काम करता है (डिजाइन द्वारा), इसलिए इसे बग के रूप में नहीं माना जाना चाहिए ...

PS 2: मुझे लगता है कि आपका प्रश्न D7 के बारे में है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.