我正在开发基于CodeIgniter的自定义博客。在我获得网址时遇到了一些问题:
/博客/视图/ 1 /我的-非常先交
我不满意我想摆脱身份和“/ view”
这就是我的控制器的样子:
function index($postId=null)
{
$this->view($postId=null);
}
function view($postId, $str_slug = '')
{
$data['title'] = ucfirst("Blog");
$data['post'] = $this->posts->get_posts($postId);
if($postId !== null)
{
$this->load->view('templates/head', $data);
$this->load->view('templates/header', $data);
$this->load->view('posts/single_view', $data);
$this->load->view('templates/footer',$data);
} else {
$this->load->view('templates/head', $data);
$this->load->view('templates/header', $data);
$this->load->view('posts/index', $data);
$this->load->view('templates/footer',$data);
}
$row = $this->db->get_where('posts', array('id' => $postId))->row();
if ($row and ! $str_slug) {
$str_slug = url_title($row->title, 'dash', TRUE);
redirect("blog/view/{$postId}/{$str_slug}");
}
}
实现这一目标的最佳方法是什么?
谢谢! 亚当
答案 0 :(得分:2)
我认为您正在寻找 _remap()方法。您可以在此处详细了解:http://ellislab.com/codeigniter/user-guide/general/controllers.html#remapping
您的代码如下所示。如果仍然需要,仍然需要实现get_posts_by_slug()方法。
public function _remap($slug) {
$data['title'] = ucfirst("Blog");
$data['post'] = $this->posts->get_posts_by_slug($slug);
if($slug !== null)
{
$this->load->view('templates/head', $data);
$this->load->view('templates/header', $data);
$this->load->view('posts/single_view', $data);
$this->load->view('templates/footer',$data);
} else {
$this->load->view('templates/head', $data);
$this->load->view('templates/header', $data);
$this->load->view('posts/index', $data);
$this->load->view('templates/footer',$data);
}
$row = $this->db->get_where('posts', array('slug' => $slug))->row();
}
<强>更新强>: 嘿@AdamLesniak - 通常很好的设计来存储博客文章或新闻文章的固定链接,因此它不依赖于标题或任何其他易变数据结构,以便仍然可访问。
但对于不同的方法,我个人认为这是一个很好的系统:
http://localhost/blog/my-news-article-title-permalink/3
主要问题是,如果你没有把slu / /永久链接存放在某个地方,那么当有人改变一篇文章的标题时,你会感到难过。例如,我的文章名为“Hello World First Blog Post”,可从以下网址访问:
http://localhost/blog/hello-world-first-blog-post
更改为“我做过的第一篇文章”:
http://localhost/blog/first-post-i-ever-made
那么初始网址会发生什么?它不再可访问 - 通过搜索引擎访问网站的任何用户,或通过某人的链接,现在都不会再看到您的评论,而是会获得404页面,您希望避免这样做。
使用永久链接的一个问题是你需要确保它们是唯一的,并且需要为此设置额外的约束。
你可以做一些技巧,但他们都有陷阱。例如,您可以使用我上面提到的系统,您可以在URL的末尾粘贴唯一标识符:
http://localhost/blog/hello-world/3
如果标题发生变化,您并不在意,因为您没有使用slug进行搜索,而是依赖于唯一标识符。
http://localhost/blog/first-post-i-ever-made/3
但是我看到这种系统反对URL(统一资源定位器)的观点。我刚开始时就把它用在了后面,它被证明是一个灵活的系统;至少可以尝试一下。
BBC通过保留文章所属的类别和条目的唯一标识符来做上述变体:
http://www.bbc.co.uk/news/business-24511283
基本上,他们知道文章永远不会改变其类别,虽然它可能会更改其标题,因此他们只保留一般主题,即业务和唯一标识符 24511283 < /强>
最后,我建议你做什么,因为到目前为止,最具扩展性的解决方案是生成以下格式:
http://localhost/blog/permalink/unique-id
上面的格式让您拥有唯一的标识符,这对于保证奇点非常重要,并且所有搜索引擎友好的永久链接都是永久的!现在,如果文章标题发生变化,请在页面上向用户显示更新后的标题,但不要对永久链接执行任何操作,以免您的网址发生变化。
通过在网址中使用ID,您确定可以多次使用永久链接,系统仍然可以正确缩放。
答案 1 :(得分:1)
我写了一篇关于这个的教程,可能会有所帮助,也可能没有帮助:http://www.rappasoft.com/tutorials/14-seo-friendly-links-with-codeigniter.html