我一直绞尽脑汁试图想办法解决这个问题。我有一个头文件,在我的网站上的每个文档中调用,我需要动态地从每个文档中选择哪个锚被赋予设定值。如下:
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"
,即此特定函数call会像这样输出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"';}
,这就是我一直在做的事情。我想这是php相当于做.addClass();
但是在外部文件上。
提前致谢。
答案 0 :(得分: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]替换,依此类推。如果你想让我给你写一些代码,这样你就可以使用数组中的文本键来简化它,我也可以这样做,但我个人认为没有额外的代码就可以正常工作。
答案 1 :(得分: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>
答案 2 :(得分: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, '/');
答案 3 :(得分:0)
解决方案可以是将模板加载到DOMDocument中,并将Link设置为与当前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代码...