2 Stimmen

CodeIgniter dynamische Navigation

Ich bin ein Neuling mit Codeigniter. Ich versuche, eine Anwendung unter Verwendung der MySQL-Datenbank zu schreiben. Auf meiner Seite möchte ich das Menü wie folgt verwenden:

+Homepage
+Über
+Dienstleistungen
  +Bildungsdienstleistungen
  +Neurofeedback
  +Biofeedback

Ich brauche einige Informationen zum Verständnis. Ich verwende den Seitencontroller als Hauptseitencontroller:

load->view('templates/header', $data);
            $this->load->view('pages/'.$page, $data);
            $this->load->view('templates/footer', $data);

Meine Fragen sind:

1) Wo muss der Menücontroller kodiert werden, innerhalb des Seitencontrollers oder separat?

2) Wie kann ich den Menücontroller aus der Datenbank erstellen?

3) Wie kann ich die Beziehung zwischen der Menü-ID und der Seiten-ID herstellen?

Ich habe bereits viele Recherchen angestellt, aber ich benötige noch etwas mehr Verständnis.

Vielen Dank für Ihre Hilfe.

Bearbeiten: Ich habe wie von Ihnen empfohlen MY_Controller verwendet.

Dies ist mein Seitencontroller:

class Home extends MY_Controller {
         function __construct() {
    parent::__construct();
  }

        public function view($page = 'home')
        {
         $this->load->helper('text');
            $data['records']= $this->services_model->getAll();
            if ( ! file_exists('application/views/pages/'.$page.'.php'))
            {
                // Ups, wir haben keine Seite dafür!
                show_404();
            }

            $data['title'] = ucfirst($page); // Erste Buchstabe großschreiben

            $this->load->view('pages/'.$page, $data);

        }

}

5voto

Wo muss der Menücontroller codiert werden, innerhalb des Seitencontrollers oder in einem separaten?

Angenommen, Sie haben eine Vorlage, die von allen Seiten eingehalten werden muss, schlage ich vor, dies zu tun.

1. Erstellen Sie einen Grundcontroller

Erstellen Sie im Ordner ./application/core/ eine Datei namens MY_Controller

class MY_Controller extends CI_Controller {

  protected $data = array();

  function __construct() {
    parent::__construct();
  }

  function render_page($view) {
    //Um dies nicht in allen Controllern zu wiederholen...
    $this->load->view('templates/header', $this->data);
    //menu_data muss die Struktur des Menüs enthalten...
    //Sie können es aus der Datenbank oder einem Helper auffüllen
    $this->load->view('templates/menu', $menu_data);
    $this->load->view($view, $this->data);
    $this->load->view('templates/footer', $this->data);
  }

}

2. Erstellen Sie für jede Seite einen Controller und verwenden Sie anstelle von CI_Controller den MY_Controller

class Homepage extends MY_Controller {
  function __construct() {
    parent::__construct();
  }

  function index() {
    //Definieren Sie Daten, auf die die Ansicht zugreifen kann
    $this->data['someDataToView'] = 'Einige Daten';
    $this->render_page('pages/homepage');
  }

}

Wie kann ich den Menücontroller aus der Datenbank machen?

Nun, Sie werden keinen Controller für das Menü haben, sondern eine Ansicht.

Möglichkeiten für das Menü

  1. Erstellen Sie eine Ansicht für das Menü, laden Sie die Datensätze aus der Datenbank in MY_Controller, laden Sie die Ansicht in render_page();
  2. Erstellen Sie eine Ansicht für das Menü, erstellen Sie eine Helper-Funktion, die die Menüstruktur definiert, und verwenden Sie diese in MY_Controller, um die Ansicht in render_page() zu laden;

Beispiel für Menüvorlage (für Ihr Szenario anpassen):

./application/views/templates/menu.php

bearbeiten

Angesichts Ihres Home-Controllers denke ich, dass der Fehler in Ihrem file_exists-Check liegt. Sehen Sie den Home-Controller, den ich geändert habe:

class Home extends MY_Controller {
  function __construct() {
    parent::__construct();
  }

   public function view($page = 'home') {
     $this->load->helper('text');
     //Verwenden Sie immer $this->data
     $this->data['records']= $this->services_model->getAll();
     if ( ! file_exists(APPPATH.'views/pages/'.$page.'.php'))
     {
       //Überprüfen Sie den Inhalt von APPPATH.'views/pages/'.$page.'.php'
       //Hoppla, wir haben keine Seite dafür!
       show_404();
     }

     $this->data['title'] = ucfirst($page); // Erste Buchstaben groß schreiben

     //Wenn Sie MY_Controller verwenden, überprüfen Sie die render_page Funktion...
     //$this->load->view('pages/'.$page, $data);
     $this->render_page('pages/'.$page)
   }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X