Как получить список категорий из Magento?
Я хочу создать страницу в Magento, которая показывает визуальное представление категорий. example
CATEGORY
product 1
product 2
ANOTHER CATEGORY
product 3
Моя проблема заключается в том, что их база данных организована очень по-разному с тем, что я видел в прошлом. У них есть таблицы, посвященные типам данных типа varchar, int и т.д. Я предполагаю, что это для производительности или аналогичного.
Я не нашел способ использовать MySQL для запроса базы данных и получения списка категорий. Затем я хотел бы сопоставить эти категории с продуктами, чтобы получить список продуктов для каждой категории. К сожалению, Magento, похоже, делает это очень сложно.
Также я не нашел метод, который будет работать из блока страниц. Я создал showcase.phtml и поместил его в макет XML, и он отображает и запускает свой PHP-код. Я надеялся на что-то легкое, как цикл через $this->getAllCategories()
, а затем вложенную петлю внутри с чем-то вроде $category->getChildProducts()
.
Может ли кто-нибудь мне помочь?
Ответы
Ответ 1
Из кода, найденного в связанном с 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 классов. Прокручивая их, было относительно легко угадать, какие объекты могут иметь методы или же нужно делать вызовы методов, которые будут захватывать категории.
Ответ 2
Привет, что-то вроде этого может вам помочь, я немного адаптировал его, чтобы более точно ответить на ваш вопрос.
$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
Я адаптировал это из веб-сайт 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;
Это предоставит вам идентификаторы категорий каталогов.
Ответ 4
Вот пример:
$categories = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect('name')
->addAttributeToSelect('url_key')
->addAttributeToSelect('my_attribute')
->setLoadProductCount(true)
->addAttributeToFilter('is_active',array('eq'=>true))
->load();
Ответ 5
Большое спасибо. Действительно помогает. Чтобы получить игру, сделайте цикл, а затем getName()
foreach ($collection as $cat):
echo $cat->getName();
endforeach;
Ответ 6
Я использовал это в /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; ?>
Ответ 7
Я сделал это маленькое видео о том, как я создаю блоки с личными списками категорий с Magento.
Я уверен, что есть лучшие способы достичь этого или даже что-то, что я мог бы сделать лучше, но это только мой метод. Я только создал это в надежде, что это поможет объяснить некоторые вещи там.
Учебное пособие по языковым настройкам Magento
Ответ 8
категория Листинг:
<?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>