我在从include内部访问函数结果时遇到问题。我试图为此搜索一个答案,但是"包含在函数内部"支配该查询的格局。
以下代码有效(仅包括必要信息)。有两个主要链接,根据您的页面,相关链接将加下划线,另一个不会:
的index.php
if (basename($_SERVER['PHP_SELF']) == "index.php") {
$nav1 = "navselected";
$nav2 = "navnone";
}
else {
$nav1 = "navnone";
$nav2 = "navselected";
}
include "/...../public_html/includes/header.php";
的header.php
<div class="nav1">
<a href="index.php" class="navfont" id="<?php echo $nav1; ?>">Home</a>
</div>
<div class="nav2">
<a href="marketmainstreet.php" class="navfont" id="<?php echo $nav2; ?>">Browse Market</a>
</div>
以下代码不起作用:
的functions.php
function underlineActivePage()
{
if (basename($_SERVER['PHP_SELF']) == "index.php") {
$nav1 = "navselected";
$nav2 = "navnone";
} else {
$nav1 = "navnone";
$nav2 = "navselected";
}
}
的index.php
include "/...../public_html/includes/functions.php";
underlineActivePage();
include "/...../public_html/includes/header.php";
的header.php
<div class="nav1">
<a href="index.php" class="navfont" id="<?php echo $nav1; ?>">Home</a>
</div>
<div class="nav2">
<a href="marketmainstreet.php" class="navfont" id="<?php echo $nav2; ?>">Browse Market</a>
</div>
变量结果返回空。知道在页面的每个其他部分使用的函数都工作,只有在这个例子中,当变量需要在包含内部访问时才能访问。据我所知,并且迄今为止对我有用,就是通过包含这样的文件:
"/...../public_html/includes/header.php"
将代码添加到页面中,就像它是页面的一部分一样,而不是仅仅将代码的结果添加到页面中。我可以在header.php上以这种方式访问其他变量,而不是来自函数include的那些变量。我在布局中加入功能实际上很新(#34;懒惰&#34;重复代码,但我改变了这一点)感谢我们对此的帮助。
答案 0 :(得分:1)
变量$ nav1和$ nav2在函数范围中设置,然后在全局范围中使用。为了完成这项工作,您可以将$ nav1和$ nav2声明为函数内的全局变量。
function underlineActivePage() {
global $nav1, $nav2;
if (basename($_SERVER['PHP_SELF']) == "index.php") {
$nav1 = "navselected";
$nav2 = "navnone";
}
else {
$nav1 = "navnone";
$nav2 = "navselected";
}
}
答案 1 :(得分:0)
这是一个非常简单的问题解决方案,(编辑:因为我假设你想要显示所选链接,即在导航栏中加下划线或粗体等)
定义一个php变量并将当前页面存储在其中:
$current_page_name = substr($_SERVER["SCRIPT_NAME"],strrpos($_SERVER["SCRIPT_NAME"],"/")+1);
在你的html中嵌入条件php并在你的CSS中编写一个选定的类:
<li><a <?php if($current_page_name=="index.php"){echo " class=\"selected\"";}?> href="index.php">Enter the value you want to display</a></li>
<li><a <?php if($current_page_name=="marketmainstreet.php"){echo " class=\"selected\"";}?> href="marketmainstreet.php">Enter another value</a></li>
答案 2 :(得分:0)
这是一个范围问题。但是,我建议从函数返回值,而不是进入&#34; global&#34;。尽可能避免全局变量(正如我在其他评论中提到的,特别是对于团队开发,全局变量是危险的)。
将functions.php更改为:
function underlineActivePage()
{
if (basename($_SERVER['PHP_SELF']) == "index.php") {
$nav[] = "navselected";
$nav[] = "navnone";
} else {
$nav[] = "navnone";
$nav[] = "navselected";
}
return $nav;
}
和index.php:
include "/...../public_html/includes/functions.php";
$nav = underlineActivePage();
include "/...../public_html/includes/header.php";
和header.php:
<div class="nav1">
<a href="index.php" class="navfont" id="<?php echo $nav[0]; ?>">Home</a>
</div>
<div class="nav2">
<a href="marketmainstreet.php" class="navfont" id="<?php echo $nav[1]; ?>">Browse Market</a>
</div>