【问题标题】:Magento: Display sub-category listMagento:显示子类别列表
【发布时间】:2023-03-16 20:45:01
【问题描述】:

我正在建立一个 Magento 商店,并希望能够显示一个类别列表并将每个类别链接到它自己的页面。

我有一个 ID 为 42 的“品牌”类别,我想显示一个子类别列表,并确保每个子类别都链接到 CMS 中指定的 URL 键。

有没有人用 Magento 做这件事的经验?

【问题讨论】:

    标签: php magento magento-1.9


    【解决方案1】:

    如果您愿意编辑您的主题,此代码 sn-p 将为您提供当前类别的所有子类别的列表(来自会话,因此这应该适用于您主题的任何位置)。我通常在 app/design/frontend/default/theme_name/template/catalog/category/view.phtml

    中使用它
    <?php
    $_category  = $this->getCurrentCategory(); 
    $collection = Mage::getModel('catalog/category')->getCategories($_category->entity_id);
    $helper     = Mage::helper('catalog/category');
    ?>
    
    <ul>
        <?php foreach ($collection as $cat):?>
                <?php if($_category->getIsActive()):?>
                    <?php 
                         $cur_category = Mage::getModel('catalog/category')->load($cat->getId());
                         $_img = $cur_category->getImageUrl();  
                    ?>
                    <li>
                        <a href="<?php echo $helper->getCategoryUrl($cat);?>">
                             <img src="<?php echo $_img?>" title="<?php echo $cat->getName();?>"/>
                             <cite><?php echo $cat->getName();?></cite>
                        </a>
                    </li>
                <?php endif?>
        <?php endforeach;?>
    </ul>
    

    【讨论】:

    • 谢谢 wookie,这就像一个魅力。只是出于好奇,我在 Magento 论坛上看到了许多建议使用 CMS 静态块链接到单独的 PHP 文件来实现此目的的主题 (magentocommerce.com/boards/viewthread/14527/P15)。对我来说,当我们可以轻松地将上面的代码添加到 view.phtml 文件中时,这似乎有点 OTT。您知道他们提出建议的原因吗?
    • 是的,我不确定你为什么要这样做。 magento 的部分问题在于,在自定义主题中做基本的事情非常困难,以至于人们最终会创建非常迟钝的解决方案,而不是使用易于访问的资源(但记录不充分)。
    • 这对 1.4 不起作用,我知道这一定是在 1.2 或 1.3 的时候发布的。Sid Vel 发布的以下扩展拯救了我的一天!
    【解决方案2】:

    如果您想显示顶级类别和子类别,您可以这样做..

    <?php $_helper = Mage::helper('catalog/category') ?>
    <?php $_categories = $_helper->getStoreCategories() ?>
    <?php $currentCategory = Mage::registry('current_category') ?>
    <?php if (count($_categories) > 0): ?>
    <ul>
        <?php foreach($_categories as $_category): ?>
            <li>
                <a href="<?php echo $_helper->getCategoryUrl($_category) ?>">
                    <?php echo $_category->getName() ?>
                </a>
                <?php $_category = Mage::getModel('catalog/category')->load($_category->getId()) ?>
                <?php $_subcategories = $_category->getChildrenCategories() ?>
                <?php if (count($_subcategories) > 0): ?>
                    <ul>
                        <?php foreach($_subcategories as $_subcategory): ?>
                            <li>
                                <a href="<?php echo $_helper->getCategoryUrl($_subcategory) ?>">
                                    <?php echo $_subcategory->getName() ?>
                                </a>
                            </li>
                        <?php endforeach; ?>
                    </ul>
                <?php endif; ?>
            </li>
        <?php endforeach; ?>
    </ul>
    <?php endif; ?>
    

    为了显示顶级类别和当前类别子类别,您可以这样做......

    <?php $_helper = Mage::helper('catalog/category') ?>
    <?php $_categories = $_helper->getStoreCategories() ?>
    <?php $currentCategory = Mage::registry('current_category') ?>
    <?php if (count($_categories) > 0): ?>
    <ul>
        <?php foreach($_categories as $_category): ?>
            <li>
                <a href="<?php echo $_helper->getCategoryUrl($_category) ?>">
                    <?php echo $_category->getName() ?>
                </a>
                <?php if ($currentCategory && $currentCategory->getId() == $_category->getId()): ?>
                    <?php $_category = Mage::getModel('catalog/category')->load($_category->getId()) ?>
                    <?php $_subcategories = $_category->getChildrenCategories() ?>
                    <?php if (count($_subcategories) > 0): ?>
                        <ul>
                            <?php foreach($_subcategories as $_subcategory): ?>
                                <li>
                                    <a href="<?php echo $_helper->getCategoryUrl($_subcategory) ?>">
                                        <?php echo $_subcategory->getName() ?>
                                    </a>
                                </li>
                            <?php endforeach; ?>
                        </ul>
                    <?php endif; ?>
                <?php endif; ?>
            </li>
        <?php endforeach; ?>
    </ul>
    <?php endif; ?>
    

    【讨论】:

    • 效果很好,谢谢!但是每个 sn-p 中的最后一个 &lt;?php endif; ?&gt; 没有正确缩进,因此被 SO 系统踢了。还有两个 & 符号被 html 转义。修复了这两个问题。再次感谢!
    【解决方案3】:

    这个问题需要很长的答案。我会为你指出正确的地方。

    1) 最好的解决方案是使用免费扩展。我没有尝试过,但它会适合目的。你必须做一些 CSS 来获得正确的外观和感觉。

    http://www.magentocommerce.com/extension/1562/magento-easy-catalog-images 演示:http://extension01.templates-master.com/gb/electronics.html

    2) 我不信任模块,因为如果供应商决定停止支持它,升级可能会变得困难。我已使用以下论坛主题中的信息创建了一个 vew 站点。看看......可能不是直截了当。您可能需要将核心文件的一些副本复制到本地目录。

    http://www.magentocommerce.com/boards/viewthread/3770/P30/

    希望对你有所帮助:)

    【讨论】:

    • 嘿,伙计,我希望我能将您的帖子提高 10 倍您提到的扩展名,从而节省了我自己开发它的无数小时。只是为了他人着想,ext 声明它适用于 1.3,但它在 1.4 上就像一个魅力。谢谢队友 SUPER THUMBS UP
    【解决方案4】:

    我制作了这个关于如何使用 Magento 创建自定义类别列表块的小视频。 我确信有更好的方法来实现这一点,甚至我可以做得更好,但这只是我的方法。我创建它只是希望它有助于向那里的某些人解释一些事情。

    Magento Custom Category Listing Block

    谢谢!

    【讨论】:

      【解决方案5】:

      在查看了 magento 网站上的所有解决方案后,我发现上述 wookiehangover 的解决方案有效,实施大约需要 8 秒。

      创建一个您可以设置样式的 UL。谢谢。

      【讨论】:

        【解决方案6】:

        创建静态块后,您可以通过此脚本获取任何子类别列表:

                $_helper = Mage::helper('catalog/category');
                $_category = Mage::getModel('catalog/category')->load(5);
                $_subcategories = $_category->getChildrenCategories();
        
                if (count($_subcategories) <= 0) { return; }
        
                $count = 0;
        
                foreach($_subcategories as $_category) {     
                                                              $category = Mage::getModel('catalog/category')->load($_category->getId());
        
                                                              $ret->{"object_".$count} ->url  = $_helper->getCategoryUrl($_category);
                                                              $ret->{"object_".$count} ->name = $_category->getName();
                                                              $ret->{"object_".$count} ->id =  $_category->getId(); 
                                                              $ret->{"object_".$count} ->image =   $category->getImageUrl();
                                                              $count++;
                                                           } 
        
                return $ret;                                          
        
                } 
        
        
        $list = list_subcategories(5);
        
        echo "<pre>"; print_r($list); echo "</pre>";
        ?>
        

        【讨论】:

          【解决方案7】:

          如何仅列出属于当前项目的类别。并非页面上的所有类别。

          但在树状视图中。

          类别 - 子类别 1 类别 2 - 子目录 1 - 子子目录 1

          BR 否决

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-02-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多