2010-11-15 5 views

Répondre

0

Dans MVC, vous voulez vous assurer que la collecte de données (modèle), la logique (contrôleur) et l'affichage (affichage) sont séparés de manière logique. Pour ce faire, vous devez disposer d'une méthode commune pour assembler les données de votre galerie d'images que vous créez dans votre modèle et passer à votre vue via votre contrôleur. Donc, nous allons examiner une fonction de modèle hyper-simpliste comme ceci:

function getImages($param) 
{ 
    if ($param) 
    { 
     return array(
       array('id'=>1, 'caption'=>'Image 1', 'url'=>'/images/image1.jpg'), 
       array('id'=>2, 'caption'=>'Image 2', 'url'=>'/images/image2.jpg') 
     ) 
    } 
    else 
    { 
     return array(
       array('id'=>3, 'caption'=>'Image 3', 'url'=>'/images/image3.jpg'), 
       array('id'=>4, 'caption'=>'Image 4', 'url'=>'/images/image4.jpg') 
     ) 
    } 
} 

Je suis juste en utilisant $param ici pour être vrai ou faux pour répondre à votre exigence de mise en forme de la même manière « contenu différent ». Alors, maintenant que vous avez cette fonction dans vos images modèle, vous pouvez l'appeler depuis votre contrôleur comme ceci:

$images = $this->Images->getImages($param); 

Maintenant que vous avez les données dans un format cohérent, vous savez que vous pouvez toujours passer cette tableau d'images à une vue d'images qui attend toujours un certain format (dans ce cas, un tableau ou des tableaux qui contiennent des données d'image de base).

Maintenant, vous voulez créer une vue image_gallery qui ressemble fondamentalement ceci:

<div id="image_gallery"> 
    <?php foreach($images as $image) { ?> 
     <img src="<?php echo $image['url'] ?>" /> 
     <div class="image_caption"><?php echo $image['caption'] ?></div> 
    <?php } ?> 
</div> 

Bien sûr, votre galerie réelle va probablement regarder bien différent, mais l'idée est que, si votre image l'information est cohérente, vous ne devriez pas avoir de problèmes à créer votre galerie d'images. Le dernier morceau du casse-tête envoie les données images dans la vue, et qui se fait comme celui-ci de votre contrôleur:

$data = array(); 
$data['images'] = $images; //this is the var from above when we called $this->Images->getImages($param) 

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

Maintenant que nous avons cette fente dans le tableau $data appelé « images », nous serons capable d'accéder à $images dans notre vue image_gallery.

Bien sûr, vous n'avez pas toujours besoin d'appeler les vues de vos contrôleurs. En effet, il est souvent judicieux d'appeler des vues depuis l'intérieur, mais cela dépend entièrement de vos besoins. Parfois, il est même judicieux d'appeler des vues et de les renvoyer comme des chaînes d'une bibliothèque, mais juste un avertissement juste: cela peut vous éloigner facilement de la simplicité de l'approche MVC.

+0

Donc, si je cherchais à faire plusieurs galeries alors je voudrais juste avoir des méthodes séparées dans mon contrôleur qui appellent mon modèle puis envoyer cette information à mon avis? –

+0

@evilrobotz Je ne sais pas exactement quelle est votre configuration, mais imaginez que vous ayez une page contenant 2 galeries d'images, chacune avec un contenu différent. Vous pouvez obtenir les données comme ceci: '$ data ['images'] = $ this-> Images-> getImages (true); $ gallery1 = $ this-> load-> view ('image_gallery', $ data, TRUE); $ data ['images'] = $ this-> Images-> getImages (false); $ gallery2 = $ this-> load-> view ('image_gallery', $ data, TRUE); Le troisième paramètre dans le chargeur de vue renvoie la vue en tant que chaîne. Vous pouvez ensuite insérer ces chaînes dans n'importe quelle vue que vous aimez ou vous pouvez faire ces appels directement à partir d'une de vos vues. – treeface

+0

désolé, j'aurais dû être plus clair avec ma question. J'ai réussi à comprendre peu de temps après que j'ai demandé. Merci pour vos réponses détaillées. –

-1

Oui, créer une bibliothèque et accepter les paramètres d'initialisation (principalement le nom de la galerie actuelle à afficher ou à modifier) ​​est ce que vous voulez faire.

Questions connexes