2

Codeigniterでのルーティングに関していくつか質問があります。私が今していることは次のとおりです。

$route['articles/(:num)'] = 'articles/view/$1'; // $1 will contain an ID

これは、example.com / articles / 123が完全に機能し、IDが123の記事をロードすることを意味します。ただし、URLにアティクルのタイトルを追加することもできます(SEOの場合)。例:example.com/articles/123/article-title

私が欲しいのはStackOverflowとほとんど同じです:stackoverflow.com/questions/123/the-title

どうやってやるの?

また、StackOverflowがどのように機能するのか疑問に思っています。stackoverflow / questions / 111に移動すると、タイトルが自動的にURLに追加されます。それはphpredirect()で行われますか?

4

3 に答える 3

5

私は過去に似たようなことをしました。私はそれを見つけることができませんが、IIRC(それは数ヶ月前でした)あなたがしたようにルートを使用することができます。

$route['articles/(:num)/(:any)'] = 'articles/view/$1/$2';
$route['articles/(:num)'] = 'articles/view/$1';

ご覧のとおり、どちらも同じメソッドにマップされていますが、これは一種の「オーバーロード」です。デフォルト値を使用して、不足しているパラメーターを補うことができます。

function articles($id,$slug = FALSE) 
{ }

記事の検索で 2 番目のパラメーターを単に無視します。

タイトルの追加に関しては、次のことができます。

  1. データベースに「スラッグ」フィールドがあり、記事が保存されたときに作成されます。快適なurl_title($title,'dash',TRUE)関数 (url ヘルパー内) を$title使用できdashます。
  2. 上記の関数を使用して、記事のタイトルを (データベースから取得した後に) 「オンザフライ」で変換します。2 番目のパラメーターが false でない場合は article() メソッドを確認するだけで、スラッグを作成する必要があるかどうかがわかります。

スラッグなしで URL を使用している場合でもスラッグを表示する方法については、ご想像のとおり、リダイレクトを作成できますが、両方のルートが同じメソッドを指しているため、何も変更されません。

ええと、リダイレクトの呼び出し中のループに注意してください。注意深く確認してください ;)

于 2012-06-12T17:33:44.190 に答える
0

テーブルにスラッグ フィールドを作成し、id として使用する URL を入力することをお勧めします。説明させてください。

あなたはこのテーブルを持っています

id
title
slug

記事をデータベースに保存すると、動的にスラッグを作成できます。次に例を示します。

id: 1
title: My first post
slug: 1-my-first-post

次に、ページのスラッグ (この場合は 1-my-first-post) 広告 ID を使用できます。次のように呼び出すことができます。

www.example.com/articles/1-my-first-post

明らかに、あなたのデータベース選択でそれを処理する必要があります

于 2012-06-12T17:17:15.790 に答える
0

コメントで議論したように。

次のように、それぞれ異なるパラメーターを使用して、ルートを複数回作成できます。

$route['articles/(:num)/(:any)']
$route['articles/(:num)']

タイトルを追加するかどうかにかかわらず、リダイレクトを使用して関数を作成します。

それが役に立てば幸い。

于 2012-06-12T17:35:59.920 に答える