我目前正在将静态网站变成动态网站,并且一直使用codeigniter做到这一点没有任何问题..直到现在。
我的问题是我想拥有一个充当模板文件的视图(网页),并根据单击的链接从数据库中提取动态数据。
该网站上有一个概述工作页面,其中有一个侧边栏,列出了所有当前的职位空缺。我想要的是,当用户单击这些链接之一时,它将加载模板文件并提取与该作业相关的所有数据(作业描述,职位等)。
我认为我离实现这一目标还很遥远,但我遇到了一些问题。
首先,我在controller(site)中创建了一个函数,该函数加载一个模型和函数(getJobInfo),该模型和函数从数据库中获取职位(取决于位置)。然后,它获取标题,导航,内容并将其拉入名为“ jobs”的视图。
在作业概述页面中,我使用了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获取数据,然后将其返回给jobPosition函数,以便将其显示在jobTemplate视图中。
我离这件事还很遥远吗,因为我想我和本教程视频-http://net.tutsplus.com/articles/news/codeigniter-from-scratch-day-5-crud/一样接近,它对删除的数据有效,而不是选择并显示它。
谢谢(对这么大的帖子表示抱歉)。
最佳答案
hm,坦率地说,我在理解问题上有些困难,所以如果我错了,请忍受:
到目前为止,您正在使用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具有class jobPosition类和我在此处发布的jobPosition($ job_listing_id)方法。为了简单起见,我使用“ jobPosition”作为方法名称,将其更改为您喜欢的名称:路由器将选择与您的规则(
$route['jobPosition/(:num)']
)相匹配的URL,并将请求转发到您定义的任何控制器/方法/参数