【问题标题】:Trimming Magento's breadcrumbs修剪 Magento 的面包屑
【发布时间】:2011-01-19 00:50:41
【问题描述】:

我需要在整个网站上限制 Magento 面包屑的输出,我认为我在这个脚本中大部分时间都在那里。

    $breadcrumbs = "";
    $bleng = 0;
    foreach($crumbs as $_crumbName=>$_crumbInfo):
        $breadcrumbs .= "<li class=\"".$_crumbName."\">";
        $bleng = $bleng + strlen($_crumbName);
        if($_crumbInfo['link']):
            $breadcrumbs .= "<a href=\"".$_crumbInfo['link']."\" title=\"".$this->htmlEscape($_crumbInfo['title'])."\">".$this->htmlEscape($_crumbInfo['label'])."</a>";
            $bleng = $bleng + strlen($this->htmlEscape($_crumbInfo['label']));
        elseif($_crumbInfo['last']):
            $breadcrumbs .= "<strong>".$this->htmlEscape($_crumbInfo['label'])."</strong>";
            $bleng = $bleng + strlen($this->htmlEscape($_crumbInfo['label']));
        else:
            $breadcrumbs .= $this->htmlEscape($_crumbInfo['label']);
            $bleng = $bleng + strlen($this->htmlEscape($_crumbInfo['label']));
       endif;
       if(!$_crumbInfo['last']):
           $breadcrumbs .= "<span>&gt;</span>";
       endif;
       $breadcrumbs .= "</li>";
    endforeach;

    if ($bleng > 70): // Arbitrary threshold
        $trimmed = $breadcrumbs;
        echo substr($trimmed, 0, 70);
        echo $trimmed."...";
    else:
        echo $breadcrumbs;
    endif;

这种快速修改的问题是$bleng 正在计算 html 标记以及可见文本中的字符。我需要的是仅计算可见文本(面包屑“标签”)并相应地修剪$breadcrumbs。实际上,此脚本正在从任何可见文本顶部的字符串中修剪 and 标记,但在最后添加它们似乎不起作用:

echo $trimmed."...</a></li>";

我怀疑有一种对 SEO 更友好的 JS 方法可以做到这一点,它不需要我使用任意字符限制。我很乐意为此使用 PHP 或 JS,只要它有效。有什么建议吗?

【问题讨论】:

标签: php javascript magento


【解决方案1】:

解决方案

我意识到我在做的是倒退。我已经修改了脚本以从我的任意数量的允许字符开始倒计时,当它到达最终的“crumb”时,将显示文本修剪为$bleng(此时为负数)。

这适用于我的商店,因为子类别级别不超过 3 个。

    <?php
    $breadcrumbs = "";
    $bleng = 70;
    foreach($crumbs as $_crumbName=>$_crumbInfo):
        $breadcrumbs .= "<li class=\"".$_crumbName."\">";
        if($_crumbInfo['link']):
            $breadcrumbs .= "<a href=\"".$_crumbInfo['link']."\" title=\"".$this->htmlEscape($_crumbInfo['title'])."\">".$this->htmlEscape($_crumbInfo['label'])."</a>";
            $bleng = $bleng - strlen($this->htmlEscape($_crumbInfo['label']));
            $bleng - 3;
        elseif($_crumbInfo['last']):
            $lastleng = strlen($this->htmlEscape($_crumbInfo['label']));
            $lastlabel = $this->htmlEscape($_crumbInfo['label']);
            $bleng = $bleng - $lastleng;
            if ($bleng < 0):
                $breadcrumbs .= "<strong>".substr($lastlabel, 0, $bleng)."...</strong>";
            else:
                $breadcrumbs .= "<strong>".$lastlabel."</strong>";
            endif;
        else:
            $breadcrumbs .= $this->htmlEscape($_crumbInfo['label']);
            $bleng = $bleng - strlen($this->htmlEscape($_crumbInfo['label']));
            $bleng - 3;
        endif;
         if(!$_crumbInfo['last']):
               $breadcrumbs .= "<span>&gt;</span>";
         endif;
        $breadcrumbs .= "</li>";
    endforeach;
    echo $breadcrumbs;
    ?>

【讨论】:

    猜你喜欢
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多