繁体   English   中英

在PHP中包含函数之前定义一个变量,然后使用变量

[英]Define a variable before including function in PHP, and use variable

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

首先,我建议在构建应用程序时考虑MVC架构。 我相信对GLOBALS的使用不被接受。

回答您的问题:由于您正在定义常量define(“ CURRENT_PAGE”,“ page.php”); 那么它将在函数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并从与数据库菜单匹配的重写中拉出页面)

祝你好运

有多种选择。 包括静态函数,全局变量以及将变量或对象传递到函数中。
由于各种原因,共识是将变量传递给函数

$myVar = new Object\Or\Data();

function myFunction($myVar) {
    //do stuff with $myVar
}

//then call the function
myFunction($myVar);

在stackOverflow上,此问题有很多答案,因此请进行更深入的搜索。 这是一个例子

我找到了解决问题的方法,并认为我会在这里分享。 我首先在page.php上设置调用以使用desktopMenu(CURRENT_PAGE); 然后在我的main.inc.php上添加了这一行

$thispage = CURRENT_PAGE;
function desktopMenu($thispage) {
    //REST OF FUNCTION
}

而且,我在名为menu-group的每个菜单项上设置了一个表变量,因此我可以为该菜单项定义当前菜单组,并在该页面或其子页面之一中突出显示适当的菜单项。

非常感谢你们的答案!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM