2009-07-23 16 views
2

Was ist der beste Weg, um Controller/Ansichten in CodeIgniter zu verwenden?Ist dies eine gute Möglichkeit, Controller und Ansichten in CodeIgniter zu verwenden?

Ist das Folgende ein schlechter Weg, um meine Seiten zu erstellen?

function index() 
{ 
    $this->load->library('carabiner');  
    $this->load->view('include/head'); 
    $this->load->view('include/home'); 
    $this->load->view('top'); 
    $this->load->view('featured'); 
    $this->load->view('eventslist'); 
    $this->load->view('footer');  
} 

function create() 
{ 
    $this->load->view('include/head'); 
    $this->load->view('top'); 
    $this->load->view('page'); 
    $this->load->view('dynamicstuff'); 
    $this->load->view('footer'); 
} 

Ich bin quasi-Templating auf diese Weise, und es funktioniert gut die Umrisse der Website für immer, aber es ist der beste Weg, eine App zu erstellen? Ich arbeite seit einer Woche in CodeIgniter und bin neu in PHP.

Antwort

1

enthält Es gibt einen Download namens CodeIgniter Library, dass all dies sehr einfach macht, . Sobald Sie lernen, wie Sie es implementieren, wird die Codierung sehr einfach. Außerdem können Sie jede Seite oder jeden Controller so ändern, dass sie verschiedene Vorlagen (Layouts) haben.

das System verwenden ich oben Sie erwähnt, kann Folgendes tun:

<?php 

    function index() { 

     $data['some_variable'] = 'some data'; 

     $this->template->write_view('content', 'page/home', $data); 
     $this->template->render(); 

    } 

?> 

Überall ändern Sie können auch die Sie verwenden Vorlage wünschen:

<?php 

    $this->template->set_template('login'); 

?> 

Alle diese Vorlagen haben Namen, die gehalten werden in einer Konfigurationsdatei. Sie können so viele Vorlagen haben, wie Sie möchten.

Die Vorlagendatei selbst würde wie folgt aussehen:

<html> 
.... etc. all other html elements 
    <body> 
     header html goes here 

     <?=$content?> 

     footer html goes here 
    </body> 
</html> 

Sie können sogar Abschnitte einrichten können, um Ihre Inhalte zu schreiben. Ich glaube nicht, in der Regel dies tun, weil es eine Menge von Ansichten ist, einschließlich, aber wenn Sie die volle Kontrolle wie diese brauchen, sind Sie immer noch so tun können:

<?php 

    function index() { 

     $data['header'] = 'header info'; 
     $data['content'] = 'content info'; 
     $data['sidebar'] = 'sidebar info'; 
     $data['footer'] = 'footer info'; 

     $this->template->write_view('content', 'page/home', $data); 
     $this->template->write_view('header', 'modules/header'); 
     $this->template->write_view('sidebar', 'modules/sidebar'); 
     $this->template->write_view('footer', 'modules/footer'); 

     $this->template->render(); 

    } 

?> 

HTML-Template-Code:

<html> 
.... etc. all other html elements 
    <body> 
     <div id="header"> 
      <?=$header?> 
     </div> 

     <div id="content"> 
      <div id="left"> 
       <?=$content?> 
      </div> 

      <div id="sidebar"> 
       <?=$sidebar?> 
      </div> 
     </div> 

     <div id="footer"> 
      <?=$footer?> 
     </div> 
    </body> 
</html> 

Auf diese Weise müssen Sie sich nur darum kümmern, eine Datei in alle Controller-Funktionen aufzunehmen. Wenn Sie nicht PHP 5 verwenden (Sie sollten wechseln), dann sollten Sie statt <?=$content?> verwenden.

3

Ich würde nur eine Ansicht pro Funktion laden:

function index() 
{ 
     $this->load->library('carabiner');    
     $this->load->view('index'); 
} 

function create() 
{ 
     $this->load->view('create'); 
} 

Dann sind die anderen Vorlagendateien z.B. für index.php:

<?php 
    include 'include/head'; 
    include 'include/home'; 
    include 'top'; 
    include 'featured'; 
    include 'eventslist'; 
    include 'footer'; 
?> 

Natürlich könnten Sie Gruppe diese Ansichten sich und schließen dann eine Ansicht, die selbst Header und Navigation usw.

+0

Verbessert dies die Leistung? –

+0

Leistung der Website? Ich denke nicht. Leistung der Programmierung? Definitiv, da Sie eine Trennung von Controllern und Ansichten haben und - richtig ausgeführt - zwischen Layout und Inhalt. – Residuum

+0

Ja das ist ein gutes Modell. Ihr Controller sollte nicht alles über Kopf- und Fußzeilen wissen müssen und dass das Feature der Markup-Liste vorausgeht. Das ist die Aufgabe des Views. – GloryFish

3

In allen meinen Controllern behalte ich ein Array, das ich $ page_data nenne. Dies enthält alle Dinge, die ich an meine Ansicht weitergeben muss: Seitentitel, Ressourcen (js/css) zum Laden, Meta-Beschreibung und Inhalt.

Es sieht ungefähr so ​​aus:

function index(){ 
    $page_data['title'  ] = 'My Page Title'; 
    $page_data['description' ] = 'All about my great page.'; 
    $page_data['content_file' ] = 'pages/index'; 
    $page_data['content_data']['books'] = $this->Books_model->get_books(); 
    $this->load->view('page-template', $page_data); 
} 

dann unter Ansichten, ich habe 'page-template.php', 'header.php', 'nav.php', 'footer.php' und ' Seiten/index.php '. Alles wäre einfaches HTML/PHP mit der Seitenvorlage.php suchen etwas wie folgt aus:

... 
<title><?php echo $title ; ?></title> 
.... 
<body> 
    <?php $this->load->view('header'); ?> 
    <?php $this->load->view('nav'); ?> 
    <?php $this->load->view($content_file, $content_data); ?> 
    <?php $this->load->view('footer'); ?> 
</body> 

das gleiche Muster folgend, können Sie es praktisch finden eine ‚Teil template.php‘ haben oder vielleicht ‚json-template.php‘ für Ajax/Daten-Feed-Seiten.

Dieses Modell erweist sich als sehr flexibel, da Ihre Websites wachsen.

0

Meine Lösung.

function index() 
{ 
    $data['main'] = 'content_view'; 

    $this->load->vars($data); 
    $this->load->view('template'); 
} 

Then ... template.php

<html> 
<body> 
<div class="header">.... blah...</div> 
<div class="main"><?php $this->load->view($main); ?></div> 
<div class="footer">.... (c)2009, etc.</div> 

ich nie die Kopf- und Fußzeile einen Grund Faktor aus Sicht gesehen habe.

+0

Ich nehme diese heraus, weil die Bereiche über und unter dem Hauptinhalt sich manchmal außerhalb des Indexes ändern werden –

+0

Richtig ... Welches ist, warum Sie die Hauptansicht laden ... Ich bin nur, wie oft der 'Header' ist anders auf verschiedenen Seiten? Dann ist es nicht mehr wirklich ein Header, es ist Teil des Inhalts dieser Seite. – Zack

Verwandte Themen