Meilleures pratiques: Quel est le meilleur moyen de construire des en-têtes et des pieds de page?

StackOverflow https://stackoverflow.com/questions/176856

  •  05-07-2019
  •  | 
  •  

Question

Quel est le meilleur moyen de créer des en-têtes et des pieds de page? Devez-vous appeler tout cela à partir du contrôleur ou inclure à partir du fichier de vue? J'utilise CodeIgniter, et je veux savoir quelle est la meilleure pratique pour cela. Charger tous les fichiers de vue inclus à partir du contrôleur, comme ceci?

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

}

ou en appelant le fichier de vue unique, puis en appelant les vues d'en-tête et de pied de page à partir de là:

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

Je l'ai vu faire les deux, mais je veux choisir maintenant avant d'aller trop loin dans un chemin.

Était-ce utile?

La solution

Vous pouvez également essayer de cette façon: définissez un modèle de vue par défaut, qui extrait ensuite le contenu en fonction d'une variable ("contenu" dans mon exemple) transmise par le contrôleur.

Dans votre contrôleur:

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

// more code...

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

Définissez ensuite une mise en page par défaut pour toutes les pages, par exemple. views / layouts / default.php

// doctype, header html etc.

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

// footer html etc.

Ensuite, vos vues peuvent uniquement contenir le contenu pur, par exemple. views / your_controller / index.php peut contenir uniquement les variables transmises depuis le tableau contrôleur / données

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

Plus de détails sur le wiki / FAQ de CI - (Q. Comment incorporer des vues dans des vues ? Modèles imbriqués? ...)

Autres conseils

En fait, après des recherches approfondies, je suis parvenu à la conclusion que la meilleure pratique pour inclure des en-têtes et des pieds de page dans MVC est une troisième option, à savoir l'extension d'un contrôleur de base. Cela vous donnera un peu plus de flexibilité que la suggestion de htxt, en particulier si vous construisez une présentation très modulaire (pas seulement l'en-tête et le pied de page, les panneaux de la barre latérale, les menus non statiques, etc.).

Définissez d'abord une classe Base_controller dans laquelle vous créez des méthodes qui ajoutent les éléments de votre page (en-tête, pied de page, etc.) à une chaîne de sortie:

class Base_controller extends Controller
{
    var 

En fait, après des recherches approfondies, je suis parvenu à la conclusion que la meilleure pratique pour inclure des en-têtes et des pieds de page dans MVC est une troisième option, à savoir l'extension d'un contrôleur de base. Cela vous donnera un peu plus de flexibilité que la suggestion de htxt, en particulier si vous construisez une présentation très modulaire (pas seulement l'en-tête et le pied de page, les panneaux de la barre latérale, les menus non statiques, etc.).

Définissez d'abord une classe Base_controller dans laquelle vous créez des méthodes qui ajoutent les éléments de votre page (en-tête, pied de page, etc.) à une chaîne de sortie:

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

Ensuite, dans vos contrôleurs de page, développez simplement la classe de base et appelez vos fonctions pour construire la page.

<*>

À l'aide d'un contrôleur de base, vous pouvez obtenir un code très propre dans vos contrôleurs de page individuels ET disposer de vues séparées pour les éléments de la page (ce qui permet de réutiliser le code dans les vues et les contrôleurs). Il vous suffit de définir les "sections" de votre page commune (appelez ce que vous pourriez être appelé "fragments") en tant que fonctions dans votre contrôleur de base.

Et si le contrôleur de base commence à se développer de manière incontrôlable (ce qui peut arriver sur des sites volumineux), vous pouvez réorganiser certaines de ses fonctions moins générales en les plaçant dans des sous-classes et laisser les contrôleurs de page correspondants les étendre au lieu de ceux d'origine. contrôleur de base.

Profitez!

/ Jens Roland

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

Ensuite, dans vos contrôleurs de page, développez simplement la classe de base et appelez vos fonctions pour construire la page.

<*>

À l'aide d'un contrôleur de base, vous pouvez obtenir un code très propre dans vos contrôleurs de page individuels ET disposer de vues séparées pour les éléments de la page (ce qui permet de réutiliser le code dans les vues et les contrôleurs). Il vous suffit de définir les "sections" de votre page commune (appelez ce que vous pourriez être appelé "fragments") en tant que fonctions dans votre contrôleur de base.

Et si le contrôleur de base commence à se développer de manière incontrôlable (ce qui peut arriver sur des sites volumineux), vous pouvez réorganiser certaines de ses fonctions moins générales en les plaçant dans des sous-classes et laisser les contrôleurs de page correspondants les étendre au lieu de ceux d'origine. contrôleur de base.

Profitez!

/ Jens Roland

Je pense que la première façon dont vous le faites est plus propre. Simplement du point de vue de savoir que cela va être rendu. Plutôt que d'avoir à entrer dans le fichier de vue pour trouver le reste.

Il est déconseillé d'appeler des vues à l'intérieur d'autres vues. Cela pourrait être une forme de mélange de vue de contrôleur. La fonction de vue dans CI vous permet de transmettre un troisième paramètre qui lui permet de renvoyer cette vue sous forme de chaîne. Vous pouvez utiliser cela pour créer une vue composée.

Par exemple:

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

Vous pouvez combiner votre en-tête et votre pied de page pour créer un modèle comme celui-ci.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top