2008-11-07 15 views
14

Est-ce que quelqu'un sait comment je peux obtenir une liste de produits appartenant à une catégorie spécifique à partir d'un fichier de vue dans Magento?Produits Magento par catégories

+0

voulez-vous dire "megento" ou "magnéto"? les deux sont utilisés dans votre question et tags –

+0

Correction magneto -> magento –

Répondre

8

Tout dépend de la vue que vous êtes. ;-)

Tout d'abord, je l'espère, vous êtes resté au sein de votre ensemble de modèles (par défaut dans mon exemple).

utiliser comme un exemple :

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

J'utilise le code ci-dessus pour afficher les catégories sœurs dans mon modèle - ce n'est pas idéal, mais il fonctionne.

C'est un peu un hack parce que je n'ai pas encore eu le temps d'apprendre toute la folie XML de mise en page. Sinon, si vous utilisez les XML, vous devez garder à l'esprit - tout dépend de l'endroit où vous vous trouvez. signifie le fichier de modèle et essentiellement aussi la mise en page (en termes de app/design/interface/default/default/layout/*).

Je sais que ce n'est pas beaucoup, mais j'espère que cela vous aidera à démarrer.

7

Voici le code pour obtenir des produits d'une catégorie particulière. Vous pouvez également utiliser ce fichier dans la vue.

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

Vous pouvez utiliser l'objet magento pour filtrer.

Exemple:

$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

Vous pouvez également utiliser '' '$ currentCategory = Mage :: registry ('current_category');' '' – iamjonesy

0

Vous devriez toujours éviter le code comme mettre cela en vue, il est très mauvaise pratique. Vous pouvez également rencontrer des problèmes car les vues peuvent être mises en cache, entraînant un comportement inattendu.

vous devez remplacer le bloc que vous utilisez en y plaçant du code. Vous pouvez ensuite appeler de nouvelles méthodes dans vos fichiers de vue.

par exemple, vous pouvez copier Mage_Catalog_Block_Product_List

de: app/code/core/Catalogue/Bloc/Produit/list.php

à: app/code/local/Catalogue/Bloc/Produit/List.php

Vous pouvez ensuite ajouter une nouvelle méthode, éventuellement en utilisant une partie du code mentionné dans les messages ci-dessus. votre nouvelle méthode serait alors disponible dans votre fichier de vue (list.phtml ou n'importe quelle vue utilisant ce bloc)

3

J'avais à peu près besoin de la même chose. Voici comment je l'ai fait:

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

Espérons que cela aide.

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 pour réviser 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 } ?> 
Questions connexes