我正在使用php制作内容管理软件的菜单,我们遇到了这个小问题。因为我们希望最终以块的形式调用所有内容,所以将某些页面项目分成块并通过包含文件通过函数加载它们。由于这很难解释,我将在下面发布一些示例代码。
这是文件page.php(删除了不必要的html代码)。 这是用户所在的页面:
<?php
define("CURRENT_PAGE", "page.php");
include_once("data/main.inc.php");
?><html>
Content loads here.
<? desktopMenu(); ?>
</html>
好的,这是main.inc.php中desktopMenu()
的函数:
function desktopMenu() {
// Query to get the top level navigation links with no parents
$query = mysql_query("SELECT * FROM menu WHERE p_id = '0'");
if(mysql_num_rows($query) > 0) {
while($result = mysql_fetch_array($query)) {
extract($result);
if($isparent == "1") {
// Just check if they have children items
$sub_menu_query = mysql_query("SELECT * FROM menu WHERE p_id = '$id'");
if(mysql_num_rows($sub_menu_query) > 0) {
// CODE TO SHOW THE MENU ITEM AND ITS SUBS
}
} else {
// CODE TO SHOW REGULAR MENU ITEMS
// WANT TO INSERT class='active' if the CURRENT_PAGE is this value..
echo "<li><a href='#'>link</a></li>";
}
} else {
echo "<li><a href='javascript:void(0);'>Error Loading Menu</a></li>";
}
}
我想知道如何在包含的脚本上获取CURRENT_PAGE,以便将class="active"
加载到正确的页面上。我已经在使用以下内容:
$config = include('config.inc.php');
$GLOBALS = $config;
位于main.inc.php
之上,位于此菜单功能之上,因此我可以设置全局变量并包含我的$config['database']
变量,用于在函数内调用SQL数据库(否则不起作用)。
如何查看current_page变量,以便在菜单中将其设置为活动状态?我尝试了一些不同的东西,但没有任何东西显示出我们期望的方式。谢谢你。
答案 0 :(得分:2)
首先,我建议在构建应用程序时查看MVC架构。我相信GLOBALS的使用是不受欢迎的。
回答你的问题: 因为你要定义一个常量定义(&#34; CURRENT_PAGE&#34;,&#34; page.php&#34;);那么这将在函数desktopMenu()的范围内全局可用 所以你可以使用类似的东西:
$className = (isset(CURRENT_PAGE) && CURRENT_PAGE=='xxxxx')?'class="active"':'';
echo "<li><a href='#' ".$className.">link</a></li>";
xxxx字符串很可能是您数据库的字段输出,作为与定义的常量匹配的页面名称。
$className = (isset(CURRENT_PAGE) && CURRENT_PAGE==$result['page_name'])?'class="active"':'';
这是基本形式,您很可能需要额外条件才能使用“活跃”字样。菜单切换映射到不同的页面。 虽然您使用的结构运行应用程序不是推荐的开发方式,但我尝试用一个示例回答您的问题。
我会看看现代框架的结构(Laravel,Zend,Symphony ......)并利用它们。 我还会尝试自动化页面映射(例如,查看URL并从重写中提取页面,该页面与数据库中的菜单相匹配)
祝你好运答案 1 :(得分:1)
有多种选择。包括静态函数,全局变量以及将变量或对象传递给函数 出于各种原因的共识是将变量传递给函数
$myVar = new Object\Or\Data();
function myFunction($myVar) {
//do stuff with $myVar
}
//then call the function
myFunction($myVar);
stackOverflow上有很多关于这个问题的答案,所以有更深入的搜索。 Here is an example
答案 2 :(得分:0)
我找到了问题的解决方案,并认为我会在这里分享。我首先在page.php上设置调用以使用desktopMenu(CURRENT_PAGE);
,然后在我的main.inc.php上添加此行
$thispage = CURRENT_PAGE;
function desktopMenu($thispage) {
//REST OF FUNCTION
}
我在每个名为menu-group的菜单项上设置了一个表变量,因此我可以为菜单项定义当前菜单组,并在该页面或其中一个子页面上突出显示相应的菜单项
非常感谢答案!