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


Codeigniter - anchor uri segment - creating a template file to load in dynamic data

我目前正在将一个静态站点变成一个动态站点,并一直在使用codeigniter来完成这项工作,没有任何问题。。直到现在。

我遇到的问题是,我希望有一个视图(网页)作为模板文件,并根据点击的链接从数据库中提取动态数据。

在网站中有一个概览职位页面,其中有一个侧边栏,列出了所有当前职位空缺。我想要的是,当用户点击其中一个链接时,它将加载模板文件,并提取与该职位相关的所有数据(职位描述、职位等)。

我不认为我离实现这一目标还有多远,但我遇到了一些问题。

首先,我在控制器(site)中创建了一个函数,该函数加载一个模型和函数(getJobInfo。然后,它获取标题、导航、内容,并将其拉入名为"jobs"的视图中。

在作业概述页面中,我使用foreach语句加载作业标题,该标题将用作单击的链接,然后在此处加载包含所有相关数据的模板文件。在这个foreach语句中,我使用了一个codeigniter锚点语句在控制器中加载一个新函数(作业位置),这将用于显示和获取所有作业特定的信息。我还传入了将id列为锚的第三段的作业,该锚将由新站点控制器功能中的新模型使用(作业位置),其中它将只显示该id的相关信息(where query)。

如果这没有意义的话,这将澄清。

控制器-作业概览功能

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/-对他来说,这对删除的数据有效,而不是选择和显示数据。谢谢(很抱歉发了这么多帖子)。

嗯,坦率地说,我在理解这个问题时遇到了一些困难,所以如果我错了,请耐心等待:

到目前为止,您正在使用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();
}

当你在url中传递额外的段时,它们会自动作为参数传递给控制器方法,所以像你这样的url,

  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"作为方法名称,并根据您的喜好进行相应更改:路由器将获取与您的规则($route['jobPosition/(:num)'])匹配的URL,并将请求转发到您定义的任何控制器/方法/参数