web-dev-qa-db-fra.com

Comment obtenir une liste de catégories de Magento?

Je souhaite créer une page dans Magento qui présente une représentation visuelle des catégories. Exemple

CATEGORY
 product 1
 product 2

ANOTHER CATEGORY
 product 3

Mon problème est que leur base de données est organisée très différemment de ce que j'ai vu dans le passé. Ils ont des tables dédiées aux types de données comme varchar, int, etc. Je suppose que cela concerne les performances ou similaires.

Je n'ai pas trouvé de moyen d'utiliser MySQL pour interroger la base de données et obtenir une liste de catégories. Je voudrais ensuite faire correspondre ces catégories aux produits, pour obtenir une liste de produits pour chaque catégorie. Malheureusement, Magento semble rendre cela très difficile.

De plus, je n'ai pas trouvé de méthode qui puisse fonctionner à partir d'un bloc de page. J'ai créé showcase.phtml et je l'ai placé dans la présentation XML. Il affiche et exécute son code PHP. J'espérais quelque chose de facile comme faire une boucle avec $this->getAllCategories() et une boucle imbriquée à l'intérieur avec quelque chose comme $category->getChildProducts().

Quelqu'un peut-il m'aider?

10
alex

À partir du code trouvé dans une classe liée au référencement (Mage_Catalog_Block_Seo_Sitemap_Category)

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

Essayez d'oublier que c'est une base de données qui alimente votre magasin, mais concentrez-vous plutôt sur l'utilisation des objets fournis par le système Magento.

Par exemple, je ne savais pas comment obtenir une liste de catégories. Cependant, j'ai parcouru la base de code Mage avec

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

Ce qui a retourné une liste d'environ 30 classes. En les parcourant, il était relativement facile de deviner quels objets pouvaient avoir des méthodes ou avaient besoin de faire des appels de méthodes pour saisir les catégories.

16
Alan Storm

Hey quelque chose comme ceci pourrait t'aider, je l'ai légèrement adapté pour répondre à ta question plus précisément.

 $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/>";

}
5
Robin

J'ai adapté cela à partir de le site de Paul Whipp :

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;

Cela vous fournira les identifiants de catégorie du catalogue.

3
sws

Voici un exemple rapide

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

J'ai réalisé cette petite vidéo sur la création de blocs de listage de catégories personnalisées avec Magento. Je suis sûr qu'il y a de meilleures façons de réaliser ceci ou même quelque chose que j'aurais pu mieux faire, mais c'est juste ma méthode. Je l’ai seulement créé dans l’espoir que cela aide à expliquer certaines choses à certaines personnes.

Didacticiel de référencement dans les catégories personnalisées Magento

0
Devin R. Olsen

Merci beaucoup. Aide vraiment. Pour obtenir le jeu, faites une boucle puis getName ()

foreach ($collection as $cat):

    echo $cat->getName();

endforeach;
0
bhoot

Je l'ai utilisé dans /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
Nikola

catégorie bloc annonce:

<?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>
0
Pooja maheshwari