Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैं OpenCart उत्पाद पृष्ठ पर मूल मूल्य कैसे बदल सकता हूँ?

ठीक है, आपको सही दिशा देने के लिए मैं यह कैसे करूँगा:

<मजबूत>1. हिडन इनपुट रेंडर
जैसा कि आप जानते हैं, catalog/view/theme/default/template/product/product.php में कार्ट में उत्पाद जोड़ने के लिए AJAX अनुरोध है:

$('#button-cart').bind('click', function() {
    $.ajax({
        url: 'index.php?route=checkout/cart/add',
        type: 'post',
        data: $('.product-info input[type=\'text\'], .product-info input[type=\'hidden\'], .product-info input[type=\'radio\']:checked, .product-info input[type=\'checkbox\']:checked, .product-info select, .product-info textarea'),
        dataType: 'json',
                // ...
        });
});

यदि आप data को देखते हैं पैरामीटर आप देखेंगे कि सभी इनपुट, चयन, टेक्स्ट क्षेत्र आदि एक .product-info में मौजूद हैं div को पॉप्युलेट किया जाता है और PHP पर पोस्ट किया जाता है।

इसलिए मैं उस .product-info में कस्टम मूल्य मान के साथ छिपे हुए इनपुट को प्रस्तुत करूंगा div को AJAX अनुरोध को बिल्कुल भी संशोधित करने की आवश्यकता नहीं है। मान लें कि उस इनपुट का नाम custom_price होगा ।

<मजबूत>2. checkout/cart/add
catalog/controller/checkout/cart.phpखोलें और add . खोजें तरीका। यहां सारा जादू करना चाहिए। कोड के इस भाग के बाद:

            if (isset($this->request->post['option'])) {
                $option = array_filter($this->request->post['option']);
            } else {
                $option = array();  
            }

मैं इसे जोड़ूंगा:

            if(isset($this->request->post['custom_price']) && $this->isCustomPriceValid($this->request->post['custom_price'])) {
                $custom_price = $this->request->post['custom_price'];
            } else {
                $custom_price = false;
            }

लागू करें isCustomPriceValid() विधि आपकी आवश्यकताओं को पूरा करने के लिए...और अंतिम संपादन के लिए यहां आगे बढ़ें - इस पंक्ति को बदलें:

$this->cart->add($this->request->post['product_id'], $quantity, $option);

करने के लिए:

$this->cart->add($this->request->post['product_id'], $quantity, $option, $custom_price);

<मजबूत>3. गाड़ी
अब इस फाइल को खोलें:system/library/cart.php और फिर से add . खोजें तरीका। आपको इस विधि की परिभाषा बदलनी होगी:

public function add($product_id, $qty = 1, $option = array(), $custom_price = false) {

इस पद्धति के भीतर कोड की अंतिम पंक्ति से पहले, एक और जोड़ें:
(यह कोड ओपी की टिप्पणी के कारण संपादित किया गया था)

    // ...

    if($custom_price) {
        if(!isset($this->session->data['cart']['custom_price'])) {
            $this->session->data['cart']['custom_price'] = array();
        }

        $this->session->data['cart']['custom_price'][$key] = $custom_price;
    }

    $this->data = array(); // <- last line
}

अंतिम संपादन getProducts() . विधि के भीतर होना चाहिए चूंकि यह डीबी से सभी डेटा लोड कर रहा है और उन्हें अन्य नियंत्रकों को प्रदर्शित करने के उद्देश्य से अग्रेषित करता है।

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

लाइन खोजें

$price = $product_query->row['price'];

और जोड़ने के ठीक बाद

if(isset($this->session->data['cart']['custom_price'][$key])) {
    $price = $this->session->data['cart']['custom_price'][$key];
}

अब कीमत को कस्टम के साथ अधिलेखित कर दिया जाना चाहिए। आगे जांचें कि उत्पाद की कीमत बाद में इस प्रकार निर्धारित की गई है:

$this->data[$key] = array(
    // ...
    'price'           => ($price + $option_price),
    // ...              
);

इसलिए यदि आप कस्टम मूल्य के साथ पूरी कीमत को अधिलेखित करना चाहते हैं, तो उस स्थिति को उस सरणी के ठीक बाद इस तरह जोड़ें (बजाय $price = ...; के बाद) ):

if(isset($this->session->data['cart']['custom_price'][$key])) {
    $this->data[$key]['price'] = $this->session->data['cart']['custom_price'][$key];
}

यही होना चाहिए। मैंने कोड का परीक्षण नहीं किया, यह मामूली संशोधनों के साथ काम कर भी सकता है और नहीं भी। मैं ओसी 1.5.5.1 के साथ काम कर रहा था। यह आपको केवल सही दिशा की ओर इशारा करना चाहिए (जबकि यह विश्वास करना कि अंत इतना दूर नहीं है)।

आनंद लें!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कोडइग्निटर क्वेरी:कॉलम मान को उसी पंक्ति में किसी अन्य कॉलम में कैसे स्थानांतरित करें और वर्तमान समय को मूल कॉलम में कैसे बचाएं?

  2. अधिसूचना जब कोई वीडियो अपलोड करता है

  3. लापता अनुक्रम अंतराल खोजें mysql

  4. Jquery के साथ चेकबॉक्स चेक करते समय डेटाबेस को कैसे अपडेट करें?

  5. मैसकल डाटा बेस में हर महीने एक कॉलम में मूल्य जोड़ें