1

プロジェクトに Codeigniter を使用しています。次のような URL 構造を取得する必要があります。

メイン商品ページ

example.com/language-prefix/products/

カテゴリーから商品を選ぶ

example.com/language-prefix/products/category

カテゴリとサブカテゴリで製品を選択:

example.com/language-prefix/products/category/sub-category

カテゴリおよびサブカテゴリで特定の製品を選択します。

example.com/language-prefix/products/category/sub-category/product-name

またはカテゴリの下のみ

example.com/language-prefix/products/category/product-name

質問は-これに対する良い解決策は何ですか? 問題はここから始まるため:

example.com/language-prefix/products/category/what-ever

製品またはサブカテゴリになる可能性があるものと、その決定方法 - どのデータとビューを返す必要があるか?

私の DB テーブル構造では、製品とカテゴリの間に多対多の関係があります。つまり、1 つの製品を複数のカテゴリに割り当てることができます。すべてのカテゴリには、自己参照型の外部キー (親) があります。

商品のカテゴリ追加に制限が必要かも?または、メイン カテゴリを指定するか、または何を指定しますか?

私にはいくつかのアイデアがあります:

  1. カテゴリ/サブカテゴリと製品のすべてのルートを DB に保持します。例:

/products/watches/for-men/ /products/watches/for-men/rolex-abc-whatever-product

などなど。しかし、これは非常に遅くなる可能性があると感じています。

  1. Products コントローラ -> メソッド view() への簡単なルートを作成し、メソッド内で渡されたすべてのセグメントを通過し、

/products/category/なんでも

最初にそのような製品が存在するかどうかを確認し、true の場合は product_view とデータを返し、そうでない場合はそのようなサブカテゴリがあるかどうかを確認し、存在する場合は製品グリッドを返すか、存在しない場合は 404 を返します。

簡単な解決策は、 /products/ の後にすべてのカテゴリとサブカテゴリを保持し、次のようなカテゴリ ID を追加することだと思います

example.com/language-prefix/products/1-watches

example.com/language-prefix/products/2-for-men

しかし、これに対するより良い解決策があることを願っています。

また、私はこれを理解できません:

example.com/language-prefix/products/category/sub-category/product-name

product-name という名前の製品を返し、それらの 2 つのカテゴリの下にあるかどうかを確認する必要があるため、たとえば次の URL を使用します。

example.com/language-prefix/products/hello-kity/bla-bla/製品名

その製品を返品しません。

より良い/他の解決策はありますか?

4

1 に答える 1

0

「カテゴリ/サブカテゴリと製品のすべてのルートを DB に保持する」

上記のアイデアは CI ではうまく機能せず、おそらく CI ルーティングの仕組みを壊してしまうでしょう。ルートがコントローラー/関数を指していることを覚えておいてください。そこに着いて初めてデータベースの呼び出しを開始できます...したがって、ルートを一致させるために最初にデータベースを呼び出さなければならないため、この考えは奇妙になります。

「製品コントローラーへの簡単なルートを作成します->メソッドview()、およびメソッドで、渡されたすべてのセグメントを通過し、/products/category/what-everになると」

上記のアイデアの方が優れています。次のようなルートを使用でき$route['[a-z]{2}/products/(:any)'] = "product/index/$1";ますhttp://www.example.com/sg/products/gems/rubyおよびhttp://www.example.com/sg/products/gems/red/ rubyは両方とも、製品コントローラーの index 関数に移動します

セグメント(4) は、サブカテゴリである「赤」または製品である「ルビー」のいずれかです。セグメント(3) は常にカテゴリになります。セグメント (5) は、空または製品のいずれかです。製品またはサブカテゴリが優先されるかどうかを決定するだけで、コード ロジック内で競合しないように処理することができます。つまり、製品名とカテゴリ/サブカテゴリ名を重複させることはできません。

public function test($category = NULL, $sub_category_or_product = NULL, $product = NULL)
{
    echo $category.'<br />'; // segment(3) is always your category
    if ($product)
    {
        echo $sub_category_or_product.'<br />'; // segment(4) is a sub-category
        echo $product.'<br />'; // segment(5) is a product
    }
    else
    {
        echo $sub_category_or_product.'<br />'; // it's a sub-category or product
        // call the db and test whether its a sub-category
        // then test if its a product... or the other way around
    }
}

なぜなら、これはそれを解決するための多くの可能な方法の1つにすぎません...ただし、そのURL構造に固執する必要がない場合は...製品/カテゴリ/サブカテゴリを「/製品」の下に置くことをお勧めします/" "listing view" の URL の名前空間。詳細ビューの「/p/something」名前空間の下に製品を配置します

www.example.com/p/ruby // product details
www.example.com/products // product listing
www.example.com/products/gems // product listing
www.example.com/products/gems/red // product listing

たとえば、次を参照してください。

http://www.beautylish.com/products
http://www.beautylish.com/p/mac-mineralize-skinfinish-natural

このようにして、カテゴリ/サブカテゴリ名が製品名と衝突することを心配する必要はありません

人々はおそらくseoの製品URLに猫とサブ猫を入れたいと思っています...しかし、beautifulをチェックすると、URLを詰まらせることなく、単に製品名だけを入れることなく、非常に優れたseoが得られ、短くて読みやすくなっています.

于 2013-06-02T18:19:16.440 に答える