2016-10-12 6 views
0

Ich arbeite daran, das Menü für unsere Content-Management-Software mit PHP zu machen, und wir haben dieses kleine Problem. Da wir möchten, dass schließlich alles in Blöcken aufgerufen wird, wurden bestimmte Seitenelemente in Blöcke zerlegt und über Funktionen durch eine enthaltene Datei geladen. Da dies schwer zu erklären ist, werde ich einen Beispielcode veröffentlichen, was ich darunter verstehe.Definieren Sie eine Variable, bevor Sie die Funktion in PHP einfügen und verwenden Sie die Variable

Dies ist die Datei page.php (unnötiger HTML-Code entfernt). Dies ist die Seite der Benutzer auf:

<?php 
define("CURRENT_PAGE", "page.php"); 
include_once("data/main.inc.php"); 
?><html> 
Content loads here. 
<? desktopMenu(); ?> 
</html> 

Okay, und hier ist die Funktion für desktopMenu() von main.inc.php:

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>"; 
    } 
} 

Ich frage mich, wie ich die CURRENT_PAGE auf der mitgelieferten bekommen Skript, damit ich die class="active" auf die richtige Seite laden kann. Ich verwende bereits folgendes:

$config = include('config.inc.php'); 
$GLOBALS = $config; 

auf der Oberseite des main.inc.php oberhalb dieser Menüfunktion, so konnte ich globale Variablen gesetzt und sind meine $config['database'] Variablen innerhalb einer Funktion die SQL-Datenbank aufrufen (funktioniert nicht auf andere Weise) .

Wie kann ich die Variable current_page überprüfen, damit ich sie im Menü aktivieren kann? Ich habe ein paar verschiedene Dinge ausprobiert, aber nichts zeigt, wie wir es erwarten. Danke Typ.

+0

Sie definieren 'CURRENT_PAGE' als eine Konstante, was bedeutet, dass es ein super global ist, also könnten Sie es einfach innerhalb der Funktion verwenden. – Parziphal

+0

CURRENT_PAGE gibt nichts zurück, wenn ich es in meiner Funktion benutze, auch wenn ich es einstelle, bevor ich die Seite einschließe. Das verwirrt mich. – Kaboom

Antwort

1

Es gibt mehrere Optionen. Einschließlich statischer Funktionen, globaler Variablen und Übergeben der Variablen oder des Objekts an die Funktion.
Der Konsens aus verschiedenen Gründen ist die Variable in der Funktion

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

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

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

Es gibt viele Antworten auf diese Frage auf Stackoverflow, passieren so eine tiefere Suche. Here is an example

+0

Ich glaube, du hast den Hauptteil deiner Antwort verpasst, zB 'myFunction ($ myVar);' – Phil

+0

@Phil, danke, dass du darauf hingewiesen hast – Luke

+0

s'ok. Ich dachte, das ist es, was du meintest – Phil

2

Zunächst würde ich empfehlen, MVC Architektur beim Erstellen Ihrer Anwendungen zu betrachten. Ich glaube, der Einsatz von GLOBALS ist verpönt.

Um Ihre Frage zu beantworten: Da definieren Sie eine Konstante definieren ("CURRENT_PAGE", "page.php"); dann wird dies im Rahmen der Funktion desktopMenu global verfügbar sein() so können Sie so etwas wie verwenden:

$className = (isset(CURRENT_PAGE) && CURRENT_PAGE=='xxxxx')?'class="active"':''; 
echo "<li><a href='#' ".$className.">link</a></li>"; 

xxxx String ist höchstwahrscheinlich ein Feld Ausgabe von Ihnen Datenbank als den Seitennamen, die die definierten übereinstimmen Konstante.

Dies ist die Grundform und Sie werden höchstwahrscheinlich zusätzliche Bedingungen für die 'aktive' Menüumschaltung auf verschiedene Seiten benötigen. Ich habe versucht, Ihre Frage mit einem Beispiel zu beantworten, obwohl die Struktur, die Sie verwendet haben, die App ausführen, ist nicht der empfohlene Weg, um zu entwickeln.

Ich würde schauen, wie moderne Frameworks strukturiert sind (Laravel, Zend, Symphony ...) und diese nutzen. Ich würde auch versuchen, die Seitenzuordnung zu automatisieren (z.B.Blick auf die URL, und ziehen Sie die Seite aus einer Rewrite, die in Ihrer Datenbank in das Menü matches)

viel Glück

0

ich die Lösung für mein Problem gefunden und dachte, ich würde hier teilen. Ich habe zuerst den Anruf auf dem page.php desktopMenu(CURRENT_PAGE); zu verwenden und dann auf meine main.inc.php habe ich diese Zeile

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

Und ich eine Tabelle Variable in jedem Menü-Gruppe mit dem Namen Menüpunkt, so dass ich Sie können die aktuelle Menügruppe für einen Menüeintrag definieren und den entsprechenden Menüeintrag markieren, wenn Sie sich auf dieser Seite oder auf einer der Unterseiten befinden.

Vielen Dank für die Antworten Jungs!

Verwandte Themen