我正在使用这个PHP函数根据您所在的页面将id="current"
附加到我的导航菜单中。
function get_current() {
foreach(func_get_args() as $arg) {
if (strpos($_SERVER['REQUEST_URI'], $arg) !== false) {
echo 'id="current"';
}
}
}
简单的 HTML:
<ul>
<li <?php get_current('') ?>><a>HOME</a></li>
<li <?php get_current('page1.php') ?>><a>PAGE 1</a></li>
<li <?php get_current('page2.php') ?>><a>PAGE 2</a></li>
<li <?php get_current('page3.php') ?>><a>PAGE 3</a></li>
<li <?php get_current('page4.php') ?>><a>PAGE 4</a></li>
</ul>
它工作正常,除了主页。我应该使用什么参数?主页位于域的根目录。我想避免强迫用户转到索引.php而是将其设置为参数。
在您的情况下,我会这样解决:
<?
function get_current( $nav_page ) {
$uri = $_SERVER['REQUEST_URI'];
return ( $uri == $nav_page ) ? ' id="current" ' : '';
}
?>
HTML 中的小改动:
<ul>
<li <?= get_current('/') ?> ><a>HOME</a></li>
<li <?= get_current('/page1.php') ?> ><a>PAGE 1</a></li>
<li <?= get_current('/page2.php') ?> ><a>PAGE 2</a></li>
<li <?= get_current('/page3.php') ?> ><a>PAGE 3</a></li>
<li <?= get_current('/page4.php') ?> ><a>PAGE 4</a></li>
</ul>
请注意,我将参数更改为绝对 URL,因为$_SERVER['REQUEST_URI']
包含绝对路径。
编辑:
由于您使用了func_get_args()
,因此您可能会接受任意数量的"页面名称.php"作为get_current()
的参数。在这种情况下,get_current
函数变为:
function get_current() {
$uri = $_SERVER['REQUEST_URI'];
if ( in_array( $uri, func_get_args() ) )
return ' id="current" ';
return '';
}
及其随附的 HTML:
<li <?= get_current('/', '/index.php')?> > ... </li>
编辑2:
您的$_SERVER['REQUEST_URI']
显示文件位于/new/
文件夹中。更改了比较最终零件的逻辑。
<?
function get_current( $nav_page ) {
$uri = $_SERVER['REQUEST_URI'];
return is_rear_match( $uri, $nav_page ) ? ' id="current" ' : '';
}
function is_rear_math( $haystack, $needle ) {
$rear = substr($haystack, -strlen($needle));
return $rear !== false && $rear === $needle;
}
?>
.HTML:
<ul>
<li <?= get_current('/') ?> ><a>HOME</a></li>
<li <?= get_current('/page1.php') ?> ><a>PAGE 1</a></li>
<li <?= get_current('/page2.php') ?> ><a>PAGE 2</a></li>
<li <?= get_current('/page3.php') ?> ><a>PAGE 3</a></li>
<li <?= get_current('/page4.php') ?> ><a>PAGE 4</a></li>
</ul>