如何使用codeigniter创建seo友好的URL?

时间:2015-04-25 04:18:55

标签: php codeigniter

我几天都在学习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)。

我走对了路吗?需要你的建议来改善我的逻辑。

3 个答案:

答案 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获取内容。