4

私はCodeigniterでチュートリアルシステムを作成していますが、チュートリアルにサブカテゴリを使用することに少し行き詰まっています。

URL構造は次のようになります:/ tutorials / test / 123 / this-is-a-tutorial

  • チュートリアルはコントローラーです
  • testはカテゴリのショートコードです
  • 123はチュートリアルIDです(SQLクエリで使用されます)
  • this-is-a-tutorial is just a slug to prettify the URL

What I do is passing the category as a first parameter and the ID as a second parameter to my controller function:

public function tutorial($category = NULL, $tutorial_id = NULL);

Now, if I want subcategories (unlimited depth), like: /tutorials/test/test2/123/another-tutorial. How would I implement this?

Thanks!

4

3 に答える 3

6

無限の引数を読み取るには、少なくとも2つの便利なツールがあります。

だからあなたのコントローラーで:

  • 最後のセグメント/引数をポップします(これはあなたのスラッグであり、必要ありません)
  • 最後の引数がチュートリアルIDであると想定します
  • 残りはカテゴリであると仮定します

このようなもの:

public function tutorial()
{
    $args = func_get_args();
    // ...or use $this->uri->segment_array()

    $slug = array_pop($args);
    $tutorial_id = array_pop($args); // Might want to make sure this is a digit

    // $args are your categories in order
    // Your code here
}

残りのコードと検証は、引数で具体的に何をしたいかによって異なります。

于 2012-07-11T14:55:56.770 に答える
0

変数カテゴリが必要な場合は、URIクラスを使用できます。$this->uri->uri_to_assoc(n)

于 2012-07-11T14:44:50.423 に答える
0

検討したいもう1つのオプションは、デフォルトの動作をオーバーライドするために使用できるCodeIgniterのコントローラー関数の再マッピング機能です。コントローラ内で単一の関数を定義して、そのコントローラへのすべての呼び出しを処理し、残りのURIパラメータを配列として渡すことができます。その後、あなたは彼らとあなたがやりたいことを何でもすることができます。

この問題に関するドキュメントリファレンスについては、こちらをご覧ください。

于 2012-07-11T23:50:18.833 に答える