php传递函数参数值以选择其他字符串并赋予该值

时间:2012-11-21 00:11:14

标签: php function arguments

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

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();但是在外部文件上。

提前致谢。

4 个答案:

答案 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代码...