簡體   English   中英

我想按名稱和類別ID搜索magento中的產品

[英]i want to search product in magento by name and category 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>';
}

請指導我該怎么做

您可以使用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>';
}

我沒有關於magento的知識,但是這段代碼可以在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();

也許下面的代碼可以幫助您:

$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.'%'));
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>

與上述相同,您還可以為商品名稱過濾器添加更改...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM