我想在Magento中创建一个页面,显示类别的可视化表示。例如
CATEGORY
product 1
product 2
ANOTHER CATEGORY
product 3
我的问题是,他们的数据库组织方式与我过去看到的非常不同。他们有专门用于数据类型的表,如varchar,int等。我认为这是为了性能或类似。
我还没有找到使用MySQL查询数据库并获取类别列表的方法。然后,我想将这些类别与产品相匹配,以获得每个类别的产品列表。不幸的是,Magento似乎很难做到这一点。
此外,我还没有找到一个可以在页面块中工作的方法。我创建了showcase.phtml并将其放在XML布局中,它显示并运行其PHP代码。我希望通过$this->getAllCategories()
循环,然后使用类似$category->getChildProducts()
的内部嵌套循环来轻松实现。
任何人都可以帮助我吗?
答案 0 :(得分:16)
从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个班级的列表。滚动浏览这些,相对容易猜测哪些对象可能有方法或需要进行方法调用以获取类别。
答案 1 :(得分:5)
嘿something like this可能对你有所帮助,我已经稍微调整了一下,以便更具体地回答你的问题。
$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/>";
}
答案 2 :(得分:3)
我从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;
这将为您提供目录类别ID。
答案 3 :(得分:2)
这是一个简单的例子
$categories = Mage::getModel('catalog/category')->getCollection()
->addAttributeToSelect('name')
->addAttributeToSelect('url_key')
->addAttributeToSelect('my_attribute')
->setLoadProductCount(true)
->addAttributeToFilter('is_active',array('eq'=>true))
->load();
答案 4 :(得分:0)
非常感谢。真有帮助。要获得游戏,请创建一个循环然后getName()
foreach ($collection as $cat):
echo $cat->getName();
endforeach;
答案 5 :(得分:0)
我在/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; ?>
答案 6 :(得分:0)
我制作了一个关于如何使用Magento创建自定义类别列表块的小视频。 我相信有更好的方法可以实现这一点,甚至可以做得更好,但这只是我的方法。我只创造了它,希望它能帮助向某些人解释一些事情。
答案 7 :(得分:0)
类别列表块:
<?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>