Как создать несколько галерей изображений CodeIgniter с одинаковыми настройками и разным контентом? - PullRequest
0 голосов
/ 15 ноября 2010

Я новичок в CodeIgniter, MVC и ООП.Я пытаюсь создать две галереи изображений, которые основаны на разном контенте, но имеют одинаковую настройку и функциональность.Какой лучший способ настроить это?Должен ли я создать библиотеку, содержащую все функции, и вызвать ее в моих контроллерах?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2010

В 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.

0 голосов
/ 15 ноября 2010

Да, вы должны захотеть создать библиотеку и принять параметры инициализации (в первую очередь имя текущей галереи, которая будет отображаться или изменяться).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...