Как получить список категорий от Magento? - PullRequest
10 голосов
/ 03 марта 2009

Я хочу создать страницу в Magento, которая показывает визуальное представление категорий .. пример

CATEGORY
 product 1
 product 2

ANOTHER CATEGORY
 product 3

Моя проблема в том, что их база данных организована совсем не так, как я видел в прошлом. У них есть таблицы, предназначенные для типов данных, таких как varchar, int и т. Д. Я предполагаю, что это для производительности или аналогичных.

Я не нашел способа использовать MySQL для запроса базы данных и получения списка категорий. Затем я хотел бы сопоставить эти категории с продуктами, чтобы получить список продуктов для каждой категории. К сожалению, Magento, кажется, делает это очень сложно.

Также я не нашел метод, который будет работать внутри блока страницы. Я создал showcase.phtml и поместил его в макет XML, и он отображает и запускает свой код PHP. Я надеялся на что-то простое, например, перебрать $this->getAllCategories(), а затем вложенный цикл внутри что-то вроде $category->getChildProducts().

Кто-нибудь может мне помочь?

Ответы [ 8 ]

16 голосов
/ 05 марта 2009

Из кода, найденного в связанном с SEO классе (Mage_Catalog_Block_Seo_Sitemap_Category)

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

Постарайтесь забыть, что это база данных, которая питает ваш магазин, и вместо этого сконцентрируйтесь на использовании объектов, которые предоставляет система Magento.

Например, я понятия не имел, как получить список категорий. Тем не менее, я просмотрел кодовую базу Mage с помощью

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

Который возвратил список из примерно 30 классов. Прокручивая их, было относительно легко угадать, какие объекты могут иметь методы или должны вызывать методы, которые бы захватывали категории.

5 голосов
/ 04 марта 2009

Эй что-то вроде этого может помочь вам, я немного адаптировал его, чтобы более конкретно ответить на ваш вопрос.

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

}
3 голосов
/ 06 апреля 2010

Я адаптировал это с сайта Пола Уиппа :

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;

Это предоставит вам идентификаторы категории каталога.

2 голосов
/ 19 ноября 2011

Вот краткий пример

$categories = Mage::getModel('catalog/category')->getCollection()  
    ->addAttributeToSelect('name')
    ->addAttributeToSelect('url_key')
    ->addAttributeToSelect('my_attribute')
    ->setLoadProductCount(true)
    ->addAttributeToFilter('is_active',array('eq'=>true))
    ->load();
0 голосов
/ 08 июля 2010

категория Листинг блока:

<?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 голосов
/ 01 июня 2010

Я снял это небольшое видео о том, как создавать пользовательские блоки списков категорий с помощью Magento. Я уверен, что есть лучшие способы достижения этого или даже чего-то, что я мог бы сделать лучше, но это только мой метод. Я создал его только в надежде, что это поможет кое-кому объяснить что-то там.

Учебник по списку пользовательских категорий Magento

0 голосов
/ 27 апреля 2010

Я использовал это в /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 голосов
/ 01 августа 2009

Спасибо большое. Действительно помогает. Чтобы получить игру, сделайте цикл, а затем getName ()

foreach ($collection as $cat):

    echo $cat->getName();

endforeach;
...