2014-01-10 2 views
2

Magento의 재고 기능에 포함되지 않은 이유는 확실하지 않지만 고객이 어린이 SKU으로 구성 가능한 제품을 검색 할 수있게하려고합니다. 어떤 이유로 Magento는 하위 SKU의 색인을 생성하지 않습니다. Magento Fulltext에 하위 SKU 추가

내가 성공하지 않고, 나는 몇 가지 변화를 시도했습니다

$dynamicFields = array(
    'int'  => array_keys($this->_getSearchableAttributes('int')), 
    'varchar' => array_keys($this->_getSearchableAttributes('varchar')), 
    'text'  => array_keys($this->_getSearchableAttributes('text')), 
    'decimal' => array_keys($this->_getSearchableAttributes('decimal')), 
    'datetime' => array_keys($this->_getSearchableAttributes('datetime')), 
); 

app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php에서 발견. SKU는 $this->_getSearchableAttributes('static')을 통해 액세스 할 수있는 "정적"속성입니다. 나는 모든 정적 속성을 얻는 것이 좋지만 작동하지 않습니다. 어떤 시도에 따라 결과에 변화가 없거나 정적 속성 테이블이 존재하지 않는다는 오류가 발생합니다 (이는 정적 속성이 제품 엔티티 테이블에 있기 때문에 의미가 있습니다).

누구든지이 문제를 해결하기위한 제안을 갖고 있습니까?

온라인 리서치에서는 숨겨진 속성을 이러한 값과 함께 추가 할 것을 제안했지만 필요한 것은 아닙니다. 나는 차라리 문제를 올바르게 풀고 싶다.

+0

"온라인 조사에서 이러한 값으로 숨겨진 특성을 추가 할 것을 제안했지만 그럴 필요는 없습니다. 문제를 올바르게 해결할 것입니다." => 나는이 속성을 업데이트하기 위해 제품을 관찰하는 사람들과도 같은 것을 할 것입니다. –

+0

해결책을 구현하는 데 문제가 있습니까? https://stackoverflow.com/questions/31812898/magento-return-grouped-product-when-searching-associated-products-sku – user552769

답변

2

그래서 여러 가지 방법으로이 작업을 수행합니다 ..

을 그러나, 나는 app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php의 실제 전체 텍스트 주위에 나사보다 훨씬 청소기 오히려 것 내가 믿는 뭔가 이어질 것입니다.

코어/마법사/CatalogSearch/모델/자원/전체 텍스트/Engine.php

/** 
* Retrieve allowed visibility values for current engine 
* 
* @return array 
*/ 
public function getAllowedVisibility() 
{ 
    return Mage::getSingleton('catalog/product_visibility')->getVisibleInSearchIds(); 
} 
: 궁극적으로 리드

// status and visibility filter 
    $visibility  = $this->_getSearchableAttribute('visibility'); 
    $status   = $this->_getSearchableAttribute('status'); 
    $statusVals  = Mage::getSingleton('catalog/product_status')->getVisibleStatusIds(); 
    $allowedVisibilityValues = $this->_engine->getAllowedVisibility(); 

을 :

문제는 당신이 포함 니펫을 그 후 라인입니다

다음 :

코어/마기/카탈로그/모델/제품/Visibility.php

public function getVisibleInSearchIds() 
{ 
    return array(self::VISIBILITY_IN_SEARCH, self::VISIBILITY_BOTH); 
} 

그렇다면 구성 가능한 것과 관련된 간단한 제품으로 이동하여 가시성을 '검색'으로 변경하십시오.

Change in visibility options for simple product associated with config

그러나, 여기에 지금 행동이다 : 그러나

Zoinks! that doesn't look pretty at all

, 그래, 꽤 전혀 보이지 않습니다. 다음 비즈니스 주문은 검색 결과를 수정하므로 구성 가능한 제품과 관련된 간단한 제품 항목이 나열 될 때 b.) 가시성 ID가 명시 적으로 Mage_Catalog_Model_Product_Visibility :: VISIBILITY_IN_SEARCH로 설정되면 항목을 다음과 같이 렌더링해야합니다. 검색 결과를 실제 구성 가능한 제품 상위 (및 이미지와 같은 세부 정보의 나머지 부분)로 전송합니다.

(나중에 컴퓨터를 사용하기로 결심했습니다. 필자가 작성한 것의 50 % 이상을 잃어 버렸습니다. 전체 텍스트 클래스를 수정 한 부분조차도! 나중에 보자.)

+0

이것은 흥미로운 접근 방법입니다. 부모가 결과에서 자녀를 바꾼 후에도 동일한 부모 제품이 결과에 여러 번 표시되는 것을 방지하기위한 힌트가 있습니까? – iJeep

0

해결 방법이 있지만 유료 확장 (라이센스가 있음)이지만 Magento 표준을 따르지 않으므로 하위 속성으로 검색 할 수 없으며 상위 구성/그룹화/번들 제품 만 반환 할 수 있습니다.

1

검색을 위해 간단한 제품 가시성을 설정하는 방법을 사용했습니다. 그런 다음 간단한 제품로드를 표시하거나 상위 제품을 표시하는 대신

루프 성능 문제의 프론트 엔드 쿼리 외에 필자는이 솔루션을 매우 만족스럽지 못했습니다. 그래서 또 다른 딱딱 거리기 후에 나는 또 다른 옵션을 발견했다.

그룹화 된 제품의 전체 텍스트 인덱스에 단순 제품 SKU를 추가하고 있지만 구성 가능한 제품에도 동일한 방법을 사용해야합니다.

Mage_CatalogSearch_Model_Resource_Fulltext->_prepareProductIndex 

당신이 전체 텍스트 인덱스에 데이터를 추가 할 수있는 제품 유형 클래스의 getSearchableData 방법을 재정 의하여 그래서

$typeInstance = $this->_getProductTypeInstance($productData['type_id']); 
if ($data = $typeInstance->getSearchableData($product)) { 
    $index['options'] = $data; 
} 

이 포함되어 여기

는 생각이다.

... extends Mage_Catalog_Model_Product_Type_Grouped 
{ 

/** 
* all child SKUs to search data 
*/ 
public function getSearchableData($product=null) 
{ 
    $searchData = parent::getSearchableData(); 
    $adapter = Mage::getSingleton('core/resource')->getConnection('core_read'); 
    $select = $adapter->select() 
     ->from(
      array('p' => Mage::getSingleton('core/resource')->getTableName('catalog/product')), 
      array('sku') 
     ) 
     ->joinLeft(
      array('r' => Mage::getSingleton('core/resource')->getTableName('catalog/product_relation')), 
      'r.child_id = p.entity_id', 
      array() 
     ) 
     ->where('r.parent_id = ?', $this->getProduct($product)->getId()); 
    $query = $adapter->query($select); 
    while ($row = $query->fetch()) { 
     $searchData[] = $row['sku']; 
    } 
    return $searchData; 
} 

다시 색인 검색 및 catalogsearch_fulltext.dataindex가 추가 데이터를 포함해야합니다 : 그룹화 된 제품의 경우처럼 보였다 업데이트 된 내.

관련 문제