如何从Magento获取类别列表?

问题描述:

我想创建Magento的一个页面,显示该类别的可视化表示..例如如何从Magento获取类别列表?

CATEGORY 
product 1 
product 2 

ANOTHER CATEGORY 
product 3 

我的问题是,他们的数据库是非常不同的,以我过去见过的组织。他们有专门的数据类型表,如varchar,int等。我认为这是用于性能或类似的。

我还没有找到一种方法来使用MySQL来查询数据库并获取类别列表。然后,我想将这些类别与产品进行匹配,以获取每个类别的产品列表。不幸的是,Magento似乎使这非常困难。

此外,我还没有找到一种方法,将在一个页块内工作..我创建了showcase.phtml并将其放入XML布局,它显示并运行其PHP代码。我希望能够像$this->getAllCategories()一样循环,然后在内部嵌入循环,像$category->getChildProducts()

任何人都可以帮助我吗?

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

} 

中的代码对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的系统提供的对象中。

例如,我不知道如何获得类别列表。然而,我通过法师代码库greffped

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

哪个返回了大约30个类的列表。滚动浏览这些内容时,猜测哪些对象可能有方法或需要进行方法调用来获取类别相对容易。

+0

我不知道你怎么能实际使用所产生的集合或数组来获取名称或类别的网址。我需要的数据存储在结果的“_data:protected”键中。你能详细说明一下吗? – 2009-06-30 10:14:16

非常感谢。真的有帮助。拿到游戏,做一个循环,然后的getName()

foreach ($collection as $cat): 

    echo $cat->getName(); 

endforeach; 

我适应这个从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。

我用这个在/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; ?> 

我做了我如何创建自定义类上市与Magento的块这个小视频。 我相信有更好的方法来实现这一点,甚至可以做得更好,但这只是我的方法。我只是创建了它,希望它能帮助解释某些人的某些事情。

Magento Custom Category Listing Tutorial

类别清单块:

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

这里有一个简单的例子

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