2008-11-07 21 views
14

Czy ktoś wie, jak mogę uzyskać listę produktów należących do określonej kategorii z pliku widoku w Magento?Produkty Magento według kategorii

+0

masz na myśli "megento" lub "Magneto"? oba są używane w twoim pytaniu i znacznikach –

+0

Naprawiono magneto -> magento –

Odpowiedz

8

Wszystko zależy od tego, na którym zobaczyć jesteś w. ;-)

Po pierwsze, mam nadzieję, że kiedyś w swoim zestawie szablonów (domyślnie w moim przykładzie).

Służy jako przykład:

<?php 
$_cat   = $this->getCurrentCategory(); 
$_parent  = $_cat->getParentCategory(); 
$_categories = $_parent->getChildren(); 

/* @var $category Mage_Catalog_Model_Category */ 
$collection = Mage::getModel('catalog/category')->getCollection(); 
/* @var $collection Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Collection */ 
$collection->addAttributeToSelect('url_key') 
    ->addAttributeToSelect('name') 
    ->addAttributeToSelect('is_anchor') 
    ->addAttributeToFilter('is_active', 1) 
    ->addIdFilter($_categories) 
    ->setOrder('position', 'ASC') 
    ->joinUrlRewrite() 
    ->load(); 

$productCollection = Mage::getResourceModel('catalog/product_collection'); 
$layer    = Mage::getSingleton('catalog/layer'); 
$layer->prepareProductCollection($productCollection); 
$productCollection->addCountToCategories($collection); 
// $productCollection should be ready here ;-) 
?> 

Używam powyższy kod, aby wyświetlić kategorię siostra w moim szablon - to nie jest idealne, ale to działa.

To trochę hack, ponieważ nie miałem jeszcze czasu, aby nauczyć się szaleństwa XML w układzie. W przeciwnym razie, jeśli używasz XML-ów, o których musisz pamiętać - wszystko zależy od tego, gdzie jesteś. Gdzie oznacza plik szablonu i zasadniczo także układ (pod względem app/design/frontend/default/default/layout/*).

Wiem, że to niewiele, ale mam nadzieję, że pomoże ci to zacząć.

7

Oto kod, aby uzyskać produkty z konkretnej kategorii. Możesz również użyć tego w widoku pliku.

// if you want to display products from current category 
$category = Mage::registry('current_category'); 

// if you want to display products from any specific category 
$categoryId = 10; 
$category = Mage::getModel('catalog/category')->load($categoryId); 

$productCollection = Mage::getResourceModel('catalog/product_collection') 
           ->addCategoryFilter($category); 

// printing products name 
foreach ($productCollection as $product) { 
    echo $product->getName(); 
    echo "<br />"; 
} 
21

Możesz użyć obiektu magento do filtrowania.

Przykład:

$categoryId = 123; // a category id that you can get from admin 
$category = Mage::getModel('catalog/category')->load($categoryId); 

$products = Mage::getModel('catalog/product') 
    ->getCollection() 
    ->addCategoryFilter($category) 
    ->load(); 

print_r($products); 
+0

Możesz również użyć '' 'currentCategory = Mage :: registry ('current_category');' '' – iamjonesy

0

Zawsze należy unikać umieszczania kodu tak do widzenia, to bardzo złą praktyką. Można również napotkać problemy, ponieważ widoki mogą być buforowane, co prowadzi do nieoczekiwanego zachowania.

należy zastąpić blok, którego używasz, umieszczając tam kod. możesz wywołać dowolne nowe metody wewnątrz plików widoku.

na przykład, można skopiować Mage_Catalog_Block_Product_List

od: app/code/core/Katalog/bloku/produktu/List.php

do: app/code/local/Katalog/bloku/produktu/List.php

możesz dodać nową metodę, prawdopodobnie używając kodu wymienionego w powyższych wpisach. Twoja nowa metoda byłaby wtedy dostępna w twoim pliku widoku (list.phtml lub dowolnym widoku korzystającym z tego bloku)

3

Prawie potrzebowałem tego samego. Oto, jak to zrobiłem:

$prod_whole = array(); 
if(!empty($_menu)) //$_menu = array of Categories with some basic info 
foreach($_menu as $v) 
{ 
    if($v['name']=='HOME') 
    continue; 

    $cat_id = $v['id']; 

    #/ Setup Products 
    $category = Mage::getModel('catalog/category')->load($cat_id); 

    $collection = Mage::getModel('catalog/product')->getCollection() 
    ->addAttributeToSelect('*') // select all attributes 
    ->addCategoryFilter($category) 
    ->setPageSize(8) // limit number of results returned 
    ->setCurPage(0) 
    ->load() 
    ; 


    $prod_collection = array(); 
    foreach ($collection as $product) 
    { 
     $prod_collection_1 = array(); 

     #/ Basic Info 
     $prod_collection_1['id'] = $product->getId(); 
     $prod_collection_1['name'] = $product->getName(); 
     $prod_collection_1['price'] = (float) $product->getPrice(); 
     //$prod_collection_1['desc'] = $product->getDescription(); 
     //$prod_collection_1['short'] = $product->getShortDescription(); 
     $prod_collection_1['type'] = $product->getTypeId(); 
     $prod_collection_1['status'] = $product->getStatus(); 
     $prod_collection_1['special_price'] = $product->getSpecialPrice(); 
     $prod_collection_1['direct_url'] = $product->getProductUrl(); 


     #/ getCategoryIds(); returns an array of category IDs associated with the product 
     foreach ($product->getCategoryIds() as $category_id) 
     { 
      $category = Mage::getModel('catalog/category')->load($category_id); 
      $prod_collection_1['parent_category'] = $category->getParentCategory()->getName(); 
      $prod_collection_1['category'] = $category->getName(); 
      //$prod_collection_1['category_idx'] = preg_replace('/[\s\'\"]/i', '_', strtolower(trim($prod_collection_1['category']))); 
      $prod_collection_1['category_id'] = $category->getId(); 
     } 

     #/gets the image url of the product 
     $prod_collection_1['img'] = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage(); 


     $prod_collection[] = $prod_collection_1; 

    }//end foreach..... 

    $prod_whole[$cat_id] = $prod_collection; 

}//end foreach categories....... 
//var_dump('<pre>', $prod_whole); 

Mam nadzieję, że to pomoże.

3
<?php 

    $category_id = 10; // if you know static category then enter number 

$catagory_model = Mage::getModel('catalog/category')->load($category_id); //where $category_id is the id of the category 



    $collection = Mage::getResourceModel('catalog/product_collection'); 

     $collection->addCategoryFilter($catagory_model); //category filter 

     $collection->addAttributeToFilter('status',1); //only enabled product 

     $collection->addAttributeToSelect(array('name','url','small_image')); //add product attribute to be fetched 

     //$collection->getSelect()->order('rand()'); //uncomment to get products in random order  

     $collection->addStoreFilter();   

     if(!empty($collection)) 

     { 

       foreach ($collection as $_product): 

       echo $_product->getName(); //get product name   

      endforeach; 

     }else 

      { 

       echo 'No products exists'; 

     }    

    ?> 
+0

thnx do zmiany mufaddal .. – Chiragit007

5
<?php 
$c_id = 2; 
$category = new Mage_Catalog_Model_Category(); 
$category->load($c_id); 
$collection = $category->getProductCollection(); 
$collection->addAttributeToSelect('*'); 
foreach ($collection as $_product) { ?> 
<a href="<?php echo $_product->getProductUrl(); ?>"><?php echo $_product->getName(); ?></a> 
<?php } ?>