Aktuelle URI-Segment in CodeIgniter
Was wäre der beste Weg, um zu überprüfen, die für die aktuelle URI-segment in einem CodeIgniter ansehen? Was ich versuche zu tun, ist mit dem aktuellen URI-segment [d.h. $this->uri->segment(1)], um zu markieren der aktuellen Seite in der Navigationsleiste.
Das beste, was ich herausgefunden haben ist, das zu tun
$data['current_uri'] = $this->uri->segment(1);
$this->load->view('header', $data);
in jedem meiner Controller und dann in die header.php Datei, ich prüfe $current_uri variable, um zu bestimmen, welcher Teil der navigation hervorgehoben werden sollte. Wie Sie wissen, ist dies ein sehr mühsamer Weg, es zu tun, aber ich bin an einem Verlust, einen besseren Weg, dies zu tun.
Kann es sogar möglich sein zu verlängern die standardmäßige Controller-Klasse übergeben werden, die aktuelle URI-segment, aber ich bin mir nicht sicher, ob dies funktionieren würde, oder sogar, wie Sie gehen über es zu tun.
- Ich habe das gleiche zu tun, und ich bin sehr neugierig auf eine bessere Lösung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich selbst benutze eine zusätzliche Funktion, ähnlich dem Anker(). Ich nenne es active_anchor(), und es nimmt alle die gleichen Parameter plus ein weiterer (der uri). Die Funktion fügt dann die class "active", wenn die uri-Zeichenfolge übergeben, entspricht der active_anchor() url-Parameter.
Dann kehrt die Funktion zurück, mit der Anker-Funktion (alle, die die Funktion haben, war festzustellen, ob der link benötigt die Klasse 'active' oder nicht.
EDIT:
Ich nur diesen code in einer Datei namens MY_url_helper.php'. So, bei der url-helper geladen ist (ich eigentlich auto-load, dass man da so ziemlich alle meine Ansichten verwenden es trotzdem.) Dies ist nur einige quick code auch ziemlich sicher, dass es funktionieren würde. Grundsätzlich nimmt die gleichen Argumente wie für den Anker () - Funktion, aber auch die $key-Variablen. Es fügt eine Klasse "active" zu den Anker-tag, wenn der Schlüssel und die url übereinstimmen.
Ich hatte auch das gleiche problem, wenn ich Aufbau einer Kunden-Webseite in Cakephp, übergeben Sie diese Zeichenfolgen für jedes Menü vom controller zum anzeigen, dann überprüfen Sie erneut in der Ansicht für die Umsetzung der Hervorhebung zu mühsam, um das Mindeste zu sagen.
Für einige meiner Projekte, die ich umgesetzt haben das gleiche durch speichern der Seite werden die Informationen für jede in der navigation Seiten in der Datenbank, Dinge wie name der Seite, url, Titel, position im Navigations-Menü etc.
Dann zu Beginn der controller, Speicher ich alle diese Daten in einem array sagen
$pageinfo
.Ich mit dem Navigations-Funktionalität über einen einzigen controller, der überprüft die URI-segment und lädt den Inhalt, die Grundlage.
Die Hervorhebung Teil linke ist zu einer if-Anweisung bei der Erzeugung der Ansicht, wo ich vergleichen jeder Seite Namen, um die Informationen, die ich anschließend in
$pageinfo
.Sowas...
Diese Weise brauche ich mich nicht übergeben Sie die string-Konstanten (uri-Segmente in Ihrem Fall) zu der Ansicht. Dieses CMS-irgendwie-Ansatz erlaubt mir, flexibel hinzufügen weitere Artikel in meinen Menü, ohne mehr code.
Ich erinnere mich, dies von einem codeigniter-wiki, kann nicht finden den link, um es jetzt.
diese einfache Art und Weise und es lief gut für mich..
uri_segment(2) bedeuten, dass eine Funktion in ur-controller.
aber habe eine Schwäche, ich habe Mühe, wenn ich die Ansicht im index-controller, so dass ich nicht verwenden Sie die Funktion index ( toruble in uri-segment, machen 2 aktuelle Seite in der gleichen Zeit... Lesen Sie diese http://ellislab.com/codeigniter/user-guide/libraries/uri.html
Werde ich wohl geflammt für die Annahme, eine client-side-Ansatz, aber das ist etwas, was ich in der Vergangenheit verwendet habe zum markieren der aktuellen Seite hervorgehoben:
In jedem CodeIgniter Projekt sammle ich einige grundlegende Informationen über die Anfrage in MY_Controller.
Ich erweitern den core controller und setzen Sie in einige Initialisierungs-Logik, die passieren muss, um auf jeder Seite. Dies beinhaltet immer die Informationen über den controller und die Methode, die übergeben wird, die Ansicht. Als kurzes Beispiel:
Nun in einer Ansicht, z.B. die navigation, die Sie verwenden können, dass Informationen wie diese:
Ich mag es, weil mit Routen oder schreibt Sie Zugang auf Controller und Methoden aus verschiedenen URLs. Auf diese Weise legen Sie fest, ob der link aktiv ist, basierend auf dem controller/Methode, die den Inhalt und nicht auf die URL.
Auch, diese Informationen wiederverwendet werden können, um in Ihrem Controller oder views aus irgendeinem Grund, und Sie nicht ständig zu Fragen, der router oder der uri zum berechnen der Informationen (die nicht nur ineffizient ist, aber ist umständlich zu schreiben, über und über).