Как получить список категорий из Magento?

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

CATEGORY product 1 product 2 ANOTHER CATEGORY product 3 

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

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

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

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

Из кода, найденного в связанном с 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.

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

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

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

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

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

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

 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; 

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

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

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

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

 foreach ($collection as $cat): echo $cat->getName(); endforeach; 

Я использовал это в /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; ?> 

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

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

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

Учебное пособие по языковым настройкам Magento