2013-09-06 3 views
2

Я использую codeigniter для веб-разработки. Поскольку я изучаю это больше, я нахожу еще несколько проблем, которые я не могу получить надлежащей логической реализации.Использование модели в представлениях/контроллере в кодеигниторе

У меня есть article_controller.php и вид article.php. Я пытаюсь отобразить все заголовки статей на странице. (Этот код предназначен только для целей тестирования).

Допустим, у меня есть другая таблица с именем images, которая содержит все изображения, используемые в этой статье. Могу ли я использовать модель images_m.php на изображении article.php.

Article_Controller.php

$data['articles'] = $this->article_m->get(); //gets all of the articles 
$this->load->view('articles',$data); 

article.php

foreach($articles as $article): 
    echo $article->title; 
    $images = $this->images_m->get_by(array('article_id'=>$article->id)); //gets all the images for current article 

    foreach(images as $image): 
     echo "<img src='./uploads/".$image->filename ."'/>"; 
    endforeach; 

endforeach; 

код работает прекрасно. Я использовал аналогичный код на нескольких сайтах. Но основная проблема заключается в том, что я читал, что не стоит использовать models в представлениях. Используйте вместо этого models в controllers.

Так как я могу получить изображения для определенной статьи в контроллере.

+0

Я бы предпочел сделать это через SQL, а не PHP. –

+0

Можете ли вы сказать мне, что данные статьи и изображение статьи обе хранятся в одной таблице? –

+0

@RameezSOOMRO Извините за поздний ответ. Нет, они на другом столе. Это основная цель доступа к ним из разных таблиц. Если бы они были в одной таблице, не было бы никаких проблем. – prakashchhetri

ответ

3

Получить изображения в контроллере и объединить изображения объекта с каждым объектом статьи и передать его для просмотра

$articles= $this->article_m->get(); //gets all of the articles 

foreach($articles as $article): 

    $article->article_images = $this->images_m->get_by(array('article_id'=>$article->id)); //gets all the images for current article 
endforeach; 

$data['articles']=$articles; 
$this->load->view('articles',$data); 

Убедитесь, что вы загрузили модель images_m в контроллер

+0

очень круто спасибо – cartalot

2

Что-то вроде этого (псевдо-код) может работать:

Контроллер:

$articles = $this->article_m->get(); 
$images = array(); 

foreach($articles as $article): 
    $images[$article->id] = array(); 

    $article_images = $this->images_m->get_by(array('article_id'=>$article->id)); 
    foreach($article_images as $image): 
     $images[$article->id][] = './uploads/'.$image->filename; 
    endforeach; 
endforeach; 

$data['articles'] = $articles; 
$data['images'] = $images; 

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

Вид:

foreach($articles as $article): 
    echo $article->title; 

    foreach($images[$article->id] as $image): 
     echo "<img src='$image'/>"; 
    endforeach; 

endforeach; 

В основном просто сделать ту же работу вы делали в представлении и сделайте это в контроллере. Затем выбросьте его в массив $data и отправьте его в представление.


Edit: Я рекомендую смотреть на @ dianuj отвечают :)

Смежные вопросы