web-dev-qa-db-fra.com

Comment traiter avec les modèles Codeigniter?

Je suis assez nouveau sur MVC et j'ai récemment découvert CodeIgniter. J'apprends encore tous les jours, mais le moteur de ses modèles est un problème. Quel est le meilleur moyen de créer des modèles dans CodeIgniter?

CakePHP possède sa propre bibliothèque de modèles. Existe-t-il une fonctionnalité similaire dans CodeIgniter?

27
Martin

Contrairement à d'autres frameworks, CodeIgniter n'a pas de système de template global. Chaque contrôleur contrôle sa propre sortie indépendamment du système et les vues sont FIFO, sauf indication contraire.

Par exemple, si nous avons un en-tête global:

<!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">

et un pied de page mondial:

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

alors notre contrôleur devrait ressembler à

<?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);
    }
}

Il existe d'autres combinaisons, mais de meilleures solutions existent via les bibliothèques d'utilisateurs telles que:

Voir les commentaires ci-dessous

25
Ryan Schumacher

J'ai essayé plusieurs façons de créer des modèles de codeigniter et la façon dont je reste est la plus rapide et la plus simple est la suivante.

Dans le contrôleur:

    //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);

Dans la vue 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 est le contact de vue.

14
jruzafa

Créez une bibliothèque qui inclut toutes vos vues et envoyez-lui les données que vous devez envoyer à votre vue de contenu. C'est tout!

<?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

Cette bibliothèque, facile à utiliser et à personnaliser, fait exactement ce que vous attendez:

  • éviter la duplication HTML (en-tête, pied de page ..)
  • pas besoin d'apprendre une nouvelle langue (!)

Bibliothèque de modèles la plus simple pour CodeIgniter

5
Jerome Jaglale

J'utilise CodeIgniter avec Smarty et c'est génial (si vous aimez Smarty, je le fais).

Supposons que vous ayez un contrôleur d’article, vous pourriez faire quelque chose comme ça:

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

Et ensuite dans votre modèle:

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

La bonne chose à ce sujet est que le contrôleur n'a pas vraiment besoin de connaître les en-têtes et les pieds de page. Il sait simplement qu'un groupe d'articles doit être affiché sous forme de liste. À partir de là, seuls les modèles sont chargés de définir le mode d'affichage d'une liste d'éléments, dans ce cas, entre un en-tête et un pied de page.

Une autre chose intéressante à faire est d'utiliser ce modèle de liste pour les éléments qui ne sont pas des articles. Vous pourriez avoir une liste d'utilisateurs ou de pages ou autre chose. Dans certains cas, la réutilisation d'un tel modèle peut être utile. Pas toujours, mais parfois.

Configurer CodeIgniter pour smarty est assez simple. Il suffit de copier les fichiers Smarty dans votre dossier de bibliothèque et de créer un simple wrapper pour cela. Vous pouvez trouver des instructions ici:

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

Une fois que vous obtenez est mis en place c'est génial.

4
GloryFish

En fait, vous pouvez utiliser une bibliothèque codeigniter pour les modèles. Les plus célèbres sont:

  1. Simplicité Codeigniter (développé de manière active)
  2. Bibliothèque de modèles de Phil Sturgeon (non développé activement)
  3. Une introduction aux vues et aux modèles dans CodeIgniter (vous créez ici une bibliothèque de modèles à partir de rien)
2
John Skoumbourdis

Il existe une bibliothèque qui vous permet d’utiliser des modèles dans CodeIgniter dans un style natif . Pour charger un modèle/thème, il suffit de:

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

Pour charger des fichiers CSS et javascript à partir de vos vues, vous pouvez:

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

Vous pouvez éventuellement contrôler la manière dont les navigateurs mettent en cache les fichiers CSS et JS.

1
VangelisB

Je suis partisan de cette bibliothèque de modèles créée par Carmelo Capinpin, car elle est si facile à utiliser: link text . Copiez simplement le fichier dans votre bibliothèque et vous êtes prêt à partir. Les instructions sur son utilisation se trouvent dans le lien que j'ai fourni.

1
Randell

Un modèle Codeigniter est généralement juste un fichier PHP. Vous pouvez utiliser toute la syntaxe habituelle PHP pour générer des variables, faire des boucles et appeler un autre code PHP.

Contrôleur d'échantillon:

<?php
class Blog extends Controller {

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

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

Exemple de vue:

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

Plus d'informations dans la documentation ici: Guide de l'utilisateur CodeIgniter: Views

0
pix0r

Bien, codeignier n’a pas cette bibliothèque par défaut. Toutefois, si vous souhaitez gérer différents thèmes, vues et ressources, essayez ceci:

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

0
PHPNinja

Permettez-moi de proposer un moyen plus simple de le faire. Considérez ma réponse à une question similaire .

Avantages:

  1. Votre fichier de modèle peut être un fichier HTML complet. Vous n'êtes pas obligé de casser l'en-tête et le pied de page.
  2. Tout fichier de vue peut être transformé en un modèle avec un effort minimal.
  3. Les données pour la vue spécifique peuvent être générées dans le modèle.

Inconvénients: 1. Vous devrez peut-être ajouter un répertoire template (ou layout— si vous voulez le faire à la manière Rails) sous vues afin de structurer votre code correctement. Cela découle de Pros [2] . 2. Les données de la vue spécifique du contrôleur doivent tout d’abord être transmises au modèle.

0
iGbanam