Codeigniter - 锚点uri段 - 创建一个模板文件以加载动态数据

时间:2013-12-03 12:18:28

标签: php mysql codeigniter

我目前正在将一个静态网站变成一个动态网站,并且一直使用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/ - 并且它适用于删除数据而不是选择和显示它。 谢谢(抱歉这篇文章很重要)。

1 个答案:

答案 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)'])并将请求转发给任何控制器/方法/参数定义