Frage

Was ist der beste Weg, Header für die Konstruktion und Fußzeilen? Sollten Sie nennen es alle von der Steuerung, oder sind aus der Sicht Datei? Ich benutze CodeIgniter, und ich will wissen, was die beste Praxis für diese ist. Laden Sie alle enthalten View-Dateien von der Steuerung, wie das?

class Page extends Controller {

   function index()
   {
      $data['page_title'] = 'Your title';
      $this->load->view('header');
      $this->load->view('menu');
      $this->load->view('content', $data);
      $this->load->view('footer');
   }

}

oder die Einzelansicht Datei aufrufen und den Aufruf der Kopf- und Fußzeile Blick von dort:

//controller file    
class Page extends Controller {

   function index()
   {
      $data['page_title'] = 'Your title';
      $this->load->view('content', $data);

   }

}

//view file

<?php $this->load->view('header'); ?>

<p>The data from the controller</p>

<?php $this->load->view('footer'); ?>

Ich habe es in beiden Richtungen getan gesehen, aber jetzt wählen möge, bevor ich zu weit nach unten einem Pfad gehen.

War es hilfreich?

Lösung

Sie können auch es auf diese Weise versuchen - eine Standardansicht Vorlage definieren, die dann in dem Inhalt zieht auf einer Variablen basiert ( ‚Inhalt‘ in meinem Beispiel) durch die Steuerung übergeben.

In Ihrem Controller:

$data['content'] = 'your_controller/index';

// more code...

$this->load->vars($data);
$this->load->view('layouts/default');

Dann ein Standard-Layout für alle Seiten definieren z.B. Ansichten / Layout / default.php

// doctype, header html etc.

<div id="content">
    <?= $this->load->view($content) ?>
</div>

// footer html etc.

Dann können Sie Ihre Ansichten enthalten nur den reinen Inhalt z.B. views / your_controller / index.php könnte nur die Variablen von der Steuerung / Datenfeld übergeben

enthalten
<?= $archives_table ?>
<?= $pagination ?>
// etc.

Weitere Details über die CI wiki / FAQ - (F: Wie binde ich Ansichten innerhalb Ansichten ? Verschachtelte Vorlagen? ...)

Andere Tipps

Eigentlich nach der Erforschung dieser ziemlich viel selbst, kam ich zu dem Schluss, dass die beste Praxis für Kopf- und Fußzeilen in MVC ist eine dritte Option, einschließlich - nämlich eine Basissteuerung erstreckt. Das gibt Ihnen ein wenig mehr Flexibilität als HTXT Vorschlag, vor allem, wenn Sie einen sehr modularen Aufbau Gebäude sind (nicht nur Kopf- und Fußzeilen auch Paneele in der Sidebar, nicht-statische Menüs usw.).

Zunächst definieren eine Base_controller Klasse, in der Sie Methoden erstellen, die Seitenelemente (Header, Footer, etc.) an eine Ausgabezeichenfolge anhängen:

class Base_controller extends Controller
{
    var $_output = '';

    function _standard_header($data=null)
    {
        if (empty($data))
            $data = ...; // set default data for standard header here

        $this->_output .= $this->load->view('header', $data, true);
    }

    function _admin_header($data=null)
    {
        if (empty($data))
            $data = ...; // set default data for expanded header here

        $this->_output .= $this->load->view('admin_header', $data, true);
    }

    function _standard_page($data)
    {
        $this->_standard_header();
        $this->_output .=
            $this->load->view('standard_content', $data, true);
        echo $this->_output; // note: place the echo statement in a
                             // separate function for added flexibility
    }

    function _page_with_admin_header($data)
    {
        $this->_admin_header($data);
        $this->_output .=
            $this->load->view('standard_content', $data, true);
        echo $this->_output;
    }
}

Dann auf Ihrer Seite Controller, einfach die Basisklasse erweitern und Ihre Funktionen rufen Sie die Seite zu bauen.

class Page_controller extends Base_controller
{
    function index()
    {
        $data = ...; // Set content data here
        $this->_standard_page($data);
    }

    function admin()
    {
        $data = ...; // Set content and header data here
        $this->_page_with_admin_header($data);
    }
}

einen Basis-Controller verwenden, können Sie sehr sauberen Code in Ihrer individuellen Seite Controller erreichen und verfügen über separate Ansichten für Elemente auf der Seite (ermöglichen die Wiederverwendung von Code in beiden Ansichten und Controller). Alles, was Sie tun müssen, ist Ihre gemeinsame Seite ‚Abschnitte‘ definieren (was man versucht sein könnte, ‚Fragmente‘ zu nennen) als Funktionen in Ihren Basis-Controller.

Und wenn die Basis-Controller sollten beginnen zu wachsen unkontrollierbar (was bei großen Websites passieren kann), können Sie einige seine weniger allgemeinen Funktionen neu anordnen, indem sie in Unterklassen, und lassen Sie die entsprechende Seite Controller erweitert die anstelle der ursprünglichen Platzierung Basis-Controller.

Genießen Sie!

/ Jens Roland

Ich denke, die erste Art und Weise Sie es tun sauberer ist. Einfach aus einer Sicht, dass zu wissen, wird gemacht werden. Anstatt die View-Datei einzugeben, den Rest zu finden.

Es ist eine schlechte Praxis Ansichten innerhalb von anderen Ansichten zu nennen. Dies könnte eine Form der Steuerung Ansicht Mischung sein. Die View-Funktion in CI ermöglicht es Ihnen, einen dritten Parameter zu übergeben, die es diese Ansichten Ausgabe als String zurück führt. Sie können diese verwenden, um eine Verbindung Ansicht zu erstellen.

Zum Beispiel:

class Page extends Controller {
   function index() {
      $data['page_title'] = 'Your title';

      $this->load->view('default_layout', array(
         'header'  => $this->load->view('header' , array(), true), 
         'menu'    => $this->load->view('menu'   , array(), true), 
         'content' => $this->load->view('content', $data  , true), 
         'footer'  => $this->load->view('footer' , array(), true), 
      ));
   }
}

default_layout.php

<? echo $header, $menu, $content, $footer; ?>

Sie möchten Ihre Kopf- und Fußzeilen kombinieren, um eine Vorlage, wie dies zu machen.

class Page extends Controller {
   function index() {
      $data['page_title'] = 'Your title';

      $this->load->view('default_template', array(
         'menu'    => $this->load->view('menu'   , array(), true), 
         'content' => $this->load->view('content', $data  , true), 
      ));
   }
}

default_template.php

<html><head></head><body><span>Some Header HTML</span> // this is your header html
<? echo $menu, $content; ?>
<span>some footer HTML</span></body></html>  // this is your footer html
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top