如何获取PHP面包屑的文本?
我制作了一个简单的PHP“Breadcrumbs”类,它可以转换如下路径:如何获取PHP面包屑的文本?,php,html,navigation,breadcrumbs,Php,Html,Navigation,Breadcrumbs,我制作了一个简单的PHP“Breadcrumbs”类,它可以转换如下路径: some_folder/subfolder/page.php Home > Cool Stuff > Animals > Spiders 为此: Home > some_folder > subfolder > page 其中每个元素都链接到相应的页面。然而,我真正想要的是从文件名以外的地方获取这些面包屑的文本,这样它看起来更像这样: some_folder/subfolder/
some_folder/subfolder/page.php
Home > Cool Stuff > Animals > Spiders
为此:
Home > some_folder > subfolder > page
其中每个元素都链接到相应的页面。然而,我真正想要的是从文件名以外的地方获取这些面包屑的文本,这样它看起来更像这样:
some_folder/subfolder/page.php
Home > Cool Stuff > Animals > Spiders
我曾想过使用HTML标记,但:
那么,有谁能告诉我这样做的好方法吗?(谢谢!)我相信有一种更简单的方法可以做到这一点,但按照这一思路,有些方法是可行的。只需将$trail数组修改为breadcrumb链接标题更改:
// 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;
//根据需要更改此数组以将中的路径项转换为
//面包屑链接标题
$trail=数组(
“路径”=>“酷东西”,
'到'=>'动物',
“a'=>“蜘蛛”
);
//您可以使用$\u SERVER['HTTP\u HOST']自动获取此信息
$url='1http://example.com/path/to/more/deadly/a/black_widow.php';
$parts=parse_url($url);
$path=pathinfo($parts['path']);
$segments=分解('/',修剪($path['dirname'],'/');
$breadcrumbs[]='';
$crumb_path='';
foreach($segments作为$segments)
{
$crump_path.='/'.$segment;
$value=(数组\键\存在($segment,$trail))?$trail[$segment]:ucfirst($segment);
$breadcrumbs[]='';
}
$breadcrumbs[]=ucwords(str_replace('''','.$path['filename']);
$breadcrumbs=内爆('>',$breadcrumbs);
echo$面包屑;
这将创建一个面包屑字符串,如:
>>>>>>>黑寡妇
使用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
>
>
>
>
>
>
黑寡妇
这一切都取决于您的系统外观、输入信息的位置等等,但您可以将名称存储在数据库中。是的,您需要某种类型的映射,以获得所需的文本->文件夹/文件名。这可以存储在数据库、文本文件或硬编码中。通过这种方式,您可以访问实际的链接,即文件夹/文件,您可以将其作为href属性,并将文本放置在标记中。您必须使用数据库路径或单个索引页路径。如果您在页面本身上找到它,并且需要将Cool Stuff
更改为New Stuff
,则需要更改每个子页面。元数据可能会起作用,但子页面必须查看每个父页面的元数据才能构建crump。我使用的是FrontController模式,如果这是你的意思的话?对我来说,像@TunaMaxx演示的那样将映射存储在一个数组中是很容易的,但我担心可伸缩性,而且对我来说,它看起来不像是一个非常干净的代码和数据分离。@Dan我的示例它并不是一个完全优化的示例;这是一个需要做什么的总体想法。它如何适合你的应用取决于你。关键是,您必须将路径段映射到自定义字符串。你的面包屑课无法读懂你的心思来找出你想要什么;你必须告诉它。谢谢你的回复,它非常有帮助。我想这就是刚才提到的“硬编码”路线@CzobRisk。考虑到可伸缩性和效率,您认为存储$trail映射的最佳方式是在这样的PHP数组中吗?除非您的目录结构与您希望的breadcrumb链接完全匹配,否则您必须在两者之间创建某种映射。无论是在手动构建的数组中,还是从数据库中检索,在某个时候,您必须告诉您的应用程序,例如,/some\u文件夹
目录应该表示为“Cool Stuff”。至于可伸缩性和效率,请使用类似$url=$\u SERVER['HTTP\u HOST']
的内容,而不是示例中我的硬编码路径,而且它是免提的。如果数组中有匹配的键,它们将被值替换。