it-swarm.com.de

Wie gehe ich mit Codeigniter-Vorlagen um?

Ich bin relativ neu bei MVC und habe kürzlich CodeIgniter gefunden. Ich lerne noch jeden Tag, aber ein Problem ist die Template Engine. Was ist der beste Weg, um Vorlagen in CodeIgniter zu erstellen?

CakePHP enthält eine eigene Vorlagenbibliothek. Gibt es eine ähnliche Funktion in CodeIgniter?

27
Martin

Im Gegensatz zu anderen Frameworks verfügt CodeIgniter nicht über ein globales Vorlagensystem. Jeder Controller steuert seine eigene Ausgabe unabhängig vom System. Die Ansichten sind FIFO, sofern nichts anderes angegeben ist.

Zum Beispiel, wenn wir einen globalen Header haben:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" >
<html>
    <head>
        <title><?=$title?></title>
        <!-- Javascript -->
        <?=$javascript ?>
        <!-- Stylesheets -->
        <?=$css ?>
    </head>
    <body>
        <div id="header">
            <!-- Logos, menus, etc... -->
        </div>
        <div id="content">

und eine globale Fußzeile:

        </div>
        <div id="footer">
            <!-- Copyright, sitemap, links, etc... -->
        </div>
    </body>
</html>

dann müsste unser Controller aussehen

<?php
class Welcome extends Controller {

    function index() {
        $data['title'] = 'My title';
        // Javascript, CSS, etc...

        $this->load->view('header', $data);

        $data = array();
        // Content view data
        $this->load->view('my_content_view', $data);

        $data = array();
        // Copyright, sitemap, links, etc...
        $this->load->view('footer', $data);
    }
}

Es gibt andere Kombinationen, aber bessere Lösungen gibt es durch Benutzerbibliotheken wie:

Siehe die Kommentare unten

25
Ryan Schumacher

Ich habe mehrere Möglichkeiten zum Erstellen von Codeignitervorlagen ausprobiert, und die Art, wie ich bleibe, ist die schnellste und einfachste.

Im Controller:

    //Charge the view inside array
    $data['body'] = $this->load->view('pages/contact', '', true);


    //charge the view "contact" in the other view template
    $this->load->view('template', $data);

In view template.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es"> 
<head> 
    <title>Template codeigniter</title> 
</head> 
<body> 
    <div> 
        <?=$body?>
    </div> 
    <div class="clear"></div> 
    <div>Footer</div> 
    </div> 
</body> 
</html> 

$body ist der Ansichtskontakt.

14
jruzafa

Erstellen Sie eine Bibliothek, die alle Ihre Ansichten enthält, und senden Sie die zu sendenden Daten an Ihre Inhaltsansicht. Das ist alles!

<?php
class Display_lib
{

    public function user_page($data,$name)
    {
        $CI =& get_instance ();

        $CI->load->view('preheader_view',$data);
        $CI->load->view('header_view');
        $CI->load->view('top_navigation_view');
        $CI->load->view($name.'_view',$data);
        $CI->load->view('leftblock_view',$data);
        $CI->load->view('rightblock_view',$data);
        $CI->load->view('footer_view');        
    }
}
13
SpartakusMd

Diese einfach zu verwendende und anpassbare Bibliothek erfüllt genau das, was Sie erwarten:

  • hTML-Duplizierung vermeiden (Kopfzeile, Fußzeile ..)
  • keine Notwendigkeit, eine neue Sprache zu lernen (!)

Einfachste Vorlagenbibliothek für CodeIgniter

5
Jerome Jaglale

Ich verwende CodeIgniter mit Smarty und es ist großartig (wenn Sie Smarty mögen, mache ich es).

Angenommen, Sie haben einen Artikelcontroller. Sie könnten so etwas wie folgt tun:

class Article extends Controller {
  function show_all() {
    $articles = $this->article_model->get_all();
    $this->smarty->assign('entities', $articles);
    $this->smarty->view('list');
  }
}

Und dann in deiner Vorlage:

{include file="header.tpl"}
  <ul>
  {foreach from=$entities item=entity}
  <li>{$entity.title}</li>
  {/foreach}
  </ul>
{include file="footer.tpl"}

Das Schöne daran ist, dass der Controller nicht wirklich über Kopf- und Fußzeilen Bescheid wissen muss. Es weiß nur, dass eine Gruppe von Artikeln als Liste angezeigt werden sollte. Von dort aus sind es nur die Vorlagen, die festlegen, wie eine Liste von Dingen in einem ul zwischen Kopf- und Fußzeile angezeigt wird.

Eine weitere tolle Sache, die Sie tun können, ist diese Listenvorlage für Dinge zu verwenden, die keine Artikel sind. Sie könnten eine Liste von Benutzern oder Seiten oder was auch immer haben. In manchen Fällen kann die Wiederverwendung einer Vorlage hilfreich sein. Nicht immer, aber manchmal.

Das Einrichten von CodeIgniter für Smarty ist ziemlich unkompliziert. Sie müssen die Smarty-Dateien in Ihren Bibliotheksordner kopieren und einen einfachen Wrapper dafür erstellen. Anweisungen finden Sie hier:

http://devcha.blogspot.com/2007/12/smarty-as-template-engine-in-code.html

Sobald Sie fertig sind, ist es großartig.

4
GloryFish

Nun, Sie können tatsächlich eine Codeigniter-Bibliothek für Vorlagen verwenden. Die bekanntesten sind:

  1. Codeigniter Simplicity (Aktiv entwickelt)
  2. Phil Sturgeons Vorlagenbibliothek (Nicht aktiv entwickelt)
  3. Eine Einführung in Views & Templating in CodeIgniter (Hier erstellen Sie tatsächlich eine Vorlagenbibliothek von Grund auf)
2

Ich habe zwei primäre Vorlagen. eine für die Site und eine für unser Admin-Panel. Hier ist mein Setup für unsere Hauptseite (meistens statisch) ... Ich habe mich für einen Controller mit dem Namen site entschieden. Er ruft die Vorlagendatei und jede Seite auf und erhält ihre Ansicht Datei.

Warum erwähnt niemand die Verwendung der Template-Engine? Sind -just- Ansichten besser/schneller?

  • In config/template.php habe ich die Vorlage (n) definiert. Hinweis * site_template * befindet sich im Ordner views:

    $template['site']['template'] = 'site_template';
    $template['site']['regions'] = array('title','section','col2','content',);
    $template['site']['parser'] = 'parser';
    $template['site']['parser_method'] = 'parse';
    $template['site']['parse_template'] = FALSE;
    
  • In config/routers.php richte ich Regeln ein, um die Anforderungen für den site -Regler zu behandeln, bei denen es sich hauptsächlich um Einzelsegment-URLs handelt, aber wir haben einen Abschnitt , der als solcher strukturiert ist ; /who-we-are und dann für ausgewählte Personen /who-we-are/robert-wayne und so:

    $route['what-we-do'] = 'site/what_we_do';
    $route['who-we-are'] = 'site/who_we_are';
    $route['who-we-are/(:any)'] = "site/who_we_are/$1"
    
  • Und controllers/site.php Wieder mit einer Funktion für jede Seite/Sektion:

    class Site extends CI_Controller
    {
    function __construct() {
        parent::__construct();
        $this->template->set_template('site'); // ask for the site template
        $this->load->library('mobile');
    }
    public function index()
    {
    $data = array('section' => 'home');
    $this->template->write_view('col2', 'site/menu.php', $data);
    $this->template->write('title', "COOL PAGE TITLE", TRUE);
    $this->template->write('section', $data['section'], TRUE);
    $this->template->write_view('content', 'site/welcome', $data);
    $this->template->render();
    }
    public function who_we_are()
    {
    // this bit readies the second segment.
    $slug = str_replace('-', '_', $this->uri->segment(2, 0));
    if($slug) // IF there is a second segment we load the person.
    {
    $data['bio'] = $this->load->view('site/people/'.$slug, '', true)
    } else {
    // where it loads the general view who_we_are
    }
    // and so on for each page...
    

und als feine Anmerkung lässt uns der Router "/ site /" in der URL auslassen, http: // the site.com/who-we-are

gedanken? jemand? Bueller?

2
Robert

Es gibt eine Bibliothek, in der Sie Vorlagen in CodeIgniter in einem nativen Stil verwenden können. Um eine Vorlage/ein Design zu laden, machen Sie einfach:

$this->load->theme(‘theme_name’);

Um CSS- und Javascript-Dateien aus Ihren Ansichten zu laden, haben Sie folgende Möglichkeiten:

$this->load->css(‘path/file.css’);
$this->load->js(‘path/file.js’);

Sie können optional steuern, wie Browser CSS- und JS-Dateien zwischenspeichern.

1
VangelisB

Ich bin voreingenommen gegenüber dieser von Carmelo Capinpin erstellten Vorlagenbibliothek, da sie so einfach zu bedienen ist: link text . Kopieren Sie einfach die Datei in Ihre Bibliothek und Sie können loslegen. Anweisungen zur Verwendung finden Sie in dem von mir angegebenen Link.

1
Randell

Eine Codeigniter-Vorlage ist im Allgemeinen nur eine PHP -Datei. Sie können die übliche Syntax PHP verwenden, um Variablen auszugeben, Schleifen auszuführen und anderen PHP Code aufzurufen.

Beispielcontroller:

<?php
class Blog extends Controller {

    function index()
    {
        $data['title'] = "My Real Title";
        $data['heading'] = "My Real Heading";

        $this->load->view('blogview', $data);
    }
}
?>

Beispielansicht:

<html>
<head>
<title><?php echo $title;?></title>
</head>
<body>
    <h1><?php echo $heading;?></h1>
</body>
</html>

Lesen Sie mehr in den Dokumenten hier: CodeIgniter User Guide: Views

0
pix0r

Well codeignier verfügt standardmäßig nicht über eine solche Bibliothek. Wenn Sie jedoch unterschiedliche Themen, Ansichten und Elemente verwalten möchten, versuchen Sie Folgendes:

https://github.com/mahadazad/php-layout-manager

0
PHPNinja

Gestatten Sie mir einen leichteren Weg, dies zu tun. Betrachten Sie meine Antwort auf eine ähnliche Frage .

Pros:

  1. Ihre Vorlagendatei kann eine vollständige HTML-Datei sein. Sie müssen die Kopf- und Fußzeile nicht aufteilen.
  2. Jede Ansichtsdatei kann mit minimalem Aufwand in eine Vorlage umgewandelt werden.
  3. Daten für die bestimmte Ansicht können in der Vorlage generiert werden.

Cons: 1. Möglicherweise müssen Sie ein template-Verzeichnis (oder layout_ - wenn Sie es nach Rails-Methode tun möchten) unter Views hinzufügen, um den Code richtig zu strukturieren. Dies folgt aus Pros [2] .2. Die Daten für die bestimmte Ansicht von der Steuerung müssen zuerst an die Vorlage übergeben werden.

0
iGbanam