クリーンURLを生成するためにスラッグを使用している人のことを聞いたことがあります。私はそれがどのように機能するのか分かりません。現在、私はこのようなURLを生成するcodeigniterサイトを持っています
www.site.com/index.php/blog/view/7
スラッグフィールドを維持することによって私が理解していることから、次のようなURLを達成することが可能です
www.site.com/index.php/blog/view/once-upon-a-time
これはどのように行われますか?特にcodeigniterに関しては?
データベーステーブルのslug
という列にスラッグを保存し、次のようにスラッグのある投稿を見つけます。
_public function view($slug)
{
$query = $this->db->get_where('posts', array('slug' => $slug), 1);
// Fetch the post row, display the post view, etc...
}
_
また、投稿のタイトルからスラッグを簡単に導き出すには、URLヘルパーの url_title()
を使用します。
_// Use dashes to separate words;
// third param is true to change all letters to lowercase
$slug = url_title($title, 'dash', true);
_
ちょっとしたボーナス:slug
列に一意のキー制約を実装して、各投稿に一意のスラッグを設定し、CodeIgniterが検索する投稿があいまいにならないようにすることをお勧めします。もちろん、そもそも投稿に一意のタイトルを付ける必要がありますが、それを適切に配置するとルールが適用され、アプリケーションが台無しになるのを防ぎます。
EricBarnesによるCISlugLibraryを使用できます。
ESの友達には、これを使用してアクセント付き文字をテキストヘルパーから削除してください。
$string = 'áéíóú ÁÉÍÓÚ';
$slug = url_title(convert_accented_characters($string), 'dash', true));
echo $slug; //aeiou-AEIOU
Codeigniterでページスラッグを作成する
slug_helper.phpという名前のヘルパーを作成します
<?php
if (!function_exists('create_slug')) {
function create_slug($string)
{
$slug = trim($string);
$slug = strtolower($slug);
$slug = str_replace(' ', '-', $slug);
return $slug;
} } ?>
autoload
$autoload['helper'] = array('slug');
Controller
$data = array(
'title' => $this->input->post('title'),
'content' =>$this->input->post('content'),
'slug' => create_slug($this->input->post('title'))
);
$insert_page = $this->Admin_model->insert_page($data);