2009-03-03 20 views
10

Voglio creare una pagina in Magento che mostra una rappresentazione visiva delle categorie .. esempioCome ottenere un elenco di categoria da Magento?

CATEGORY 
product 1 
product 2 

ANOTHER CATEGORY 
product 3 

Il mio problema è, il loro database è organizzato in modo molto diverso da quello che ho visto in passato. Hanno tabelle dedicate a tipi di dati come varchar, int, ecc. Presumo che questo sia per prestazioni o simili.

Non ho trovato un modo per utilizzare MySQL per interrogare il database e ottenere un elenco di categorie. Mi piacerebbe quindi abbinare queste categorie ai prodotti, per ottenere un elenco di prodotti per ogni categoria. Sfortunatamente Magento sembra rendere questo molto difficile.

Inoltre non ho trovato un metodo che funzioni da un blocco di pagina .. Ho creato showcase.phtml e lo metto nel layout XML e visualizza ed esegue il suo codice PHP. Speravo in qualcosa di semplice come il ciclo di $this->getAllCategories() e poi un ciclo annidato all'interno con qualcosa come $category->getChildProducts().

Qualcuno può aiutarmi?

risposta

5

Ehi something like this potrebbe aiutarti, l'ho adattato leggermente per rispondere alla tua domanda in modo più specifico.

$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

Da codice trovato in una classe correlata SEO (Mage_Catalog_Block_Seo_Sitemap_Category)

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

cercare di dimenticare che si tratta di un database che sta alimentando il tuo negozio, e invece concentrarsi su utilizzando gli oggetti che il sistema Magento fornisce.

Ad esempio, non avevo idea di come ottenere un elenco di categorie. Tuttavia, ho grepped attraverso il codebase Mage con

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

che ha restituito un elenco di circa 30 classi. Scorrendo tra questi, è stato relativamente facile indovinare quali oggetti potrebbero avere metodi o necessità di effettuare chiamate di metodo che catturerebbero le categorie.

+0

io non sono sicuro di come si può effettivamente utilizzare la raccolta o la matrice risultante per ottenere i nomi o url di categorie. I dati che mi servono sono memorizzati nelle chiavi "_data: protected" del risultato. Potresti elaborare? –

+0

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

+0

La mia domanda è, se questo è utile nel file del modulo di amministrazione, per caricare elenco di categoria? – Mufaddal

0

Grazie mille. Aiuta davvero Per ottenere il gioco, fare un ciclo e quindi getName()

foreach ($collection as $cat): 

    echo $cat->getName(); 

endforeach; 
3

mi sono adattato questo da 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; 

Questo vi forniremo con l'ID di categoria catalogo.

0

ho usato questo in /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

Ho fatto questo piccolo video su come creo categoria personalizzata messa in vendita di blocchi con Magento . Sono sicuro che ci sono modi migliori per ottenere questo o anche qualcosa che avrei potuto fare meglio, ma è solo il mio metodo. L'ho creato solo nella speranza che aiuti a spiegare qualcosa a qualcuno là fuori.

Magento Custom Category Listing Tutorial

0

categoria blocco annuncio:

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

Ecco un rapido esempio

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