簡體   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