2009-01-18 7 views

Antwort

7

, was ich tun gelandet ist in app/design/frontend/default/theme_name/template/catalog/product/list_random.phtml

so etwas wie tun:

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

das Sie eine bekommen Array von Produkt-IDs. Sie können durch sie Schleife und schaffen Produkte on the fly mit:

<?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 
}?> 

dann erstellen Sie einen statischen Block in den cms mit folgendem Inhalt

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

im Catalog- Schließlich> Manage Abschnitt Kategorien Wählen Sie die Kategorie und dann die Registerkarte für die Anzeigeeinstellungen. Schalten Sie den Anzeigemodus auf "Statischer Block und Produkte" und wählen Sie dann Ihren Block aus der Dropdown-Liste.

Und das sollte es tun.

+1

nur eine Anmerkung: der oben genannte Code wird alle Produkte aus den aktuellen und den Unter Kategorien. Es sollte ziemlich trivial sein, es nur zur aktuellen Kategorie zu machen. –

+0

Hinweis: Sie sollten nicht „komplexe Logik“ in Template-Datei enthalten. Sie sollten BLOCK mit einer bestimmten Methode zum Abrufen von gefilterten Produkten erstellen, die in der Vorlage verwendet werden.Außerdem sollten Sie die Methode @chapagain oder 'Mage_Catalog_Model_Category :: getProductCollection()' verwenden, die im Prinzip die gleiche ist, aber auch den Filter STORE VIEW enthält. – xyz

2

sollten Sie ein Modell instanziiert von Mage::getModel('catalog/product') in diesem Fall fordern, weil Sie dann eine konfigurierte Objektinstanz erhalten, mit allen konfigurierten Module erweitert.

Wenn Sie es wie new Mage_Catalog_Model_Product() tun dies wird Module ignorieren und umgehen die Magento-API. Hier

18

ist der Code zu bekommen Produkte aus einer bestimmten Kategorie: -

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

Sie im Grunde die Kategorie laden, erhält die Sammlung Produkt und dann entsprechend filtern.

$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

Vielleicht die beste Lösung hier, aber es wäre noch besser, wenn Sie die vollständige Antwort hier mit Code enthalten würden. Nur für den Fall, dass die URL nicht mehr funktioniert. – todd

+1

Josh: @ Todd hat Recht. posten Sie Ihre Antwort hier. –

+0

Diese Lösung ist wahrscheinlich effizienter als die akzeptierte Antwort, da sie nicht die gesamte Produktpalette durchlaufen muss, nur diejenigen, die zu dieser Kategorie gehören. – 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/>'; 
     } 

Dies ist bei weitem der bequemen Code, um Produktdetails von perticular category.Hope es hilft Ihnen zu holen.

0

Mit diesem Code erhalten Sie Produkte von Kategorie ID 2. Und auch hier verwendet eine Vorlagendatei list_home.phtml für die Produktliste.

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