2012-07-27 4 views
0

Magento 관리 메뉴에서 Customers -> Manage Customers를 선택하면 문자열이 둘 이상의 단어로 구성된 경우 고객 이름을 사용하여 고객을 검색 할 수 없습니다. 이 작업을 수행하는 핵심 코드는 어디에서 찾을 수 있습니까? 이 섹션에는 확장 프로그램이 없습니다. 문제의Magento : 고객 이름 검색 수정 방법

예 :

나는 "존 스미스"검색, 존 스미스라는 이름의 고객을 검색하려면 더 결과를 반환하지 않습니다. "john"또는 "smith"를 별도로 검색하면 작동하지만 SQL 쿼리 인 LIKE %john% 또는 LIKE %smith%과 비슷한 "john"또는 "smith"가 포함 된 이름이 나타납니다. 응용 프로그램/코드/코어/마법사가/고객/: 그것은 버그이며, 여기에

1.7에서 수정되었습니다 수정해야 할 코드의 당신은 마 젠토 버전 1.6

을 사용하고 같은

답변

1

이 보이는 모델/자원/고객/Collection.php

I 버전 1.7에서 가져온 코드를 게시

:

Mage_Customer_Model_Resource_Customer_Collection  

    public function addNameToSelect() 
    { 
     $fields = array(); 
     $customerAccount = Mage::getConfig()->getFieldset('customer_account'); 
     foreach ($customerAccount as $code => $node) { 
      if ($node->is('name')) { 
       $fields[$code] = $code; 
      } 
     } 

     $adapter = $this->getConnection(); 
     $concatenate = array(); 
     if (isset($fields['prefix'])) { 
      $concatenate[] = $adapter->getCheckSql(
       '{{prefix}} IS NOT NULL AND {{prefix}} != \'\'', 
       $adapter->getConcatSql(array('LTRIM(RTRIM({{prefix}}))', '\' \'')), 
       '\'\''); 
     } 
     $concatenate[] = 'LTRIM(RTRIM({{firstname}}))'; 
     $concatenate[] = '\' \''; 
     if (isset($fields['middlename'])) { 
      $concatenate[] = $adapter->getCheckSql(
       '{{middlename}} IS NOT NULL AND {{middlename}} != \'\'', 
       $adapter->getConcatSql(array('LTRIM(RTRIM({{middlename}}))', '\' \'')), 
       '\'\''); 
     } 
     $concatenate[] = 'LTRIM(RTRIM({{lastname}}))'; 
     if (isset($fields['suffix'])) { 
      $concatenate[] = $adapter 
        ->getCheckSql('{{suffix}} IS NOT NULL AND {{suffix}} != \'\'', 
       $adapter->getConcatSql(array('\' \'', 'LTRIM(RTRIM({{suffix}}))')), 
       '\'\''); 
     } 

     $nameExpr = $adapter->getConcatSql($concatenate); 

     $this->addExpressionAttributeToSelect('name', $nameExpr, $fields); 

     return $this; 
    }