2009-01-18 7 views

Répondre

7

ce que je fini par faire est app/design/frontend/default/theme_name/modèle/catalogue/produit/list_random.phtml

faire quelque chose comme:

<?php 
$_categories=$this->getCurrentChildCategories(); 

$_category = $this->getCurrentCategory(); 
$subs = $_category->getAllChildren(true); 
$result = array(); 
foreach($subs as $cat_id) { 
    $category = new Mage_Catalog_Model_Category(); 
    $category->load($cat_id); 
    $collection = $category->getProductCollection(); 
    foreach ($collection as $product) { 
     $result[] = $product->getId(); 
    } 

} 
shuffle($result); 
?> 

cela, vous obtiendrez une tableau d'identification de produit. Vous pouvez faire une boucle à travers eux et créer des produits à la volée en utilisant:

<?php 
$i=0; 
foreach ($result as $_product_id){ 
    $i++; 
    $_product = new Mage_Catalog_Model_Product(); 
    $_product->load($_product_id); 
    //do something with the product here 
}?> 

puis, créez un bloc statique dans le CMS avec le contenu suivant

{{block type="catalog/navigation" template="catalog/product/list_random.phtml"}} 

Enfin, dans la Catalog-> section Gérer les catégories , choisissez la catégorie, puis l'onglet des paramètres d'affichage. Passez le mode d'affichage sur "Bloc statique et produits", puis choisissez votre bloc dans la liste déroulante.

Et cela devrait le faire.

+1

juste une note: le code ci-dessus obtenir tous les produits des catégories actuelles et sous. Il devrait être assez trivial de ne faire que la catégorie actuelle. –

+0

Remarque: vous ne devez PAS inclure de "logique complexe" dans le fichier modèle. Vous devez créer BLOCK avec une méthode spécifique pour récupérer les produits filtrés qui seront utilisés dans le modèle.Aussi, vous devriez utiliser la méthode @chapagain ou 'Mage_Catalog_Model_Category :: getProductCollection()' qui est fondamentalement la même chose, mais qui ajoute aussi le filtre STORE VIEW. – xyz

2

Vous devez instancier un modèle en appelant Mage::getModel('catalog/product') dans ce cas car vous obtenez alors une instance d'objet configurée, étendue par tous les modules configurés.

Si vous le faites comme new Mage_Catalog_Model_Product() cela va ignorer les modules et contourner l'API Magento.

18

Voici le code pour obtenir des produits de toute catégorie particulière: -

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

Vous chargez essentiellement la catégorie, obtenez la collection de produits, puis filtrer de manière appropriée.

$products = Mage::getModel('catalog/category')->load($category_id) 
->getProductCollection() 
->addAttributeToSelect('*') 
->addAttributeToFilter('status', 1) 
->addAttributeToFilter('visibility', 4) 
->addAttributeToFilter('special_price', array('neq' => "")) 
->setOrder('price', 'ASC') 
; 
+1

Peut-être la meilleure solution ici, mais ce serait encore mieux si vous incluez la réponse complète ici avec le code. Juste au cas où l'URL ne fonctionnerait jamais. – todd

+1

Josh: @todd a raison. Postez votre réponse ici. –

+0

Cette solution est probablement plus efficace que la réponse acceptée car elle ne doit pas passer par toute la gamme de produits, seulement ceux appartenant à cette catégorie. Les liens – dayuloli

3
$products = Mage::getModel('catalog/category')->load(category_id); //put your category id here 
     $productslist = $products->getProductCollection()->addAttributeToSelect('*'); 
     foreach($productslist as $product) 
     { 
     echo 'price: ' . $product->getPrice() . '<br/>'; 
     } 

C'est de loin le code pratique pour récupérer les détails du produit de category.Hope perticular il vous aide.

0

Ce code vous aidera à obtenir produits de catégorie ID 2. Et aussi ici utilise un fichier modèle list_home.phtml pour la liste des produits.

echo $this->getLayout()->createBlock("catalog/product_list") 
    ->setCategoryId(2)->setTemplate("catalog/product/list_home.phtml")->toHtml(); 

list_home.phtml

<?php 
$this->getChild('toolbar')->setCurrentMode('list'); //uses list mode 
$_productCollection = $this->getLoadedProductCollection(); 
$_helper = $this->helper('catalog/output'); 
    ?> 

    <?php if (!$_productCollection->count()): ?> 
     <p class="note-msg"><?php echo $this->__('There are no products matching the selection.') ?></p> 
    <?php else: ?> 

--use code for listing--- 
Questions connexes