【问题标题】:How to get the text for PHP breadcrumbs?如何获取 PHP 面包屑的文本?
【发布时间】:2014-08-14 22:13:06
【问题描述】:

我制作了一个简单的 PHP“面包屑”类,可以像这样转换路径:

some_folder/subfolder/page.php

进入这个:

Home > some_folder > subfolder > page

每个元素链接到相应页面的位置。但是,我真正想要的是从文件名以外的其他地方获取这些面包屑的文本,以便它看起来更像这样:

Home > Cool Stuff > Animals > Spiders

我曾想过使用 HTML 标签,但是:

  1. 不知道这样是否有效
  2. 这不适用于目录,仅适用于页面

那么,谁能告诉我这样做的好方法吗? (谢谢!)

【问题讨论】:

  • 这一切都取决于您的系统是什么样子,信息输入的位置等等,但您可以将名称存储在数据库中。
  • 是的,您需要对所需文本进行某种映射 -> 文件夹/文件名。这可以存储在数据库、文本文件或硬编码中。这样您就可以访问实际的链接,即文件夹/文件,您可以将其作为 href 属性,并将文本放在标签中。
  • 您必须走数据库路线或单个索引页面路线。如果您在页面本身上找到它并且需要将Cool Stuff 更改为New Stuff,则您需要更改每个子页面。元数据可能有效,但子页面必须查看每个父页面的元数据才能构建面包屑。
  • 我使用的是 FrontController 模式,如果这就是你的意思?正如@TunaMaxx 演示的那样,将映射存储在数组中对我来说很容易,但我担心可伸缩性,而且对我来说,这似乎不是代码和数据的非常干净的分离。
  • @Dan my sample 这不是一个完全优化的示例;这是对需要做什么的总体思路。它如何适合您的应用程序取决于您。关键是,您将必须将路径段映射到自定义字符串。你的面包屑类无法读懂你的想法来弄清楚你想要什么;你必须告诉它。

标签: php html navigation breadcrumbs


【解决方案1】:

我确信有一种更简单的方法可以做到这一点,但是按照这些思路可以做到这一点。只需为您的目录修改 $trail 数组即可更改面包屑链接标题:

// Alter this array as needed to convert path items in to
// breadcrumb link titles
$trail = array(
    'path' => 'Cool Stuff',
    'to' => 'Animals',
    'a' => 'Spiders'
);

// You could grab this automatically with $_SERVER['HTTP_HOST']
$url = 'http://example.com/path/to/more/deadly/a/black_widow.php';

$parts         = parse_url($url);
$path          = pathinfo($parts['path']);
$segments      = explode('/', trim($path['dirname'],'/'));

$breadcrumbs[] = '<a href="/">Home</a>';
$crumb_path    = '';

foreach ($segments as $segment)
{
    $crumb_path .= '/' . $segment;

    $value = (array_key_exists($segment, $trail)) ? $trail[$segment] : ucfirst($segment);

    $breadcrumbs[] = '<a href="' . $crumb_path . '">' . $value . '</a>';
}

$breadcrumbs[] = ucwords(str_replace('_', ' ', $path['filename']));
$breadcrumbs   = implode(' > ', $breadcrumbs);

echo $breadcrumbs;

这将创建一个面包屑字符串,如:

Home > Cool Stuff > Animals > More > Deadly > Spiders > 黑寡妇

使用 HTML 源代码:

<a href="/">Home</a> > 
<a href="/path">Cool Stuff</a> > 
<a href="/path/to">Animals</a> > 
<a href="/path/to/more">More</a> > 
<a href="/path/to/more/deadly">Deadly</a> > 
<a href="/path/to/more/deadly/a">Spiders</a> > 
Black Widow

【讨论】:

  • 感谢您的回复,非常有帮助。我想这是@czobrisky提到的“硬编码”路线。考虑到可扩展性和效率,您认为存储 $trail 映射的最佳方式是在这样的 PHP 数组中吗?
  • 除非您的目录结构与您希望面包屑链接的外观完全匹配,否则您必须在两者之间创建某种映射。无论是在手动构建的数组中,还是从数据库中检索,在某些时候你必须告诉你的应用程序 /some_folder 目录应该表示为“Cool Stuff”。至于可扩展性和效率,请使用 $url = $_SERVER['HTTP_HOST'] 之类的东西,而不是我在示例中的硬编码路径,它是免提的。如果数组中有匹配的键,它们将被替换为值。
猜你喜欢
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 2017-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多