2012-03-25 7 views
1

PHPでは記事セクションを作成しようとしています。完全に架空の記事のURLは形式で次のようになります。URLを複数の使用可能なカテゴリまたは記事に分割する方法

http://www.example.com/articles/fix/appliances/how-to-repair-a-microwave/

私は、URLの各部分が適切に必要とされるデータを表示させるとすることができるようにそれを作る方法であるにハングアップ取得していますどのような彼らが正しい形式でないものを追加した場合、状態ページは存在しません。

たとえば、訪問者がhttp://www.example.com/articles/に行った場合、すべての記事のリストが表示されます。彼らがhttp://www.example.com/articles/fix/に行った場合、修正カテゴリの記事のみが表示されます。彼らがhttp://www.example.com/articles/fix/appliances/に行った場合、修正アプライアンスカテゴリなどの記事のみが表示されます。

$ _SERVER ['REQUEST_URI']を展開して、実行する必要があるPHPコードの機能を評価できます。たとえば、フィードを表示したり、カテゴリを表示したりします。

$match = explode('/', $_SERVER['REQUEST_URI']); 

switch($match[2]) { 
    case 'feed': 
      show_rss(); 
      break; 
    default: 
      show_category(); 
      break; 
} 

私の混乱は、カテゴリと実際の記事を区別する方法です。 show_category()関数では、urlパスの最後の部分をとり、そのパスを使ってアーティクルが存在するかどうかを確認するデータベースを調べることができます。そうであれば記事を表示し、そうでなければそのカテゴリを想定します。しかし、これが最も効果的なやり方であるとは私には分かりません。

+0

私はmod_rewriteを調べることをお勧めします。あなたはそれに反対しているのですか、あまりにもすでにこの方法に入れていますか? – qitch

+0

私はmod_rewriteがこれを解決するかどうかはわかりません。例がありますか? –

答えて

1

私はスクリプトが適切な単一の場所から実行されるようにスクリプトに適切にアクセスしていると仮定しますが、目的のデータにアクセスする最も良い方法は$_SERVER['REQUEST_URI']です。個人的にはmod_rewriteを使用しますが、それはあなたの質問とは別の問題です。

あなたがこれらのページへのリンクを提供しているので、あなたがあなたの記事をキーに拡張子を追加することもできますhttp://www.example.com/articles/fix/appliances/how-to-repair-a-microwave.article/

ダッシュは常に記事のキーに存在するであろう場合は決してカテゴリキーで、あなたは可能性がありpreg_dashのためのマッチ。

それ以外の場合、データベースに対して各キーをチェックするように設定されています。私が代わりにやっていることは、カテゴリデータベースに対して各エントリを実行することです。おそらくそれが記事キーであれば、それはカテゴリテーブルと一致しないでしょうし、それを記事テーブルと照合しようとすることができます。これは、毎回記事テーブルと照合するよりも効率的です。

編集:実際には、最も頻繁に使用されるテーブルをチェックする方が効率的です。人々がカテゴリナビゲーションページを頻繁にたどる場合は、最初に最後のキーとカテゴリテーブルを照合してください。人々が記事ページをより頻繁にヒットする場合は、まず記事ページを確認する必要があります。これはサーバーのログを見て適切に反応することに過ぎません。

+0

はい、http://www.example.com/articles/への呼び出しは、実行する必要がある機能を処理する/articles/index.phpにリダイレクトされます。 mod_rewriteを使用すると言ったら、すべてのリクエストを1つのファイルにパイプするか、それをカテゴリに分割しますか? 私は自分自身をダッシュ​​に限定することはしません。記事名にしかないので、preg_matchを実行することはできません。私はすでに記事URLに識別子を追加することを考えましたが、可能ならばそれを避けたいと思います。wordpressがそれを行う方法に似たURLを探していましたが、それは別のカテゴリに分類できます。 –

+0

mod_rewriteは、すべてのリクエストを1つのファイルにパイプする方法を提供する、ほとんどのWebホストで一般に利用可能なapacheモジュールです。また、 '$ _SERVER ['REQUEST_URI']'を使ってアクセスするのではなく、あなたが扱っているURLの部分に '$ _GET'パラメータとしてアクセスすることができます。それはあなたの問題を解決することはできませんが、要求のグループを単一のファイルにリダイレクトするために具体的にやっているように、より一般的に受け入れられる方法です(あなたが与えた限られた情報から)。 – Jason

+0

カテゴリにリンクしているキーと記事にリンクしているキーとの間に差異がない場合、唯一の手段は、データベースと照合してどちらがどちらであるかを確認することです。データベースの確認方法と場所を選択する方法を明確にするために、私の答えを更新しました。 – Jason

関連する問題