如何获取PHP面包屑的文本?

如何获取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/

我制作了一个简单的PHP“Breadcrumbs”类,它可以转换如下路径:

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']
    的内容,而不是示例中我的硬编码路径,而且它是免提的。如果数组中有匹配的键,它们将被值替换。