2012-04-18 5 views
3

나는 이것을 분류 해 놓았을 것이라고 생각했지만 걸쇠에 부딪쳤다. 고객 등록 양식에 '꿀 냄비'를 추가하고 싶습니다. 익숙하지 않은 사람들은 CSS를 사용하여 텍스트 입력을 숨기고 평균 봇이 입력한다고 가정합니다. 그러나 인간은 필드를 볼 수 없으므로 비어있는 것으로 확인해야합니다. 나는 새 모듈을 생성 젠토에서Magento 고객 등록 'Honey Pot'captcha

,하여 config.xml 파일에 다음을 추가 :

<global> 
    <fieldsets> 
     <customer_account> 
      <honeytrap><create>1</create><update>1</update></honeytrap> 
     </customer_account> 
    </fieldsets> 
    <models> 
     <customer> 
      <rewrite> 
       <customer>MyStore_Honeytrap_Model_Customer</customer> 
      </rewrite> 
     </customer> 
    </models> 
</global> 

내가 다음 필드가 비어 확인하는 유효성 검사 기능에 약간의 여분의 추가. 이 모든 올바른 내가 볼 수 있지만 약 line 278에서 AccountController.phpextractData() 요청의 게시물 데이터에서 입력 된 필드를 삭제합니다. 나는 아직도 Magento에게 아주 새로운 것을 알고 있기 때문에 무언가를 여기에서 배우기를 희망한다. 그러나 나는 필드가 게시물에서 벗겨지는 것을 extractData()에 의해 어떻게 막을 수 있을까?

추측 나는 내가 무엇을 놓쳤는 지 알고 싶다. 인터넷에서 내가 정의한 필드를 추가하는 것과 관련하여 몇 가지 게시물을 읽었으므로 이것이 작동해야한다는 것을 알았다. 그러나 아마도 나는 뭔가를 놓친 것 같다. 데이터베이스에서이 필드를 저장할 필요가 없기 때문에 엔티티 설치를 포함하지 않았습니다. 등록을 검증하는 것은 순수한 것입니다 (가능한 한 많이).

어떤 도움을 주셔서 감사합니다. 아마도 내가 놓친 것은 어쩌면 우스운 이야기 일 것입니다.

편집 : config.xml이 함께

public function check_trap(Varien_Event_Observer $observer) 
{ 
    $event = $observer->getEvent(); 
    $post = $event->getControllerAction()->getRequest()->getPost(); 

    // Check Honeytrap is empty 
    if (Zend_Validate::is(trim($post['fname']) , 'NotEmpty')) 
    { 
     $customerHelper = Mage::helper('customer'); 
     $error = $customerHelper->__('A problem has occured with your registration.'); 
     Mage::getModel('customer/session')->addError($error); 

     Mage::app()->getResponse() 
      ->setRedirect(Mage::getUrl('customer/account', array('_secure' => true))) 
      ->sendResponse(); 
     exit; 
    } 
} 

: @ 고든 - knoppe 포인터 이벤트를 사용하는 방법에 대한 감사

<events> 
     <controller_action_predispatch_customer_account_createpost> 
      <observers> 
       <mystore_honeytrap_observer> 
        <type>singleton</type> 
        <class>Mystore_Honeytrap_Model_Observer</class> 
        <method>check_trap</method> 
       </mystore_honeytrap_observer> 
      </observers> 
     </controller_action_predispatch_customer_account_createpost> 
    </events> 

답변

3

이가 될 수 처리하는 더 분리 된 방법 관련 컨트롤러 작업 (controller_action_predispatch_*) 전에 관찰자를 등록하여 양식 필드가 채워 졌는지 여부를 감지하고, 그렇다면 네이티브 액션이 처리되지 않도록 리디렉션하십시오 요청을 보내는 중.

+0

대신 위 이벤트를 사용하여 실험을 반영하기 위해 위의 게시물을 편집했습니다. 내가 리디렉션과 약간의 싸움을 했음에도 불구하고 작동하지만 잠재적으로 더 나은/깨끗한 방법으로 할 수 있습니다. 포인터 주셔서 감사합니다 :) – createdbypete

관련 문제