2008-11-07 15 views
14

Weiß jemand, wie ich eine Liste von Produkten, die zu einer bestimmten Kategorie gehören, aus einer Ansichtsdatei in Magento bekommen kann?Magento Produkte nach Kategorien

+0

meinst du mit "megento" oder "Magneto"? beide sind in Ihrer Frage und Tags –

+0

Fixed Magneto -> Magento –

Antwort

8

Es hängt alles davon ab, welche Ansicht Sie sind in. ;-)

Zunächst einmal, ich hoffe, dass Sie in Ihrem Template-Set (Standard in meinem Beispiel) geblieben.

verwenden als Beispiel:

<?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 ;-) 
?> 

ich den obigen Code bin mit meiner Vorlage Schwester Kategorien anzuzeigen - es ist nicht ideal, aber es funktioniert.

Es ist eine Art von Hack, weil ich noch keine Zeit hatte, um alle Layout-XML-Wahnsinn zu lernen. Andernfalls, wenn Sie die XML-Dateien verwenden, müssen Sie sich daran erinnern - alles hängt davon ab, wo Sie gerade sind. Dabei steht für die Vorlagendatei und im Wesentlichen auch für das Layout (in Bezug auf app/design/frontend/default/default/layout/*).

Ich weiß, es ist nicht viel, aber ich hoffe, es hilft, um loszulegen.

7

Hier ist der Code, um Produkte aus einer bestimmten Kategorie zu erhalten. Sie können diese Datei auch in der Ansicht verwenden.

// 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

Sie können das Magento-Objekt zum Filtern verwenden.

Beispiel:

$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

Sie können auch '' $ currentCategory = Mage :: Registrierung ('current_category'); '' – iamjonesy

0

Sie sollten immer vermeiden Code wie folgt in eine Sicht setzen, ist es sehr schlechte Praxis. Sie können auch Probleme feststellen, da Sichten zwischengespeichert werden können, was zu unerwartetem Verhalten führt.

Sie sollten den Block, den Sie verwenden, außer Kraft setzen und Code dort eingeben. Sie können dann neue Methoden in Ihren Ansichtsdateien aufrufen.

zum Beispiel, könnten Sie Mage_Catalog_Block_Product_List kopieren

aus: app/code/core/Katalog/Block/Produkt/list.php

zu: app/code/local/Katalog/Block/Produkt/List.php

Sie könnten dann eine neue Methode hinzufügen, möglicherweise mit einigen der in den oben genannten Posts erwähnten Code. Ihre neue Methode wäre dann in Ihrer Ansichtsdatei (list.phtml oder eine beliebige Ansicht, die diesen Block verwendet) verfügbar

3

Ich brauchte ziemlich genau das Gleiche. Hier ist, wie ich es getan habe:

$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); 

Ich hoffe, dies hilft.

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 für die Revision 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 } ?>