0

我一直在绞尽脑汁想办法解决这个问题。我有一个头文件,在我网站上的每个文档中都会调用它,我需要从每个文档中动态选择哪个锚点被赋予了一个设定值。如下:

function headur($page) {echo'...
    <ul>
      <li><a'.$h.' href="/">Home</a>
      <li><a'.$s.' href="/services">Services</a>
      <li><a'.$p.' href="/portfolio">Portfolio</a>
      <li><a'.$a.' href="/about">About</a>
      <li><a'.$c.' href="/contact">Contact</a>
    </ul>...
  ;}

然后在我的文档中,我调用headur($a);并从该参数值中调用 - $a- 使用它作为选择器为匹配的内部字符串提供特定值 - class="selected"即这个特定的函数调用将像这样输出 html:

    <ul>
      <li><a href="/">Home</a>
      <li><a href="/services">Services</a>
      <li><a href="/portfolio">Portfolio</a>
      <li><a class="selected" href="/about">About</a>
      <li><a href="/contact">Contact</a>
    </ul>

关键是它是从调用该函数的文档中动态选择的,而我不必手动创建一个大的旧 if 语句来匹配所有内容。即if ($page == $a) {$a = ' class="selected"';}对于每一个,这是我一直在做的。.addClass();我想这是在外部文件上做的 php 等价物。

提前致谢。

4

4 回答 4

1

只需将您的类定义存储在一个数组中并通过索引搜索它。对数组使用数字键是最简单的,但在回读代码时描述性不是很强。要使用数字键,只需执行以下操作:

$pages = array("", "services", "portfolio", "about", "contact");
$where = array_search($a, $pages); // $a is the param passed to the function
$pages[$where] .= "\" class=\"selected\"";

我按顺序处理了您的页面,因此 $h 将被 $pages[0] 替换,$s 将被 $pages[1] 替换,依此类推。如果您希望我为您编写一些代码,以便您可以使用数组中的文本键使其更容易,我也可以这样做,但我个人认为这在没有额外代码的情况下可以正常工作。

于 2012-11-21T00:23:33.290 回答
0

一个解决方案可能是将您的模板加载到 DOMDocument 中并将链接设置为与当前 URL 匹配的活动:

$dom = new DOMDocument();
$dom->loadXML('<ul><li><a href="/yourLink">Your Link</a></li></ul>');

$xpath = new DOMXPath($dom);
$url = $_SERVER['REQUEST_URI'];

foreach ($xpath->query(sprintf('//a[@href="%s"]', $uri)) as $current) {
    $current->setAttribute('class', 'selected');
} 

echo $dom->saveXML();

代码未经测试!但它应该给你一个想法......这样你就可以编写你的模板文件而不需要任何 PHP 代码......

于 2012-11-21T00:26:41.633 回答
0

那么你可以做这样的事情:

<ul>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/' ? 'selected' : '' ?>" href="/">Home</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/services' ? 'selected' : '' ?>" href="/services">Services</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/portfolio' ? 'selected' : '' ?>" href="/portfolio">Portfolio</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/about' ? 'selected' : '' ?>"href="/about">About</a>
    <li><a class="<?php echo $_SERVER['PHP_SELF'] == '/contact' ? 'selected' : '' ?>" href="/contact">Contact</a>
</ul>
于 2012-11-21T00:20:54.313 回答
0

创建一个数组并遍历数组是非常典型的:

$linkMenu = array(
    '/' => 'Home',
    '/services' => 'Services',
    '/portfolio' => 'Portfolio',
    '/about' => 'About',
    '/contact' => 'Contact',
);

function linkList($links, $page=null) {
    echo '<ul>';
    foreach($links as $url=>$name) {
        $selected = ($url == $page) ? " class='selected' " : '';
        echo "<li><a $selected href='$url'>$name</a></li>\n";
    }
    echo '</ul>';
}

现在,您可以使用以下命令为主页创建链接菜单:

linkList($linkMenu, '/');
于 2012-11-21T00:26:07.693 回答