10

我想在 Magento 中创建一个页面,显示类别的视觉表示.. 示例

CATEGORY
 product 1
 product 2

ANOTHER CATEGORY
 product 3

我的问题是,他们的数据库的组织方式与我过去看到的非常不同。他们有专门用于 varchar、int 等数据类型的表。我认为这是为了性能或类似的。

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

此外,我还没有找到可以在页面块内工作的方法。我创建了 showcase.phtml 并将其放入 XML 布局中,它会显示并运行其 PHP 代码。我希望有一些简单的东西,比如循环$this->getAllCategories(),然后在里面有一个嵌套循环,比如$category->getChildProducts().

谁能帮我?

4

8 回答 8

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 个类的列表。滚动浏览这些,相对容易猜测哪些对象可能具有方法或需要进行方法调用来获取类别。

于 2009-03-04T22:50:08.680 回答
5

,这样的事情可能会对你有所帮助,我已经稍微调整了它以更具体地回答你的问题。

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

}
于 2009-03-04T10:27:29.013 回答
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;

这将为您提供目录类别 ID。

于 2010-04-06T01:12:32.963 回答
2

这是一个简单的例子

$categories = Mage::getModel('catalog/category')->getCollection()  
    ->addAttributeToSelect('name')
    ->addAttributeToSelect('url_key')
    ->addAttributeToSelect('my_attribute')
    ->setLoadProductCount(true)
    ->addAttributeToFilter('is_active',array('eq'=>true))
    ->load();
于 2011-11-18T21:20:22.357 回答
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; ?>
于 2010-04-27T19:54:58.097 回答
0

I made this little video on how I create custom category listing blocks with Magento. I am sure there are better ways of achieving this or even something I could have done better, but it's just my method. I only created this it in hopes that it helps explain somethings to some people out there.

Magento Custom Category Listing Tutorial

于 2010-06-01T03:36:36.443 回答
0

非常感谢。真的很有帮助。要获取游戏,请循环然后 getName()

foreach ($collection as $cat):

    echo $cat->getName();

endforeach;
于 2009-08-01T08:09:10.523 回答
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>
于 2010-07-08T10:06:26.510 回答