चेकआउट से टेलीफोन आवश्यक क्षेत्र को हटाने के लिए अप टू डेट गाइड


9

कृपया कुछ एक को मैगनेटो लेआउट संस्करण 1.8.0.0 के आधार पर चेकआउट में 'आवश्यक' टेलीफोन क्षेत्र को हटाने पर एक गाइड पोस्ट कर सकते हैं, वर्तमान में मौजूद संसाधनों के बहुमत पुराने हैं और अब काम नहीं करते हैं। यह एक अद्यतन कैसे / गाइड रखने के लिए सही जगह प्रतीत होगी।

यह उपयोगी होगा यदि कोई व्यक्ति मैगेंटो 1.8.0.0 डाउनलोड करके काम के समाधान की पुष्टि कर सकता है और इसे हटाने के प्रमाण प्रदान कर सकता है, ये कोड स्निपेट कभी-कभी सहायक होते हैं, लेकिन हमें अभी तक फैशन को पढ़ने / प्रलेखित करने के लिए एक आसान समाधान में काम करना है।


जवाबों:


8

इससे पहले कि 1.8.1मुझे इस काम को करने के किसी भी तरीके के बारे में पता नहीं है, आपको या तो स्थानीय कोड पूल में अमूर्त कोर क्लास को ओवरराइड करना होगा या फिर हर एक बच्चे की क्लास को लिखना होगा (बदसूरत, मुझे पता है)।

से 1.8.1पर, वे घटना की शुरुआत की customer_address_validation_after। मुझे प्रतिशोध का उपयोग करके मान्यता से छुटकारा मिल गया, भले ही मुझे इस पर गर्व न हो। आपकी समस्या का समाधान नहीं हो सकता है, लेकिन मुझे लगा कि मैं इसे वैसे भी पोस्ट करूंगा।

/**
 * Validate address ignoring phone-related errors
 *
 * Internally uses reflexion. Maybe not the most
 * efficient or clean implementation, but allows
 * this functionality to be implemented without
 * the need to rewrite 3 core classes.
 *
 * Listens to:
 * - customer_address_validation_after
 *
 * @param Varien_Event_Observer $observer Event observer
 */
public function validateAddress(Varien_Event_Observer $observer)
{
    /* @var $address Mage_Customer_Model_Address_Abstract */
    $address = $observer->getAddress();
    if (!$address) {
        return;
    }

    $prop = new ReflectionProperty('Mage_Customer_Model_Address_Abstract', '_errors');
    if (!$prop) {
        return;
    }
    $prop->setAccessible(true);
    $errors = $prop->getValue($address);
    $prop->setValue($address, array());

    $errorMessage = $this->getErrorMessage();
    foreach ($errors as $error) {
        if ($error !== $errorMessage) {
            $address->addError($error);
        }
    }
}

/**
 * Get standard error message
 *
 * @return string
 */
protected function getErrorMessage()
{
    return Mage::helper('customer')->__('Please enter the telephone number.');
}

मैंने दायर की गई आवश्यकता को परिभाषित करने के लिए एक अद्यतन स्क्रिप्ट भी लिखी, और फ्रंटेंड सत्यापन को हटाने के लिए सभी रूपों को संपादित किया। जैसा कि मैंने कहा, यह सबसे अच्छा समाधान नहीं हो सकता है, लेकिन यह 3-4 वर्गों आईएमएचओ को फिर से लिखने से बेहतर है।

अद्यतन कोर टीम घटना लिपटे customer_address_validation_afterसे एक सशर्त शुरुआत में 1.9.0के माध्यम से 1.9.1.1(मैं वास्तव में क्यों, मेरे लिए कोई मतलब नहीं है ...) मेरी समाधान तो इन संस्करणों के लिए काम करते नहीं, दुर्भाग्य से होगा। सशर्त सौभाग्य से हटा दिया गया था 1.9.2


धन्यवाद! बस इसे एक मॉड्यूल में
डालें

6

आपको Mage_Customer_Model_Address_Abstractफ़ोन नंबर के Zend सत्यापन पर टिप्पणी करते हुए कक्षा 375-377 पर कक्षा को संशोधित करना होगा ।

//if (!Zend_Validate::is($this->getTelephone(), 'NotEmpty')) {
//   $errors[] = Mage::helper('customer')->__('Please enter the telephone number.');
//}

साथ ही आवश्यक वर्ग को हटाने वाले डेटाबेस में टेलीफोन की विशेषता है। यह निम्नलिखित प्रश्न के साथ किया जा सकता है

UPDATE `eav_attribute` SET `is_required` = 0 WHERE `attribute_code` = 'telephone';

यह टेलीफोन क्षेत्रों के फ्रंटएंड (जावास्क्रिप्ट) सत्यापन का ध्यान रखेगा।

** अपने localकोड निर्देशिका में कक्षा फ़ाइल की प्रतिलिपि बनाना सुनिश्चित करें *


ध्यान दें कि आप कस्टम एक्सटेंशन से एक सार वर्ग का विस्तार (पुनर्लेखन) नहीं कर सकते हैं। आप केवल संपूर्ण फ़ाइल को ऐप / कोड / स्थानीय में कॉपी कर सकते हैं और इसे वहां कस्टमाइज़ कर सकते हैं। यह भी ध्यान दें कि यह उत्तर मैगेंटो संस्करणों के लिए 1.8 से कम है।
मार्क वैन डेर सैंडेन

आप बिल्कुल सही कह रहे है। मैं अभी संपादित करेंगे
Sander Mangel

जैसा कि सुझाए गए उत्तर दिखाते हैं कि मैंने Abstract.php को / public_html / app / code / core / Mage / customer / Model / Address से public_html / app / code / local / Mage / ग्राहक / मॉडल / पते से कॉपी कर लिया है टेलिफोन नंबर और रन करें UPDATE eav_attribute SET is_required = 0 WHERE विशेषता_code = 'टेलीफोन' सीमा 1; 1 पंक्ति प्रभावित। (Query ने NAB6 sec लिया) सभी कैश को साफ़ कर दिया (मेरा मैगनेटो संकलन हमेशा बंद है) Howevert ग्राहकों को अभी भी एक नंबर देने की आवश्यकता है इससे पहले कि वे जांच कर सकें। क्या कोई इस समाधान की पुष्टि 1.8.0.0 पर कर सकता है, क्योंकि यह मेरा काम नहीं करता है।
एलिस्टेयर

2
सैंडर की क्वेरी में एक छोटी सी त्रुटि है: क्वेरी में LIMIT 1 को छोड़ें। एक डिफ़ॉल्ट सीई 1.8 इंस्टॉलेशन में, eav_attributeकोड 'टेलीफोन' के साथ 4 प्रविष्टियां हैं , इसलिए आप यह नहीं बता सकते कि किसको अपडेट किया गया है। फिर कोड को काम करना चाहिए (अभी परीक्षण किया है)। दृश्य भाग के लिए, आपको तब भी <em>*</em>सभी रूपों में फ़ील्ड के लेबल को हटाने की जरूरत है (चेकआउट / एड्रेस एडिट)। बेशक, यदि आपके पास किसी प्रकार का एक चरण चेकआउट स्थापित है, तो यह डिफ़ॉल्ट मैगनेटो कार्यक्षमता में से कुछ को ओवरराइड कर सकता है और यह उत्तर काम नहीं कर सकता है।
मार्क वैन डेर सैंडेन

1
हाय मार्क: आपकी टिप्पणी के लिए धन्यवाद, मैंने यह देखने के लिए जाँच की कि क्या मेरे स्टोर पर मामला था, लेकिन मेरे पास केवल एक eav_atribute with code'telephone '"SELECT * FROM eav_attribute WHERE SPECIAL_code =" टेलीफोन "पंक्तियों को दिखाते हुए 0 - 0 (1 कुल, क्वेरी ने 0.0005 सेकंड लिया), इसलिए मेरे स्टोर में केवल आपका ही है, आपके विपरीत .. और यह वर्तमान में "is_required = 0" पर सेट है
एलिस्टेयर

5

मैं साइट थीम के लिए एड्रेस टेम्प्लेट बदलने और फ़ोन को एक डिफ़ॉल्ट फ़ील्ड के रूप में एक स्थान या डैश के साथ एक छिपे हुए फ़ील्ड बनाने का सुझाव दूंगा। इसके लिए किसी पुनर्लेखन / ओवरराइट की आवश्यकता नहीं होगी।


2

क्या आप केवल उन कक्षाओं को फिर से नहीं लिख सकते हैं जो एक कस्टम एक्सटेंशन और कॉन्फ़िगरेशन रीराइट का उपयोग करके सार का उपयोग करते हैं।

  • Mage_Sales_Model_Quote_Address,
  • Mage_Customer_Model_Address,
  • Mage_Sales_Model_Order_Address,

फिर आप अपना स्वयं का validateफ़ंक्शन बना सकते हैं जो टेलीफोन चेक को बाहर कर देगा, या सभी आवश्यक विशेषताओं के लिए बेहतर अभी तक जांच करेगा और यह निर्धारित करेगा कि वे सेट हैं।


1
यह सच है, लेकिन दुर्भाग्य से हर दूसरा भुगतान या शिपिंग मॉड्यूल उन वर्गों को फिर से लिखने की कोशिश कर रहा है (मैं कुछ नाम दे सकता हूं)। अक्सर यह एक विकल्प नहीं है, या यह बहुत गन्दा हो रहा है।
fmrng

लेकिन आपने उन कई पुनर्लेखनों को हल किया है? तब आप उस समाधान का उपयोग कर सकते हैं और वहां अपनी मान्यता को इंजेक्ट कर सकते हैं।
डेविड मैनर्स

बेशक आप ऐसा कर सकते हैं, लेकिन आपको इसे हर एक परियोजना के लिए करना होगा, क्योंकि आप नहीं जानते कि उन वर्गों को फिर से लिखने वाला कौन है। दुर्भाग्य से, ग्राहक हमेशा फोन के सत्यापन को हटाने के लिए कहते हैं। एकमात्र मानक और "स्वच्छ" समाधान जो मैं लेकर आया था, वह वही है जिसका मैंने अपने उत्तर में वर्णन किया था, और यह सभी मैगनेटो संस्करणों के लिए भी काम नहीं करता है। अगर इसे लागू नहीं किया जा सकता है, तो सबसे आसान है कि आप एब्स्ट्रैक्ट क्लास को लोकल कोड पूल में कॉपी करें और वेलिडेशन कमेंट करें ... बेस्ट नहीं, लेकिन यह ठीक है अगर आप इसका दुरुपयोग नहीं करते हैं।
fmrng

2

मुझे बस टोबी द्वारा एक अच्छा सा विस्तार "वेबग्यूज़_लिफ़ॉनकेनफ्लिफ़िकट" मिला, जो मूल रूप से डेविड के दृष्टिकोण का अनुसरण करता है। यह संबंधित उपवर्गों को फिर से लिखता है। मुझे जो बहुत पसंद है वह यह है कि यह केवल पुनर्लेखन कक्षाओं में एक घटना को भेजता है और आगे के सभी अनुकूलन फिर एक घटना पर्यवेक्षक में किया जाता है। यह core_block_abstract_to_html_afterकुछ रेगेक्स काले जादू के साथ इनपुट क्षेत्र से स्टार और आवश्यक वर्ग को हटाने के लिए घटना को भी देखता है । और यह निश्चित रूप से एक सेटअप स्क्रिप्ट के साथ आता है, जो eav_attributeतालिका में आवश्यक टेलीफोन विशेषता नहीं बनाता है । आप GitHub पर एक्सटेंशन की जांच कर सकते हैं ।

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