我几天都在学习Codeigniter,我想知道在Codeigniter上创建博客,但是我想到了两个问题。
1. How to create SEO Friendly URL just like WordPress is using
。
2. How to get page content after navigate to that URL
。
我创建了表tbl_post
,我在其中存储帖子详细信息和表格结构:
1. ID
2. Title
3. Content
4. Tags
5. Status
6. Create Time
7. Update Time
8. Author ID
9. Status
现在我想从上表创建动态帖子URL。
例如:http://www.example.com/hello-world/
导航到上面的URL之后,如何获取hello-world帖子的内容?
您已注意到我没有将任何ID传递给示例网址来获取内容。任何建议,如果我传递ID而不想显示在URL字符串中?
就是这样。
我会感激如果你以正确的方式引导我。
感谢。
主页(我的博文列表视图)
家庭控制器:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Home extends CI_Controller {
public function index()
{
$this->load->model("HomeModel"); // Load home model
$data['postData'] = $this->HomeModel->postData(); // Get posts data from postData function
$this->load->view("global_header"); // Include header area
$this->load->view("home", $data);
$this->load->view("global_footer"); // Include footer area
}
}
主页型号:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class HomeModel extends CI_Model{
public function postData()
{
$this->db->select('tbl_post.*, tbl_user.first_name, tbl_user.last_name');
$this->db->from('tbl_post');
$this->db->join('tbl_user', 'tbl_post.author_id = tbl_user.id', 'Left Join');
$query = $this->db->get();
return $query->result();
}
}
主页视图
<?php for($i=0; $i<count($postData); $i++): ?>
<?php
$postID = $postData[$i]->id;
$postTitle = $postData[$i]->title;
?>
<a href="<?php echo base_url("$postID/$postTitle"); ?>">
<h2 class="post-title">
<?php echo $postTitle; ?>
</h2>
</a>
</div>
<hr>
<?php endfor; ?>
现在,我的网址如下所示:http://example.com/1/man-must-explore-and-this-is-exploration-at-its-greatest
Domain: http://example.com
ID: 1
Title: man-must-explore-and-this-is-exploration-at-its-greatest
我创建了另一个view(post)
来显示帖子ID的内容(从网址中提取ID)。
我走对了路吗?需要你的建议来改善我的逻辑。
答案 0 :(得分:3)
回答第一个问题
CodeIgnitor是oop概念框架,它使用 M odel V iew C ontroller。( MVC 架构)
因此,每次点击网站都会转到Controller。然后,只有控制器将决定显示什么或下一步做什么。
如果有3页(例如:家庭,产品,请联系我们),请使用3个控制器(主页=使用默认控制器,产品=使用product
,联系我们=使用contact
) 。
那么您的网址(如果您点击产品)会显示www.test.com/product
,如果您点击“联系”,则显示www.test.com/contact
。
回答第二个问题
在你的表格中始终保持自动增量ID(必须)。然后你可以将id传递给控制器并获得你想要的数据。
代表。我将一些内容加载到页面。(产品上的内容)。
您的数据显示页面(查看)
<?php
foreach ($product as $variable) // $product is data array which you send data
{
?>
<div class="content">
<a href="[call your controller here, in my `product`]/[*call sub function*, i use `show`]/ [*then pass here to product id*]<?php echo $variable['id']"></a>
<div>
<?php
}
?>
所以你的网址看起来像(点击产品后,该产品的假设ID为25)www.test.com/product/show/25
然后在产品控制器中创建
public function show($id)//$id variable to assign value which coming through URL
{
1. your code
2. then load view
}
答案 1 :(得分:1)
我为一个旅游门户网站做了SEO友好网址,其方法与wordpress类似。使用slug
中的tbl_post
列,以便随时根据需要轻松更改。假设您有一个像
如何使用codeigniter创建seo友好网址?
然后首先以小写形式创建标题,用-
替换所有空格和特殊字符,以便你的slug看起来像这样
如何创建-seo-friendly-url-with-codeigniter
现在稍后当页面加载时,您必须检测ID以获取特定帖子的数据,然后将ID附加到URL how-to-create-seo-friendly-url-with-codeigniter-15
的末尾,其中15是特定帖子的ID。
因此,当你调用主控制器的时间匹配post id和slug然后rendor相关数据,否则显示404错误。
同时修改config/routes.php
,这样您就可以获得以下网址:http://www.example.com/how-to-create-seo-friendly-url-with-codeigniter-15/
答案 2 :(得分:0)
步骤1:您需要添加一个字段&#34; slug&#34;在你的桌子上。 第2步:因为你将保存帖子,你可以使用你的帖子标题作为slug,因为你提到了hello world。你可以用&#34; - &#34;替换空格。标志。所以你的头衔应该是独特的。
第3步:你可以在URL中传递slug值而不是post id,并且可以根据你的slug获取内容。