web-dev-qa-db-ja.com

codeigniterでスラッグを使用する

クリーンURLを生成するためにスラッグを使用している人のことを聞いたことがあります。私はそれがどのように機能するのか分かりません。現在、私はこのようなURLを生成するcodeigniterサイトを持っています

www.site.com/index.php/blog/view/7

スラッグフィールドを維持することによって私が理解していることから、次のようなURLを達成することが可能です

www.site.com/index.php/blog/view/once-upon-a-time

これはどのように行われますか?特にcodeigniterに関しては?

13
esafwan

データベーステーブルの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が検索する投稿があいまいにならないようにすることをお勧めします。もちろん、そもそも投稿に一意のタイトルを付ける必要がありますが、それを適切に配置するとルールが適用され、アプリケーションが台無しになるのを防ぎます。

52
BoltClock

EricBarnesによるCISlugLibraryを使用できます。

https://github.com/ericbarnes/CodeIgniter-Slug-Library

3
alpere

ESの友達には、これを使用してアクセント付き文字をテキストヘルパーから削除してください。

    $string = 'áéíóú ÁÉÍÓÚ';    
    $slug = url_title(convert_accented_characters($string), 'dash', true));
    echo $slug; //aeiou-AEIOU
0

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);
0
Hafiz Adil