В MVC вы хотите убедиться, что сбор данных (модель), логика (контроллер) и отображение (представление) логически разделены.Чтобы сделать это, вам понадобится какой-то общий метод объединения данных галереи изображений, которые вы создаете в своей модели, и передачи их на просмотр через ваш контроллер.Итак, давайте рассмотрим гиперпростую функцию модели, подобную этой:
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')
)
}
}
Я просто использую $param
здесь, чтобы быть либо истинным, либо ложным, чтобы выполнить ваше требование для «другого контента», отформатированного таким же образом,Теперь, когда у вас есть эта функция в вашей модели Images , вы можете вызывать ее из своего контроллера следующим образом:
$images = $this->Images->getImages($param);
Теперь, когда у вас есть данные в согласованном формате, вы знаете,что вы всегда можете передать этот массив изображений в представление изображений, которое всегда ожидает определенный формат (в данном случае это массив или массивы, в которых есть базовые данные изображений).
Теперь вам нужно создатьпредставление image_gallery, которое в основном выглядит следующим образом:
<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>
Конечно, ваша фактическая галерея, вероятно, будет выглядеть совсем по-другому, но идея здесь в том, что, если информация об изображении непротиворечива, вы не должны иметьлюбые проблемы с созданием вашей галереи изображений.Последний кусочек головоломки - отправка данных изображений в представление, и это делается так с вашего контроллера:
$data = array();
$data['images'] = $images; //this is the var from above when we called $this->Images->getImages($param)
$this->load->view('image_gallery', $data);
Теперь, когда у нас есть этот слот в массиве $data
, называемый «images», мы сможем получить доступ к $images
в нашем представлении image_gallery.
Конечно, вам не всегда нужно вызывать представления с ваших контроллеров.Действительно, часто имеет смысл вызывать представления изнутри, но это полностью зависит от ваших требований.Иногда даже имеет смысл вызывать представления и возвращать их как строки из библиотеки, но просто справедливое предупреждение: выполнение этого может легко увести вас от простоты подхода MVC.