2014-09-12 68 views
0

我想打,我想通过它的名称中使用的产品名称,如查询和类别进行搜索产品定制的搜索查询来搜索产品在Magento是:我想通过名称和类别ID

我尝试下面的代码,但其现在的工作

$searchstring='comp'; 
$product_collection = Mage::getResourceModel('catalog/product_collection') 
->addAttributeToSelect('*') 
->addAttributeToFilter('category_id', array('in' => array('finset' => '141'))); 

->addAttributeToFilter('name', array('like' => '%'.$searchstring.'%')) 
->load(); 

foreach ($product_collection as $product) { 
echo $product->getName().'<br>'; 
} 

请指导我我怎么能做到这一点

+0

$属性=法师:: getSingleton( '目录/配置') - > getProductAttributes(); ('*');} addAttributeToSelect($ attributes) - > addAttributeToSelect('*');} addAttributeToSelect($ attributes) - > addAttributeToSelect('*'); $ collection-> addAttributeToFilter('name',array('like'=>'%'。$ searchstring。'%')); $ data = $ collection-> getData(); var_dump($ data); – 2014-09-17 10:37:40

回答

0

我没有关于Magento的knowlegde,但确实在PHP此代码的工作?也许它不是一个语法错误,但你已经尝试过这样的事情:

$product_collection = Mage::getResourceModel('catalog/product_collection'); 
$product_collection->addAttributeToSelect('*'); 
$product_collection->addAttributeToFilter('category_id', array('in' => array('finset' => '141'))); 
$product_collection->addAttributeToFilter('name', array('like' => '%'.$searchstring.'%')); 
$product_collection->load(); 
0

可能是这个代码波纹管可以帮助你:

$product_collection = Mage::getModel('catalog/product') 
     ->getCollection() 
     ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left') 
     ->addAttributeToSelect('*') 
     ->addAttributeToFilter('category_id', array(
       array('finset' => $id1), 
       array('finset' => $id2)) 
     ) 
     ->addAttributeToFilter('name', array('like' => '%'.$searchstring.'%')); 
+0

我不认为应用了类别过滤器 – OSdave 2014-09-15 15:05:28

1

您可以使用addCategoryFilter过滤类别。

$searchstring='comp'; 

$category = Mage::getModel('catalog/category')->load(141); 

$product_collection = Mage::getResourceModel('catalog/product_collection') 
->addAttributeToSelect('*') 
->addCategoryFilter($category) 
->addAttributeToFilter('name', array('like' => '%'.$searchstring.'%')); 

foreach ($product_collection as $product) { 
    echo $product->getName().'<br>'; 
} 
0
Searching product by category 

In "advanced search" feature, searching product by category is not the default setting. But we can do this by modifying the foloowing files: 

app/code/core/Mage/CatalogSearch/Block/Advanced/Form.php 
app/code/core/Mage/CatalogSearch/Model/Advanced.php 
app/design/yourdesign/yourdesign/template/catalogsearch/advanced/form.phtml 


At the bottom of app/code/core/Mage/CatalogSearch/Block/Advanced/Form.php we can add following codes: 

public function getStoreCategories() 
    { 
     $helper = Mage::helper('catalog/category'); 
     return $helper->getStoreCategories(); 
    } 


In app/code/core/Mage/CatalogSearch/Model/Advanced.php, replace the getSearchCriterias() by following functions: 



public function getSearchCriterias() 

    { 
    $search = $this->_searchCriterias; 
       /* display category filtering criteria */ 
     if(isset($_GET['category']) && is_numeric($_GET['category'])) { 
     $category = Mage::getModel('catalog/category')->load($_GET['category']); 
     $search[] = array('name'=>'Category','value'=>$category->getName()); 
     } 
     return $search; 
    } 


Replace the getProductCollection() by following function: 

public function getProductCollection(){ 
    if (is_null($this->_productCollection)) { 
     $this->_productCollection = Mage::getResourceModel('catalogsearch/advanced_collection') 
     ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes()) 
     ->addMinimalPrice() 
     ->addStoreFilter(); 
     Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($this->_productCollection); 
     Mage::getSingleton('catalog/product_visibility')->addVisibleInSearchFilterToCollection($this->_productCollection); 
     /* include category filtering */ 
     if(isset($_GET['category']) && is_numeric($_GET['category'])) $this->_productCollection->addCategoryFilter(Mage::getModel('catalog/category')->load($_GET['category']),true); 
     } 
     return $this->_productCollection; 
} 



In page app/design/yourdesign/yourdesign/template/catalogsearch/advanced/form.phtml, find the codes as following: 


    <input name="<?php echo $_code ?>" id="<?php echo $_code ?>" value="<?php echo $this->htmlEscape($this->getAttributeValue($_attribute)) ?>" title="<?php echo $this->htmlEscape($this->getAttributeLabel($_attribute)) ?>" class="input-text <?php echo $this->getAttributeValidationClass($_attribute) ?>" type="text" /> 
      <?php endswitch; ?> 
     </li> 
     <?php endforeach; ?> 



at the bottom of this piece of codes, add following codes: 



<li> 
<label for="category_search_field">Search by Category:</label> 
<select name="category" id="category_search_field"> 
<option value="">-- Any Category --</option> 
<?php foreach ($this->getStoreCategories() as $_category): ?> 
<?php if($_category->hasChildren()): ?> 
<option class="parent-cat" value="<?php echo $_category->getId(); ?>"><?php echo $_category->getName();?></option> 
<?php foreach ($_category->getChildren() as $subcategory): 
if($subcategory->getIsActive()) : ?> 
<option value="<?php echo $subcategory->getId(); ?>"<?php echo ($this->getRequest()->getQuery('category') == $subcategory->getId() ? ' selected="selected"': "") ?>><?php echo $subcategory->getName(); ?></option> 
<?php endif; endforeach; ?> 
<?php elseif($_category->getIsActive()): ?> 
<option value="<?php echo $_category->getId(); ?>"><?php echo $_category->getName();?></option> 
<?php endif; ?> 
<?php endforeach ?> 
</select> 
</li> 

同上,你可以添加为产品名称过滤器还改变...