我使用codeigniter进行Web开发。随着我的学习更多,我发现了一些我无法正确实施的问题。
我有一个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 :(得分: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
模型
答案 1 :(得分: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
数组并将其发送到视图。
编辑:我建议查看@ dianuj的答案:)