টেলিফোনে প্রয়োজনীয় ক্ষেত্রটি চেকআউট থেকে অপসারণ করতে আপ টু ডেট গাইড


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


ধন্যবাদ! কেবল এটি একটি মডিউলে রাখুন: github.com/sreichel/magento-StackExchange_RequiredTelephone
sv3n

6

Mage_Customer_Model_Address_Abstractফোন নম্বরটির জেন্ডিং যাচাইকরণের জন্য আপনাকে 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 এর থেকেও কম ম্যাগেন্টো সংস্করণের জন্য কাজ করে।
মার্ক ভ্যান ডের স্যান্ডেন

তুমি একেবারেই সঠিক. আমি এখনই সম্পাদনা করব
স্যান্ডার মঞ্জেল

প্রস্তাবিত উত্তরগুলি হিসাবে দেখায় আমি Abstract.php / / public_html / অ্যাপ / কোড / কোর / Mage / গ্রাহক / মডেল / পাবলিক_এইচটিএমএল / অ্যাপ / কোড / স্থানীয় / মাইজে / গ্রাহক / মডেল / ঠিকানা থেকে অনুলিপি করেছি টেলিফোন নম্বর এবং চালনা করুন আপডেট আপডেট eav_attribute SET is_required = 0 WHERE গুণবাচক_কোড = 'টেলিফোন' LIMIT 1; 1 সারি প্রভাবিত। (ক্যোয়ারী 0.0506 সেকেন্ড নিয়েছিল) সমস্ত ক্যাশে সাফ করেছে (আমার ম্যাজেন্টো সংকলন সর্বদা বন্ধ থাকে) তবুও গ্রাহকরা চেকআউট করার আগে তাদের এখনও একটি নম্বর দেওয়ার প্রয়োজন। কেউ দয়া করে নিশ্চিত করুন যে এই সমাধানটি 1.8.0.0 এ কাজ করে, কারণ এটি খনিতে কাজ করে না।
অ্যালিস্টায়ার

2
স্যান্ডারের ক্যোয়ারিতে একটি ছোট্ট ত্রুটি রয়েছে: ক্যোয়ারিতে LIMIT 1 বাদ দিন। ডিফল্ট সিই 1.8 ইনস্টলেশন-এ, eav_attributeকোড 'টেলিফোন' সহ 4 টি প্রবেশ রয়েছে , তাই কোনটি আপডেট হয়েছে তা আপনি বলতে পারবেন না। তারপরে কোডটি কাজ করা উচিত (সবেমাত্র এটি পরীক্ষা করে নেওয়া হয়েছে)। ভিজ্যুয়াল অংশের জন্য, আপনাকে তারপরেও <em>*</em>সমস্ত আকারের (চেকআউট / ঠিকানা সম্পাদনা) ক্ষেত্রের লেবেলটি সরিয়ে ফেলতে হবে। অবশ্যই, যদি আপনার এক ধরণের এক ধাপের চেকআউট ইনস্টল থাকে তবে এটি ডিফল্ট কিছু Magento কার্যকারিতা ওভাররাইড করতে পারে এবং এই উত্তরটি কাজ নাও করতে পারে।
মার্ক ভ্যান ডের স্যান্ডেন

1
হাই মার্ক: আপনার মন্তব্যের জন্য ধন্যবাদ, আমি আমার স্টোরের ক্ষেত্রে এটি ছিল কিনা তা পরীক্ষা করে দেখেছি, তবে আমার কাছে কেবল কোড'টেলফোনের সাথে একটি 'ইভ_ট্রিবিউট' রয়েছে "সরিয়ে নিন * ইভা_অ্যাট্রিবিউট WHERE অ্যাট্রিবিউট_কোড = 'টেলিফোন'" সারিগুলি 0 - 0 দেখাচ্ছে (1 মোট, ক্যোয়ারী 0.0005 সেকেন্ড নেন), তাই আমার দোকান শুধুমাত্র এই এক, পুলিশের অসদৃশ হয়েছে .. এবং এটি বর্তমানে "= 0 is_required" সেট করা হয়
অ্যালিস্টার

5

আমি সাইটের থিমের জন্য ঠিকানা টেম্পলেটটি পরিবর্তন করতে এবং ফোনের ডিফল্ট মান হিসাবে স্থান বা ড্যাশ হিসাবে একটি লুকানো ক্ষেত্র তৈরি করার পরামর্শ দেব। এটির জন্য পুনর্লিখন / ওভাররাইটের প্রয়োজন হবে না।


2

কাস্টম এক্সটেনশন এবং কনফিগার পুনরায় লেখাগুলি ব্যবহার করে বিমূর্ত ব্যবহার করে এমন ক্লাসগুলি কেবল নতুন করে লিখতে পারেন না?

  • Mage_Sales_Model_Quote_Address,
  • Mage_Customer_Model_Address,
  • Mage_Sales_Model_Order_Address,

তারপরে আপনি আপনার নিজের validateফাংশনটি তৈরি করতে পারেন যা টেলিফোন চেককে বাদ দেবে, বা আরও ভাল প্রয়োজনীয় সমস্ত বৈশিষ্ট্যগুলির জন্য যাচাই করে এবং সেগুলি সেট করা আছে যাচাই করে।


1
সত্য, তবে দুর্ভাগ্যক্রমে প্রতিটি দ্বিতীয় অর্থ প্রদান বা শিপিং মডিউল সেই ক্লাসগুলি পুনরায় লেখার চেষ্টা করছে (আমি কয়েকটি নাম রাখতে পারি)। প্রায়শই এটি কোনও বিকল্প নয় বা এটি খুব অগোছালো হয়ে যায়।
এফএমআরএনজি

কিন্তু আপনি কি একাধিক পুনরায় লেখার সমাধান করেছেন? কারণ তখন আপনি সেই সমাধানটি ব্যবহার করতে পারেন এবং সেখানে আপনার বৈধতা ইনজেকশন করতে পারেন।
ডেভিড ম্যানার্স

অবশ্যই আপনি এটি করতে পারেন, তবে আপনাকে প্রতিটি একক প্রকল্পের জন্য এটি করতে হবে, যেহেতু আপনি জানেন না যে এই ক্লাসগুলির পুনরায় লেখার জন্য আর কে আছে। দুর্ভাগ্যক্রমে, গ্রাহকরা সবসময় ফোনের বৈধতা অপসারণ করতে বলে। আমি যে একক স্ট্যান্ডার্ড এবং "পরিষ্কার" সমাধান নিয়ে এসেছি তা হ'ল আমি আমার উত্তরে বর্ণনা করেছি এবং এটি সমস্ত ম্যাগেন্টো সংস্করণেও কাজ করে না। যদি এটি প্রয়োগ না করা যায় তবে সহজতম হ'ল স্থানীয় কোড পুলে অ্যাবস্ট্রাক্ট ক্লাসটি অনুলিপি করা এবং বৈধতাটি মন্তব্য করা ... সেরা নয়, তবে আপনি যদি এটির অপব্যবহার না করেন তবে ঠিক আছে।
এফএমআরএনজি

2

আমি কেবল টবির একটি দুর্দান্ত ছোট্ট এক্সটেনশন "ওয়েবগুইস_টেলিফোনকাইনপিফ্লিচ্ট" এর মুখোমুখি হয়েছিল যা মূলত ডেভিডের পদ্ধতির অনুসরণ করে। এটি সংশ্লিষ্ট সাবক্লাসগুলি পুনর্লিখন করে। আমি যা পছন্দ করি তা হ'ল এটি কেবল পুনর্লিখিত ক্লাসগুলিতে একটি ইভেন্ট প্রেরণ করে এবং পরবর্তী সমস্ত কাস্টমাইজেশন একটি ইভেন্ট পর্যবেক্ষকের মাধ্যমে করা হয়। এটি core_block_abstract_to_html_afterকিছু রেজেেক্স কালো যাদু দ্বারা তারকা এবং প্রয়োজনীয় শ্রেণিকে ইনপুট ক্ষেত্র থেকে সরানোর জন্য ইভেন্টটি পর্যবেক্ষণ করে । এবং এটি অবশ্যই একটি সেটআপ স্ক্রিপ্ট নিয়ে আসে, যা টেলিফোনের বৈশিষ্ট্যটি eav_attributeটেবিলের জন্য প্রয়োজন হয় না । আপনি গিটহাবে এক্সটেনশনটি চেক করতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.