คู่มือล่าสุดเพื่อลบฟิลด์ที่ต้องใช้โทรศัพท์จากการชำระเงิน


9

โปรดให้ใครสักคนโพสต์คำแนะนำเกี่ยวกับการลบฟิลด์โทรศัพท์ 'จำเป็น' ในการชำระเงินโดยยึดตามเลย์เอาต์คุณภาพเยี่ยมเวอร์ชัน 1.8.0.0 ทรัพยากรกูเกิ้ลปัจจุบันส่วนใหญ่ล้าสมัยและไม่ทำงานอีกต่อไป นี่จะเป็นสถานที่ที่สมบูรณ์แบบสำหรับการปรับปรุงคู่มือ / คำแนะนำ

มันจะมีประโยชน์ถ้าบางคนสามารถยืนยันวิธีการทำงานได้โดยการดาวน์โหลด Magento 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 คลาส IMHO

อัปเดต ทีมหลักปิดเหตุการณ์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_Abstractclass * ที่บรรทัด 375-377 แสดงความคิดเห็นการตรวจสอบความถูกต้องของ Zend ของหมายเลขโทรศัพท์

//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';

สิ่งนี้จะดูแลการตรวจสอบส่วนหน้า (Javascript) ของฟิลด์โทรศัพท์

** ตรวจสอบให้แน่ใจว่าได้คัดลอกไฟล์คลาสไปยังlocalไดเรกทอรีรหัสของคุณ*


โปรดทราบว่าคุณไม่สามารถขยาย (เขียน) คลาสนามธรรมจากส่วนขยายที่กำหนดเอง คุณสามารถคัดลอกไฟล์ทั้งหมดไปยังแอพ / code / local และปรับแต่งมันที่นั่น โปรดทราบด้วยว่าคำตอบนี้ใช้ได้กับเวอร์ชั่น Magento ต่ำกว่า 1.8 เช่นกัน
Mark van der Sanden

คุณพูดถูก ฉันจะแก้ไขทันที
Sander Mangel

ตามที่แสดงคำตอบที่แนะนำฉันได้คัดลอก Abstract.php จาก / public_html / แอพ / รหัส / หลัก / ผู้วิเศษ / ลูกค้า / รุ่น / ที่อยู่ไปที่ public_html / แอป / รหัส / ท้องถิ่น / ผู้วิเศษ / ลูกค้า / รุ่น / ที่อยู่แสดงความคิดเห็นบรรทัดที่เกี่ยวข้อง หมายเลขโทรศัพท์และเรียกใช้อัปเดต eav_attribute SET is_required = 0 WHERE attribute_code = 'โทรศัพท์' LIMIT 1; ได้รับผลกระทบ 1 แถว (การค้นหาใช้เวลา 0.0506 วินาที) ล้างแคชทั้งหมด (การรวบรวมวีโอไอพีของฉันปิดอยู่เสมอ) อย่างไรก็ตามลูกค้ายังต้องให้หมายเลขก่อนที่จะสามารถชำระเงินได้ บางคนได้โปรดยืนยันการแก้ปัญหานี้ทำงานบน 1.8.0.0 เพราะมันไม่ทำงานในเหมือง
อลิสแตร์

2
มีข้อผิดพลาดเล็กน้อยในการค้นหาของ Sander: ละเว้น LIMIT 1 ในการสืบค้น ในการติดตั้ง CE 1.8 ที่เป็นค่าเริ่มต้นมี 4 รายการeav_attributeด้วยรหัส 'โทรศัพท์' ดังนั้นคุณจึงไม่สามารถบอกได้ว่ามีการอัพเดตรายการใด จากนั้นรหัสควรทำงาน (เพิ่งทดสอบ) สำหรับส่วนที่มองเห็นได้นั้นคุณยังต้องลบ<em>*</em>ในป้ายชื่อของฟิลด์ในทุกรูปแบบ (แก้ไขการชำระเงิน / ที่อยู่) แน่นอนถ้าคุณมีการติดตั้งการชำระเงินแบบขั้นตอนบางอย่างมันอาจแทนที่ฟังก์ชันการทำงานของ Magento ที่เป็นค่าเริ่มต้นและคำตอบนี้อาจไม่ทำงาน
Mark van der Sanden

1
สวัสดี Mark: ขอบคุณสำหรับความคิดเห็นของคุณฉันตรวจสอบเพื่อดูว่าเป็นกรณีในร้านค้าของฉันหรือไม่ แต่ฉันมี eav_atribute เดียวที่มี code'telephone '"SELECT * จาก eav_attribute WHERE attribute_code =' โทรศัพท์ '" แสดงแถว 0 - 0 (ทั้งหมด 1 ข้อความค้นหาใช้เวลา 0.0005 วินาที) ดังนั้นร้านค้าของฉันมีเพียงหนึ่งรายการเท่านั้นซึ่งแตกต่างจากของคุณ .. และขณะนี้มีการตั้งค่าเป็น "is_required = 0"
Alistair

5

ฉันขอแนะนำให้เปลี่ยนแม่แบบที่อยู่สำหรับชุดรูปแบบของไซต์และทำให้โทรศัพท์เป็นเขตข้อมูลที่ซ่อนอยู่ซึ่งเป็นค่าเริ่มต้นให้เว้นวรรคหรือเส้นประ สิ่งนี้จะต้องไม่มีการเขียนทับ / เขียนทับ


2

คุณไม่สามารถเขียนคลาสที่ใช้ abstract โดยใช้นามสกุลที่กำหนดเองและตั้งค่าการเขียนซ้ำได้อย่างง่ายดาย

  • Mage_Sales_Model_Quote_Address,
  • Mage_Customer_Model_Address,
  • Mage_Sales_Model_Order_Address,

จากนั้นคุณสามารถทำให้validateฟังก์ชั่นของคุณเองที่จะไม่รวมการตรวจสอบทางโทรศัพท์หรือดีกว่ายังตรวจสอบคุณสมบัติที่จำเป็นทั้งหมดและตรวจสอบว่าพวกเขามีการตั้งค่า


1
จริง แต่น่าเสียดายที่โมดูลการชำระเงินหรือการจัดส่งทุกวินาทีกำลังพยายามเขียนคลาสเหล่านั้นใหม่ (ฉันสามารถตั้งชื่อได้ไม่กี่) บ่อยครั้งที่มันไม่ใช่ตัวเลือกหรือจบลงด้วยความยุ่งเหยิง
fmrng

แต่คุณได้แก้ไขการเขียนซ้ำหลายรายการเหล่านั้นหรือไม่ สาเหตุจากนั้นคุณสามารถใช้โซลูชันนั้นและฉีดการตรวจสอบของคุณที่นั่น
David Manners

แน่นอนคุณสามารถทำเช่นนั้นได้ แต่คุณต้องทำเพื่อทุกโครงการเนื่องจากคุณไม่รู้ว่าใครจะเขียนคลาสเหล่านั้นอีก น่าเสียดายที่ลูกค้าขอให้ลบการตรวจสอบความถูกต้องทางโทรศัพท์ทุกครั้ง ทางออกเดียวที่ได้มาตรฐานและ "สะอาด" ที่ฉันคิดไว้คือคำตอบที่ฉันได้อธิบายไว้และมันก็ไม่ได้ผลกับเวอร์ชันวีโอไอพีทุกรุ่น หากไม่สามารถใช้สิ่งที่ง่ายที่สุดคือการคัดลอกคลาสนามธรรมไปยังกลุ่มรหัสท้องถิ่นและแสดงความคิดเห็นการตรวจสอบความถูกต้อง ... ไม่ใช่สิ่งที่ดีที่สุด แต่ก็ไม่เป็นไรถ้าคุณไม่ใช้มันในทางที่ผิด
fmrng

2

ฉันเพิ่งพบกับส่วนขยายเล็ก ๆ ที่ดี "Webguys_Telefonkeinpflicht" โดย Tobi ซึ่งเป็นไปตามแนวทางของ David มันเขียนใหม่คลาสย่อยที่เกี่ยวข้อง สิ่งที่ฉันชอบมากคือความจริงที่ว่ามันส่งเหตุการณ์ในคลาสที่เขียนซ้ำเท่านั้นและการปรับแต่งเพิ่มเติมทั้งหมดจะทำในผู้สังเกตการณ์เหตุการณ์ นอกจากนี้ยังตรวจสอบcore_block_abstract_to_html_afterเหตุการณ์เพื่อที่จะลบดาวและคลาสที่ต้องการจากฟิลด์อินพุตด้วยเวทมนตร์สีดำบางส่วนของ regex และแน่นอนว่ามาพร้อมกับสคริปต์การตั้งค่าซึ่งทำให้คุณสมบัติโทรศัพท์ไม่จำเป็นในeav_attributeตาราง คุณสามารถตรวจสอบขยายบนGitHub

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.