我目前正在将一个静态网站变成一个动态网站,并且一直使用codeigniter来做到这一点,直到现在。
我遇到的问题是我希望有一个视图(网页)充当模板文件,并根据点击的链接从我的数据库中提取动态数据。
在网站上有一个概述职位页面,其中有一个侧栏,列出了所有当前职位空缺。我想要的是当用户点击其中一个链接时,它将加载模板文件并提取与该工作相关的所有数据(工作描述,职位等)。
我不认为我远远没有实现这个目标,但我遇到了一些问题。
首先我在控制器中创建了一个函数( site ),它加载了一个从数据库中获取作业标题的模型和函数( getJobInfo )(取决于地点)。然后它将标题,导航,内容和内容提取到名为“作业”的视图中。
在作业概述页面中,我使用foreach语句加载作业标题,该作业标题将用作单击的链接,此处它将加载包含所有相关数据的模板文件。在这个foreach语句中,我使用了一个codeigniter锚语句在控制器中加载一个新函数(作业位置),这将用于显示和获取所有作业特定信息。我还将作业列表id作为锚点的第三段传递,新站点控制器功能(作业位置)中的新模型将使用该段,其中仅显示相关信息那个id(在哪里查询)。
如果这样做没有意义,这将澄清。
控制器 - 工作概览功能
public function jobs(){
$this->load->model("get_db");
$data['jobheader'] = $this->get_db->getJobHeader('3');
$data['joblocationlisting'] = $this->get_db->getJobLocationListing('manchester');
$data['header'] = $this->get_db->getHeaders('3');
$data['content'] = $this->get_db->getContent('2');
$this->load->view("header", $data);
$this->load->view("nav");
$this->load->view("jobs", $data);
}
模型 - 获得职位
public function getJobLocationListing($job_location){
$query = $this->db->query("SELECT job_location, job_listing_id, job_title
FROM job_location INNER JOIN job_listing ON job_location.job_location_id =
job_listing.job_location_id WHERE job_location = '$job_location'" );
return $query->result();
}
查看 - 工作
<ul>
<?php foreach($joblocationlisting as $row)
{
$title = $row->job_title;
?>
<li>
<?php
echo anchor("site/jobPosition/$row->job_listing_id", $title);
?>
</li>
<?php
}
?>
</ul>
控制器 - 工作职位职能
public function jobPosition(){
$this->load->model("get_db");
$data['jobposition'] = $this->get_db->getJobInfo();
$this->load->view("header", $data);
$this->load->view("nav");
this->load->view("jobTemplate", $data);
}
模型 - 获取工作信息
public function getJobInfo(){
$query = $this->db->where('job_listing_id', $this->uri->segment(3));
$this->db->get('job_listing');
return $query->result();
}
查看 - 工作职位 - 模板
<?php foreach($jobposition as $row)
{
$jobtitle = $row->job_title;
$jobdescription = $row->job_description;
}
?>
h1><?php echo $jobtitle; ?></h1>
<p><?php echo $jobdescription; ?></p>
我遇到的问题是锚标签正在加载函数 - site / jobPosition(和id号),例如site / jobPosition / 1。我想要的是加载锚来运行函数site / jobPosition,但是它将job_listing_id传递给函数,然后函数将它传递给 getJobInfo 模型。在这里,它将根据id cliked获取数据,然后它将返回 jobPosition 函数,以便将其显示在 jobTemplate 视图中。
我是否远离这样做因为我认为我已经非常接近本教程视频 - http://net.tutsplus.com/articles/news/codeigniter-from-scratch-day-5-crud/ - 并且它适用于删除数据而不是选择和显示它。 谢谢(抱歉这篇文章很重要)。
答案 0 :(得分:0)
到目前为止,您正在使用uri段
获取job_listing_id$query = $this->db->where('job_listing_id', $this->uri->segment(3));
您已经使用anchor()方法创建了正确的url,那么为什么然后在您的控制器中忽略传递的参数,并依赖于uri段来获取它?为什么不这样做:
public function jobPosition($job_listing_id){
$this->load->model("get_db");
$data['jobposition'] = $this->get_db->getJobInfo($job_listing_id);
$this->load->view("header", $data);
$this->load->view("nav");
this->load->view("jobTemplate", $data);
}
模型 - 获取工作信息
public function getJobInfo($job_listing_id){
$query = $this->db->where('job_listing_id', $job_listing_id);
$this->db->get('job_listing');
return $query->result();
}
当您在网址中传递其他细分时,它们会自动作为参数传递给控制器方法,因此您的网址就像你的一样,
echo anchor("site/jobPosition/$row->job_listing_id", $title);
会自动为jobPosition()控制器提供一个参数,这很可能是你想要的。
修改强>
也许我明白了。尝试更改路线:
// Put this after the default routes:
$route['jobPosition/(:num)'] = "jobPosition/jobPosition/$1";
现在确保您的控制器jobposition.php具有类jobPosition和我在此处发布的方法jobPosition($ job_listing_id)。为简单起见,我使用“jobPosition”作为方法名称,根据您的喜好更改它:路由器将选择与您的规则匹配的URL($route['jobPosition/(:num)']
)并将请求转发给任何控制器/方法/参数定义