2009-03-03 19 views
10

Quiero crear una página en Magento que muestra una representación visual de las categorías .. ejemplo¿Cómo obtener un listado de categorías de Magento?

CATEGORY 
product 1 
product 2 

ANOTHER CATEGORY 
product 3 

Mi problema es que su base de datos está organizada de manera muy diferente a lo que he visto en el pasado. Tienen tablas dedicadas a tipos de datos como varchar, int, etc. Supongo que esto es por rendimiento o similar.

No he encontrado una manera de utilizar MySQL para consultar la base de datos y obtener una lista de categorías. Luego me gustaría asociar estas categorías a productos para obtener una lista de productos para cada categoría. Desafortunadamente, Magento parece hacer esto muy difícil.

Además, no he encontrado un método que funcione desde dentro de un bloque de página. He creado showcase.phtml y lo puse en el diseño XML y muestra y ejecuta su código PHP. Esperaba algo fácil, como pasar por $this->getAllCategories() y luego un bucle anidado dentro con algo así como $category->getChildProducts().

¿Alguien me puede ayudar?

Respuesta

5

Hola something like this podría ayudarte, lo he adaptado un poco para responder a tu pregunta más específicamente.

$h3h3=Mage::getModel('catalog/category')->load(5); // YOU NEED TO CHANGE 5 TO THE ID OF YOUR CATEGORY 


$h3h3=$h3h3->getProductCollection(); 


foreach($h3h3->getAllIds() as $lol) 
{ 
    $_product=Mage::getModel('catalog/product')->load($lol); 

    print $_product->getName()."<br/>"; 

} 
16

De código que se encuentra en una clase relacionada con SEO (Mage_Catalog_Block_Seo_Sitemap_Category)

$helper  = Mage::helper('catalog/category'); 
$collection = $helper->getStoreCategories('name', true, false); 
$array  = $helper->getStoreCategories('name', false, false); 

tratar de olvidar que se trata de una base de datos que ha de encender su tienda, y en lugar de concentrarse en el uso de los objetos que el sistema de Magento ofrece.

Por ejemplo, no tenía ni idea de cómo obtener una lista de categorías. Sin embargo, yo grepped a través de la base de código de Mage con

grep -i -r -E 'class.+?category' 

cual devuelve una lista de alrededor de 30 clases. Desplazándolos a través de ellos, fue relativamente fácil adivinar qué objetos podrían tener métodos o necesitar realizar llamadas a métodos que atraparían las categorías.

+0

No estoy seguro de cómo se puede utilizar realmente la colección o matriz resultante para obtener los nombres o url's de categorías. Los datos que necesito se almacenan en las claves "_data: protected" del resultado. ¿Podrías elaborar? –

+0

@Martijn http://stackoverflow.com/questions/1005394/magento-show-custom-attributes-in-grouped-product-table/1005474#1005474 –

+0

Mi pregunta es, si esto es útil en el archivo del módulo de administración, para cargar listado de categoría? – Mufaddal

0

Muchas gracias. Realmente ayuda. Para conseguir el juego, hacer un bucle y luego getName()

foreach ($collection as $cat): 

    echo $cat->getName(); 

endforeach; 
3

Adapté esto desde Paul Whipp's website:

SELECT e.entity_id AS 'entity_id', vn.value AS 'name' 
FROM catalog_category_entity e 
LEFT JOIN catalog_category_entity_varchar vn 
ON e.entity_id = vn.entity_id AND vn.attribute_id = 33 
ORDER BY entity_id; 

Esto le proporcionará la categoría ID de catálogo.

0

He utilizado este en /app/design/frontend/default/default/template/catalog/product/feature.xml

<?php 
/** 
* Home page Featured Product list template 
* 
* @see Mage_Catalog_Block_Product_List 
*/ 
?> 
<?php 
if (!is_null($this->_productCollection)) { 
    $_origCollection = $this->_productCollection; 
    $this->setCollection(null); 
} 
$this->setCategoryId(16); 
$_productCollection=$this->getLoadedProductCollection() ?> 
<?php if($_productCollection->count()): ?> 
<div class="featured-products"> 
    <h2><?php echo $this->__('Featured Products') ?></h2> 
    <?php foreach ($_productCollection as $_product): ?> 
     <div> 
      <a href="<?php echo $_product->getProductUrl() ?>" title="<?php echo $this->htmlEscape($_product->getName()) ?>"> 
       <img src="<?php echo $this->helper('catalog/image')->init($_product, 'small_image')->resize(150, 50); ?>" alt="<?php echo $this->htmlEscape($this->getImageLabel($_product, 'small_image')) ?>" /> 
       <h3 class="product-name"><?php echo $this->htmlEscape($_product->getName())?></h3> 
       <?php echo nl2br($this->htmlEscape($_product->getShortDescription())) ?> 
      </a> 
     </div> 
    <?php endforeach; ?> 
</div> 
<?php endif; ?> 
0

hice este pequeño vídeo sobre cómo creo categoría personalizada lista de bloques con Magento . Estoy seguro de que hay mejores formas de lograr esto o incluso algo que podría haber hecho mejor, pero es solo mi método. Solo lo creé con la esperanza de que ayude a explicar algunas cosas a algunas personas.

Magento Custom Category Listing Tutorial

0

categoría bloque de la lista:

<?php 
$categories = Mage::getModel('catalog/category')->load(2)->getChildren(); 
$catIds = explode(',',$cats); 
?> 
<ul> 
<?php foreach($catIds as $catId): ?> 
    <li> 
     <?php 
      $category = Mage::getModel('catalog/category')->load($catId); 
      echo $category->getName(); 

      $subCats = Mage::getModel('catalog/category')->load($category->getId())->getChildren(); 
      $subCatIds = explode(',',$subCats); 
     ?> 
      <?php if(count($subCatIds) > 1):?> 
       <ul> 
       <?php foreach($subCatIds as $subCat) :?> 
        <li> 
        <?php 
         $subCategory = Mage::getModel('catalog/category')->load($subCat); 
         echo $subCategory->getName(); 
        ?> 
        </li> 
       <?php endforeach;?> 
       </ul> 
      <?php endif; ?> 
    </li> 
<?php endforeach; ?> 
</ul> 
2

Aquí está un ejemplo rápido

$categories = Mage::getModel('catalog/category')->getCollection() 
    ->addAttributeToSelect('name') 
    ->addAttributeToSelect('url_key') 
    ->addAttributeToSelect('my_attribute') 
    ->setLoadProductCount(true) 
    ->addAttributeToFilter('is_active',array('eq'=>true)) 
    ->load(); 
Cuestiones relacionadas