【问题标题】:Programmatically add breadcrumbs paths in Magento?以编程方式在 Magento 中添加面包屑路径?
【发布时间】:2014-07-15 20:17:13
【问题描述】:

在 Magento 中,当用户直接访问产品页面时,例如从 Google 访问,面包屑只会是“主页”->“产品名称”。

How can I add categories in there even when users access the page directly from Google?

例如,在this page 上,我想在面包屑中添加类别“婚纱”和“婚纱”。除了硬编辑breadcrumbs.phtml之外,我想出了一个想法,但是有什么方法可以以编程方式在template/catalog/product/view.phtml中添加一个面包屑项?

我可以获取当前产品的类别(标题和链接),然后使用一些函数/方法以动态和编程的方式将它们添加到面包屑中。这可能吗?

【问题讨论】:

    标签: magento


    【解决方案1】:

    这是强制 Magento 显示完整面包屑的代码,包括通过循环遍历当前产品的每个类别的类别:

    © 丹尼·文斯

    <?php
    if ($product = Mage::registry('current_product')) {
        $categories = $product->getCategoryCollection()->load();
    
        if($categories) {
            foreach ($categories as $category)
            {
                if($category) {
                $category = Mage::getModel('catalog/category')->load($category->getId());
                break;
                }
            }
        }
        $lastCrumbName = $product->getName();
        $lastCategoryAdjust = 0;
    }
    else {
        if($category = Mage::registry('current_category')) {
        $lastCrumbName = $category->getName();
        }
        $lastCategoryAdjust = 1;
    }
    
    if($category) {
        if($path = $category->getPath()) {
            $path = explode('/', $path);
            $crumbs = array('home' => array('label' => 'Home',
            'title' => 'Home',
            'link' => Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB),
            'first' => true,
            'last' => false
            ));
            for($i = 2; $i < count($path) - $lastCategoryAdjust; $i++) {
                $cur_category = Mage::getModel('catalog/category')->load($path[$i]);
                if($cur_category && $cur_category->getIsActive()) {
                    $crumbs['category' . $path[$i]] = array('label' => $cur_category->getName(),
                    'title' => $cur_category->getName(),
                    'link' => $cur_category->getUrl(),
                    'first' => false,
                    'last' => false
                    );
                }
            }
            $crumbs['current'] = array('label' => $lastCrumbName,
            'title' => '',
            'link' => '',
            'first' => false,
            'last' => true
            );
        }
    }
    ?>
    

    【讨论】:

    • 谢谢 Jace,那么我应该把这个 sn-p 放在哪里呢?面包屑.phtml? view.phtml?
    • 此代码应添加到您的 breadcrumbs.phtml 文件的顶部,该文件位于:app/design/frontend/default/template_name/template/page/html/
    • 我想这会增加页面加载时间,因为它不必要地循环遍历整个类别路径,如果这符合我的需要,我可以稍微增加页面加载时间,但请你给我的想法是多少?这会给我的网站带来多少服务器负担和加载时间?非常感谢!
    • 这真的取决于你有多少类别,但据我所知,如果你有
    • 谢谢你,杰斯,它有效。根据 microtime(),页面加载时间增加了约 0.05 秒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多