Aktuelles URI-Segment in CodeIgniter

8

Was wäre der beste Weg, um nach dem aktuellen URI-Segment in einer CodeIgniter-Ansicht zu suchen? Was ich versuche, ist das aktuelle URI-Segment [d. H. $ this- & gt; uri- & gt; Segment (1)], um die aktuelle Seite in der Navigationsleiste hervorzuheben.

Das Beste, was ich herausgefunden habe, ist

%Vor%

In jedem meiner Controller und dann in der Datei header.php überprüfe ich die Variable $ current_uri, um festzustellen, welcher Teil der Navigation hervorgehoben werden soll. Wie Sie wissen, ist dies eine sehr langweilige Art, es zu tun, aber ich habe einen besseren Weg, dies zu tun.

Es ist vielleicht sogar möglich, die Standard-Controller-Klasse zu erweitern, um das aktuelle URI-Segment zu übergeben, aber ich bin mir nicht sicher, ob das funktionieren würde oder gar wie es geht.

    
Jared 09.09.2010, 03:13
quelle

6 Antworten

6

Ich selbst benutze eine zusätzliche Funktion wie anchor (). Ich nenne es active_anchor (), und es dauert alle die gleichen Parameter plus ein anderes (die URI). Die Funktion fügt dann die Klasse 'active' hinzu, wenn die übergebene uri-Zeichenfolge dem URL-Parameter active_anchor () entspricht.

Dann kehrt die Funktion mit der Ankerfunktion zurück (alles, was die Funktion getan hat, war festzustellen, ob die Verbindung die Klasse 'aktiv' benötigt oder nicht.

BEARBEITEN:

Ich habe diesen Code einfach in eine Datei namens 'MY_url_helper.php' geschrieben. Auf diese Weise, wenn der URL-Helper geladen ist (ich lade diesen automatisch, weil so ziemlich alle meine Ansichten ihn sowieso benutzen). Das ist nur ein paar schneller Code, ziemlich sicher, dass es funktionieren würde. Im Grunde nimmt es die gleichen Argumente wie die Funktion anchor (), aber auch die Schlüsselvariable $. Wenn der Schlüssel und die URL übereinstimmen, fügt sie dem Anker-Tag eine Klasse "active" hinzu.

%Vor%     
Matthew 09.09.2010, 13:09
quelle
2

Ich hatte auch das gleiche Problem, als ich eine Kundenwebsite in CakePHP baute, diese Zeichenfolgen für jeden Menüeintrag vom Controller zur Ansicht übergab, und dann erneut in der Ansicht für die Implementierung der Hervorhebung auf mühsam, um es gelinde auszudrücken.

>

Für einige meiner Projekte habe ich dasselbe implementiert, indem ich die Seiteninformationen für jede der Navigationsmenüseiten in der Datenbank gespeichert habe, wie Seitenname, URL, Titel, Position im Navigationsmenü usw.

Dann, am Anfang des Controllers, speichere ich alle diese Daten in einem Array say $pageinfo .

Ich handle mit der Navigationsfunktionalität über einen einzelnen Controller, der das URI-Segment überprüft und den darauf basierenden Inhalt lädt.

Der hervorhebende Teil wird bei der Erzeugung der Ansicht einer if-Anweisung überlassen, wobei ich jeden Seitennamen mit der Information, die ich in $pageinfo ausgegeben habe, vergleiche.

So etwas ...

%Vor%

Auf diese Weise muss ich die String-Konstanten (Uri-Segmente in Ihrem Fall) nicht an die Ansicht übergeben. Dieser CMS-Ansatz ermöglicht es mir, weitere Elemente flexibel in mein Menü einzufügen, ohne zusätzlichen Code hinzuzufügen.

Ich erinnere mich, dass ich das von einem Codeigniter-Wiki bekommen habe, ich kann den Link dazu nicht finden.

    
vikmalhotra 09.09.2010 08:19
quelle
2

dieser einfache Weg und läuft gut für mich ..

%Vor%

uri_segment (2) diese mittlere Funktion in Ihrem Controller.

aber habe eine Schwäche, ich habe Probleme, wenn ich Ansicht in Index-Controller, so bin ich nicht verwenden Funktionsindex (toruble in Uri-Segment, machen 2 aktuelle Seite in der gleichen Zeit ... lesen Sie dies Ссылка

    
Prabu Karana 24.05.2013 04:45
quelle
1
%Vor%     
prash.patil 29.07.2014 11:32
quelle
0

Ich werde wahrscheinlich dazu verleitet, einen clientseitigen Ansatz vorzuschlagen, aber das ist etwas, das ich in der Vergangenheit benutzt habe, um die aktuelle Seite als hervorgehoben zu markieren:

%Vor%     
someoneinomaha 10.09.2010 16:18
quelle
0

In jedem CodeIgniter Projekt sammle ich einige grundlegende Informationen über die Anfrage in MY_Controller.

Ich erweitere den Core-Controller und setze eine Initialisierungslogik ein, die auf jeder Seite passieren muss. Dazu gehört das Abrufen der Informationen zum Controller und zur Methode, die an die Ansicht übergeben werden. Ein kurzes Beispiel:

%Vor%

Jetzt in einer Ansicht wie der Navigation können Sie diese Informationen wie folgt verwenden:

%Vor%

Ich mag es, weil Sie mit Routen oder Umschreibungen auf Controller und Methoden aus verschiedenen URLs zugreifen können. Auf diese Weise legen Sie fest, ob die Verknüpfung basierend auf dem Controller / der Methode aktiv ist, die den Inhalt bereitstellt und nicht auf der URL basiert.

Auch diese Informationen können in Ihren Controllern oder Views aus irgendeinem Grund wiederverwendet werden und Sie fordern nicht ständig den Router oder die URI auf, die Informationen zu berechnen (was nicht nur ineffizient ist, sondern mühselig ist, immer wieder zu schreiben) / p>     

J.Money 25.05.2013 01:22
quelle

Tags und Links