2012-12-11 6 views
4

나는 번들 항목의 거대한 목록으로 작업하고 있지만 사용자가 입력 한 기준에 따라 옵션으로 특정 항목을 표시하기를 원합니다. 이것은 단순히의 라인을 따라 if 문을 설정하여 충분히 쉬웠다 :번들 제품의 개별 옵션 ID 얻기

$returnedproducts = array(21,50,78,23); // THESE ARE PRODUCT IDS. 
if ($_product->getTypeId() == 'bundle'){ 
    $selectionCollection = $_product->getTypeInstance(true)->getSelectionsCollection(
      $_product->getTypeInstance(true)->getOptionsIds($_product), $_product 
     ); 
    foreach($selectionCollection as $option) { 
     if(array_search($option['product_id'], $returnedproducts) !== FALSE){ // ADDED THIS TO FILTER 
        echo '<li>' . $option->option_id . '</li>'; 
     } 
    } 
} 

문제는이 그냥 때문에 목록의 크기와 몇 가지 다른 요인에 자원의 톤을 빨아 것입니다. 전체 목록을 탐색 할 필요없이 특정 옵션 ID 만 찾아서 표시하는 방법을 찾고 싶습니다 (가능한 경우 옵션 ID를 가져 오는 쿼리에 WHERE product_id = XXXX 추가). 개별 번들 옵션을 검색하는 솔루션을 찾을 수없는 것 같습니다. 아무도 내가 이것을 성취하도록 도울 수 있습니까?

+1

태그에 입력 할 수있는 제목 줄에 정보를 넣지 마십시오. 태그 시스템은 매우 잘 작동하며 도움을 필요로하지 않습니다. :-) 감사. –

+1

필자는'$ selectionCollection-> addFieldToFilter ('entity_id', array ('in'=> $ returnedproducts));를 사용하여 콜렉션을 더 자세히 필터링하려고 시도했지만 작동하지 않는 것으로 보입니다. 그것으로부터 MySQL 문을 얻으면 잘 동작하지만 컬렉션이로드 되 자마자'addFieldToFilter()'가 제거됩니다 ... – 1000Nettles

+0

'addFieldToFilter()'대신'addAttributeToFilter()'를 시도 했습니까? –

답변

-1

아마 이것에 대한 약간의 반발을 잡을 겁니다,하지만 난 당신이 젠토에 큰 컬렉션의 상한에 도달 할 때, 당신은 당신이 할 수있는 두 가지 중 하나 ..

을 할 수있는 것으로 나타났습니다 .. 등 더 많은 RAM/프로세서를위한 호스팅 솔루션 /에서.

  1. 던져 돈
  2. 를 사용하여 직접 SQL 읽기

SQL 읽기하지 특히 ​​위험들입니다 사용 당신은 철저하게 테스트되지 않은 코드를 사용하여 고도로 관리되는 데이터베이스에 무언가를 되돌려 놓으 려하지 않을 것입니다. 당신의 기회는 무언가를 깨는 아주 희박합니다. 예, 기회가 있습니다. 이 잘못 될 수 있습니다. 그러나 이와 같은 트릭을 사용하여 비용/편익을 평가해야합니다. 이는 특별한 경우에 유용합니다. 그것은 여전히 ​​Magento의 SQL 인터페이스를 사용하고 있습니다.

다음 코드를 수정하여 entity_ids 또는 조회 할 항목 목록을 가져 와서 그 결과를 사용하여 컬렉션을 만듭니다.

// Just in case ---$mysqli = Mage::getSingleton('core/resource')->getConnection('core_write'); 
$mysqlr = Mage::getSingleton('core/resource')->getConnection('core_read'); 

$sql = "select * from some_entity_table where some_column = 'somevars'"; 

$results = $mysqlr->fetchAll($sql); 

echo "<PRE>"; 
foreach ($results as $res) 
{ 
    var_dump($res); 
}