2009-01-18 16 views

Respuesta

7

lo que terminó haciendo es en app/design/frontend/default/nombre_tema/template/catalog/producto/list_random.phtml

hacer algo como:

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

esto le ayudará a una matriz de id. de producto Puede recorrer a través de ellos y crear productos sobre la marcha usando:

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

a continuación, crear un bloque estático en el CMS con el siguiente contenido

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

Por último, en el Catalogo-> Administrar sección de categorías , elegir la categoría, luego en la pestaña configuración de la pantalla. Cambiar el modo de visualización a "bloque y productos estático" y luego elija su bloque de la lista desplegable.

Y eso debería hacerlo.

+1

sólo una nota: el código anterior obtendrá todos los productos de las categorías y subcategorías actuales. Debe ser bastante trivial para que sea sólo la categoría actual. –

+0

Nota: NO debe incluir "lógica compleja" en el archivo de plantilla. Debería crear BLOCK con un método específico para recuperar productos filtrados que se usarían en la plantilla.También debe usar el método @chapagain o 'Mage_Catalog_Model_Category :: getProductCollection()' que es básicamente el mismo, pero también agrega el filtro STORE VIEW. – xyz

2

Debe crear una instancia de un modelo llamando al Mage::getModel('catalog/product') en este caso porque luego obtiene una instancia de objeto configurado, extendido por cualquier módulo configurado.

Si lo haces así new Mage_Catalog_Model_Product() esto hará caso de módulos sin pasar por el API de Magento.

18

Aquí está el código para obtener productos de cualquier categoría en particular: -

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

Es, básicamente, cargar hasta la categoría, obtener la colección de productos y luego filtrar adecuadamente.

$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

Tal vez la mejor solución aquí, sin embargo, sería aún mejor si incluye aquí la respuesta completa con el código. En caso de que la URL alguna vez deje de funcionar. – todd

+1

Josh: @todd tiene razón. publica tu respuesta aquí. –

+0

Esta solución es probablemente más eficiente que la respuesta aceptada ya que no tiene que pasar por toda la gama de productos, solo aquellos que pertenecen a esa categoría. – 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/>'; 
     } 

Esto es, con mucho, el código conveniente con el fin de buscar detalles de productos de category.Hope perticular te ayuda.

0

Este código le ayudará a obtener productos de id de categoría 2. Y también aquí utiliza un archivo de plantilla list_home.phtml para la lista de productos.

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