在PHP中包含函数之前定义变量,并使用变量

时间:2016-10-12 03:22:46

标签: php

我正在使用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变量,以便在菜单中将其设置为活动状态?我尝试了一些不同的东西,但没有任何东西显示出我们期望的方式。谢谢你。

3 个答案:

答案 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的菜单项上设置了一个表变量,因此我可以为菜单项定义当前菜单组,并在该页面或其中一个子页面上突出显示相应的菜单项

非常感谢答案!