2013-06-21 4 views
2

J'ai une certaine expérience avec php, mais j'ai récemment commencé à apprendre Codeigniter. J'avais l'habitude d'avoir un site Web avec un volet de navigation et une barre latérale fixes, mais la section principale du site chargée dynamiquement basée sur une variable Get. Il était essentiellementComment structurer un site web dynamique avec Codeigniter

include head.php 
include navbar.php 
include sidebar.php 
include the page requested from the get variable (home, about, contact, etc.) 
include footer.php 

J'ai aimé parce que l'ensemble du site n'a pas à recharger lorsque l'utilisateur navigue de page en page.

Je n'arrive pas à comprendre comment faire avec Codeiginiter. Dois-je utiliser un contrôleur pour chaque page ou un contrôleur avec une fonction pour chaque page? Est-ce que quelqu'un sait d'un bon tutoriel qui fait quelque chose de similaire? Tous les tutoriels que j'ai vus rechargent le site entier pour chaque page.

Edit: Essentiellement, je veux faire this mais avec Codeigniter

Répondre

4

Comme il semble que vous voulez contenu relativement statique, mais vous avez chargé dynamiquement peut faire avec un contrôleur et (peut-être) une méthode dans le contrôleur.

Pour le faire avec une méthode, faire dans le contrôleur welcome:

public page($page_id){ 
    // views/header.php 
    $this->load->view("header"); 


    if($page_id = "about"){ 
     $this->load->view("about");  // views/about.php 
    } 

    else if($page_id = "contact"){ 
     $this->load->view("contact"); // views/contact.php 
    } 

    // views/footer.php 
    $this->load->view("footer"); 
} 

Cela prend une seule variable et obtenir les chiffres sur quelle page pour charger entre l'en-tête et pied de page.

De cette façon www.yoursite.com/page/about chargera la page A propos, www.yoursite.com/page/contact chargera la contact la page

Maintenant, si vous voulez vous débarrasser de la partie /page, vous devez faire une URL réacheminer dans application/config/routes.php

Alternativement vous pouvez utiliser plusieurs méthodes dans un contrôleur:

public about(){ 
    // views/header.php 
    $this->load->view("header"); 

    $this->load->view("about"); 

    // views/footer.php 
    $this->load->view("footer"); 
} 


public contact(){ 
    // views/header.php 
    $this->load->view("header"); 

    $this->load->view("contact"); 

    // views/footer.php 
    $this->load->view("footer"); 
} 

maintenant vos URL regarder plus agréable sans routage, mais vous devez charger l'en-tête/pied er pour chaque page.

1

En CodeIgniter vous pouvez le faire comme ça, vous pouvez charger des vues différentes en même temps de votre contrôleur. par exemple:

par exemple dans votre vue navbar vous avez un Contacts bouton dans votre menu qui ressemblerait à ceci:

<a href='contacts'>Contacts</a>

Dans votre contrôleur:

public function contacts() 
{ 
    $this->load->view('header'); 
    $this->load->view('navbar'); 
    $this->load->view('sidebar'); 
    $this->load->view('contacts_view'); 
    $this->load->view('footer'); 
} 

Alors nous supposons ici que vous avez déjà les vues suivantes qui sont prêtes à être chargées ( header.php, navbar.php, sidebar.php, contacts_view.php, footer.php).

MISE À JOUR: vous n'avez pas besoin d'avoir $_GET[] demande, simplement fournir le nom de la méthode de votre contrôleur dans la balise d'ancrage <a>

1

aimez-vous vraiment copier/coller de nombreux $ this-> load-> view() à n'importe quelle fonction de contrôleur? C'est un code spaghetti. Vous pouvez essayer ensuite: par exemple, nous avons le contrôleur main.php comme contrôleur par défaut. Ce contrôleur principal contient la fonction principale:

public function index() 
    { 
     ob_start(); 
     $this->load->model('mainmodel'); 
     $data = $this->mainmodel->_build_blocks(); //return array with needed blocks (header, menu, content, footer) in correct order 
     foreach ($data->result_array() as $row) { 
      $this->load->module($row['block_name']); 
      $this->name = new $row['block_name']; 
      $this->name->index(); 
     }    
     ob_end_flush(); 
    } 

Ainsi, l'autre contrôleur ont également la fonction d'index() qui peut envoyer des actions dépend de segments d'URL, préparer params etc.

contrôleur bas de page comme exemple (j'utilise Smarty comme moteur de template):

public function index() 
    { 
       $this->mysmarty->assign('year', date("Y")); 
       $this->mysmarty->view('footer'); 
       return true; 
    } 

contrôleur de contenu aura:

public function index() 
    { 
     $name = $this->uri->segment(1, 'index'); 
     $act = $this->uri->segment(2, 'index'); 
     $this->load->module($name); 
     $this->name = new $name; 
     $pageData = $this->name->_show($act); 
     if ($pageData) 
     { 
      $this->mysmarty->assign($name, $pageData); 
     } 
     $this->mysmarty->view($name); 
    } 

Cest dire si vous voulez montrer http://site.name/page/contactus, nous suivant:

1) main.php démarrer le cycle par des blocs nécessaires

2) tout d'abord, nous montrons header.tpl par le contrôleur d'en-tête

3 Ensuite, nous montrons le menu

4) alors nous appelons le contrôleur de contenu qui analyse l'URL, a trouvé ce qu'il devrait appeler la fonction _show() dans le contrôleur de page et lui passer l'action = 'contactus'. fonction _show() peut contenir un certain commutateur/construction de cas qui montrent des modèles dépend du nom d'action (contactus.tpl dans ce cas)

5) à la fin nous afficher le modèle de bas de page

Dans ce cas, nous avons la structure souple . Tous les contrôleurs doivent avoir des fonctions index() et tous les contrôleurs pouvant être appelés dans le contenu doivent avoir la fonction _show ($ act). C'est tout.

0

dans CodeIgniter i modèle à l'aide

premier fichier modèle de marque dans un dossier avec header.php, navbar.php, etc.

exemple: template.php

<?php 
echo $this->load->view('header'); //load header 
echo $this->load->view('navbar');//load navbar 
echo $this->load->view('sidebar');//load sidebar 
echo $this->load->view($body); //load dynamic content 
echo $this->load->view('footer');//load footer 
?> 

deuxième contrôleur

function index(){ 
$data['body'] = 'home'; // cal your content 
$this->load->view('template', $data); 
} 
Questions connexes