결제시 전화 필수 필드를 제거하기위한 최신 가이드


9

magento 레이아웃 버전 1.8.0.0을 기반으로 체크 아웃시 '필수'전화 필드 제거에 대한 가이드를 게시 할 수 있습니다. 현재 Google 리소스의 대부분이 오래되어 더 이상 작동하지 않습니다. 이것은 업데이트 된 사용 방법 / 안내를 유지하기에 완벽한 장소 인 것 같습니다.

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를 다시 작성하는 것이 좋습니다.

UPDATE는 핵심 팀은 이벤트 랩 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전화 번호의 Zend Validation을 주석으로 처리하는 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코드 디렉토리 에 복사하십시오 *


사용자 정의 확장에서 추상 클래스를 확장 (재 작성) 할 수 없습니다. 전체 파일 만 app / code / local에 복사하여 사용자 정의 할 수 있습니다. 또한이 답변은 1.8보다 낮은 Magento 버전에서도 작동합니다.
Mark van der Sanden

당신 말이 맞아요 바로 편집하겠습니다
Sander Mangel

제안 된 답변에서 알 수 있듯이 Abstract.php를 / public_html / app / code / core / Mage / Customer / Model / Address에서 public_html / app / code / local / Mage / Customer / Model / Address로 복사했습니다. 전화 번호 및 실행 업데이트 eav_attribute SET is_required = 0 WHERE attribute_code = 'telephone'LIMIT 1; 1 행이 영향을받습니다. (질문은 0.0506 초 걸렸습니다) 모든 캐시를 지 웠습니다 (내 magento 컴파일은 항상 꺼져 있습니다). 그러나 고객은 여전히 ​​체크 아웃하기 전에 번호를 제공해야합니다. 이 솔루션이 1.8.0.0에서 작동하는지 확인하십시오. 내에서 작동하지 않기 때문입니다.
Alistair

2
Sander의 쿼리에는 작은 오류가 있습니다. 쿼리에서 LIMIT 1을 생략하십시오. 기본 CE 1.8 설치에는 eav_attribute코드 '전화'와 함께 4 개의 항목이 있으므로 어떤 항목 이 업데이트되었는지 알 수 없습니다. 그런 다음 코드가 작동해야합니다 (방금 테스트했습니다). 시각적 부분 <em>*</em>의 경우 모든 양식에서 필드 레이블에서 여전히 제거해야 합니다 (체크 아웃 / 주소 편집). 물론 어떤 종류의 1 단계 체크 아웃이 설치되어 있으면 기본 Magento 기능 중 일부를 무시할 수 있으며이 답변이 작동하지 않을 수 있습니다.
Mark van der Sanden

1
안녕하세요 마크 : 귀하의 의견에 감사드립니다, 그것이 내 가게에 해당되는지 확인했지만 코드 'telephone'이있는 eav_atribute가 하나 있습니다. "SELECT * FROM eav_attribute WHERE attribute_code = 'telephone'"행 0-0 표시 내 가게는 당신과는 달리 이들 중 하나를 가지고 .. 그리고 현재 "= 0 is_required"로 설정되어 있으므로, (1 개 총, 쿼리 0.0005 초를했다)
알리스 테어

5

사이트 테마의 주소 템플릿을 변경하고 전화기를 기본값으로 공백 또는 대시가있는 숨겨진 필드로 만드는 것이 좋습니다. 다시 쓰거나 덮어 쓰지 않아도됩니다.


2

사용자 정의 확장을 사용하여 초록을 사용하는 클래스를 단순히 다시 작성하고 구성을 다시 작성할 수는 없습니다.

  • Mage_Sales_Model_Quote_Address,
  • Mage_Customer_Model_Address,
  • Mage_Sales_Model_Order_Address,

그런 다음 validate전화 확인을 제외하거나 필요한 모든 속성을 확인하고 설정되었는지 확인하는 고유 한 기능을 수행 할 수 있습니다 .


1
사실, 불행히도 매 초마다 지불 또는 배송 모듈이 해당 클래스를 다시 작성하려고합니다 (몇 가지 이름을 지정할 수 있음). 종종 옵션이 아니거나 매우 지저분합니다.
fmrng

그러나 당신은 그 여러 번의 재 작성을 해결 했습니까? 그런 다음 해당 솔루션을 사용하여 유효성 검사를 주입 할 수 있습니다.
David Manners

물론 그렇게 할 수는 있지만, 누가 그 클래스를 다시 작성할 것인지 모르기 때문에 모든 프로젝트마다해야합니다. 불행히도 고객은 항상 전화 확인을 삭제하도록 요청합니다. 내가 생각 해낸 유일한 표준 및 "깨끗한"솔루션은 내 답변에 설명 된 솔루션이며 모든 Magento 버전에서도 작동하지 않습니다. 이것이 적용될 수 없다면 가장 쉬운 방법은 추상 클래스를 로컬 코드 풀에 복사하고 유효성 검사를 주석 처리하는 것입니다. 최고는 아니지만 남용하지 않으면 좋습니다.
fmrng

2

방금 Tobi의 "Webguys_Telefonkeinpflicht"라는 멋진 확장 프로그램을 발견했습니다. 기본적으로 David의 접근 방식을 따릅니다. 각 서브 클래스를 다시 작성합니다. 내가 좋아하는 것은 다시 작성된 클래스에서만 이벤트를 전달하고 모든 추가 사용자 정의가 이벤트 관찰자에서 수행된다는 사실입니다. 또한 core_block_abstract_to_html_after정규식 흑 마법으로 입력 필드에서 별과 필요한 클래스를 제거하기 위해 이벤트를 관찰합니다 . 물론 eav_attribute테이블 에 전화 속성이 필요하지 않은 설정 스크립트가 제공됩니다 . GitHub 에서 확장을 확인할 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.