2

素敵なツリー階層に整理された製品カテゴリのグループがあり、これらを閲覧するためのハッキング可能な URL を提供したいとします。あなたはこのようなことをすることができます

/catalog/categorya/categoryb/categoryc

次に、どのカテゴリの製品をリストする必要があるかを非常に簡単に判断できます (同じ名前のカテゴリが階層内の異なる場所にある可能性があるため、完全な URL が必要であることに注意してください)。

その中に製品情報を追加するには、どのようなアプローチがよいでしょうか? 例を挙げると、このカテゴリの製品 Oblivion を表示したいとします。

/catalog/games/consoles/playstation/adventure

URL の最後に商品を追加したくなる

/catalog/games/consoles/playstation/adventure/oblivion

しかし、そうする瞬間、それがカテゴリーなのかオブリビオンと呼ばれる製品なのかを知る能力を失います。個人的には、.html などの接尾辞を強制的に追加する必要はないと感じています。

/catalog/games/consoles/playstation/adventure/oblivion.html

最も良い解決策であり、次のようなプレフィックスを使用します

/catalog/games/consoles/playstation/adventure/product:oblivion

次のようなトリガーを追加することもできます

/catalog/games/consoles/playstation/adventure/PRODUCT/oblivion

それほど良くなく、(問題になる可能性はほとんどありませんが)製品というカテゴリを持つことを制限します

これまでのところ、頭のてっぺんから考えると、接尾辞ソリューションは最もユーザーフレンドリーなアプローチのように見えますが、拡張機能を使用する必要があるのは好きではありません

これについてどう思いますか?

4

9 に答える 9

10

深い道は私をイライラさせます。彼らは共有するのが恐ろしいです。


/product/1234/oblivion --> ダイレクトページ
/product/oblivion --> /product/1234/oblivion Oblivion が独自の製品である場合、
                  --> ~ Oblivion がユニークな製品でない場合の Diambiguation ページ。

/product/1234/notoblivion -> /product/1234/oblivion

/categories/79/adventure --> プレイステーション アドベンチャー ゲーム
/categories/75/games --> コンソール ゲーム ページ
/categories/76/games --> プレイステーション ゲーム ページ
/categories/games --> 曖昧さ回避ページ。

それ以外の場合、長い URL はハッキング可能に見えますが、ハッキングするにはすべてのノード要素を正しく取得する必要があります。

php.netを取る

php.net/str_replace --> に移動
  http://nz2.php.net/manual/en/function.str-replace.php

そして、このモデルは非常にハッキングされやすいため、人々は常に盲目的に使用しています。

注: .html サフィックスは、W3C によって機能的に無意味で冗長であると見なされており、URL では避ける必要があります。

http://www.w3.org/Provider/Style/URI

于 2008-11-22T09:26:05.810 に答える
6

より DRY (非反復) にするために、URL を分析してみましょう。これがあなたが始めていることです:

/catalog/games/consoles/playstation/adventure/oblivion

実際、adventureゲームは複数のジャンルに属する可能性があるため、このカテゴリは冗長です。

/catalog/games/consoles/playstation/oblivion

次に驚くのは、コンソールも必要ないということです。PC とコンソール マシンをサブセクションとして区別するのは、おそらく良い考えではありません。それらはすべてのタイプのマシンであり、これを行うことで、別のレベルの複雑さを追加するだけです.

/catalog/games/playstation/oblivion

今、あなたは自分のサイトについていくつかの決定を下す段階にいます。playstationゲームは複数のプラットフォームとカテゴリにまたがって存在する可能性があるため、ページからカテゴリを削除することをお勧めしgamesます。URL は次のようになります。

/catalog/oblivion

では、プレイステーション用のすべてのアクション ゲームのリストを取得するにはどうすればよいでしょうか。

/catalog/tags/playstation+adventure

多分

/catalog/tags/adventure/playstation

順番はあまり関係ありません。tagsまた、それが製品の予約名であることも確認する必要があります。

/catalog最後に、競合のためにルートを削除できないと仮定しています。ただし、サイトが小さく、他のセクションがあまりない場合は、すべてをルート レベルに減らします。

/oblivion
/tags/playstation/adventure

ああoblivion、一意の製品ではない場合は、ID を含むスラッグを作成するだけです。

/1234-oblivion
于 2008-11-22T10:37:30.500 に答える
1

問題の 1 つは、「適切なツリー階層に編成された製品カテゴリのグループ」というユーザーの概念が、ユーザーの概念と一致する可能性があることです。これは、David Weinberger の「Everything is Miscellaneous」による Google Tech Talk で、物事の分類に関する興味深いアイデアが含まれています。

http://www.youtube.com/watch?v=x3wOhXsjPYM

于 2008-11-23T02:08:08.110 に答える
1

それらはすべて正常に見えます(コロンのあるものを除く)。

重要なのは、彼らが間違って推測したときにどうするかです.404に送らないでください.代わりに、知らない単語を取り出して、その単語の検索ページの結果に送信してください.そこでスペルチェック。

于 2008-11-14T13:07:15.537 に答える
1

さまざまな部品をターゲットと見なす場合、製品自体は別のターゲットにすぎません。すべてのターゲットは、target.html またはターゲットのみからアクセスできる必要があります。

カタログ/ゲーム/コンソール/playstation.html
カタログ/ゲーム/コンソール/プレイステーション

カタログ/ゲーム/コンソール/playstation/adventure.html
カタログ/ゲーム/コンソール/プレイステーション/アドベンチャー

カタログ/ゲーム/コンソール/playstation/adventure/oblivion.html
カタログ/ゲーム/コンソール/playstation/adventure/oblivion

などなど、一貫性を持たせます。

私の5セント...

于 2008-11-14T13:08:19.937 に答える
0

私は /videogames/consolename/genre/title が好きで、/ の量を使用して、カテゴリまたは製品を区別しています。複数の (または区別しにくい) ジャンルについて心配する唯一のことです。タイトルに拡張子を付けないことを強くお勧めします. また、videogames(.php)?c=x360;t=oblivion; のようなことを行って、不足している情報を推測することもできますが、/ メソッドの方が見た目がすっきりしているので気に入っています。タイトルの最初の文字を使用するか、単に videogame/console/title/ を実行します

于 2008-11-22T10:01:25.910 に答える
0

ゲームの販売とは関係ありませんが、私のささやかな経験は次のことを教えてくれます。

  • 編集者は、これらの「スラッグ」に最適な名前を​​使用しないことが多く、賢明に選択していません。
  • 多くの項目が (論理的に) 複数のカテゴリに属しているのに、なぜ (技術的に) 単一のカテゴリに制限する必要があるのでしょうか?

ID によるアイテム URL のより良い設計 (例: /item/435/ )

  • ID は安定している (データベースによって生成され、エディターによって編集できない) ため、URL は時間の経過とともに変更されない可能性がはるかに高くなります。
  • URL の category/item_name スタイルのように、データベース内のオブジェクトの編成を公開 (または依存) しません。基礎となるデザイン (オブジェクト構造) を変更して、アイテムが複数のカテゴリに属する​​ことを許可するとどうなるでしょうか? カテゴリ/アイテムの URL が突然意味をなさなくなります。URL のデザインを変更すると、古い URL が機能しなくなる可能性があります。

ラベルはカテゴリよりも優れています。つまり、アイテムが複数のカテゴリに属する​​ことを許可する方が、各アイテムに 1 つのカテゴリを割り当てるよりも優れたアプローチです。

于 2008-11-23T03:07:00.410 に答える
0

@Lou Franco ええ、どちらの方法にも頑丈なフォールバック メカニズムが必要であり、それをある種の提案ページまたは検索エンジンに送信することが適切な候補になります。

@Stefan両方をターゲットとして扱う際の問題は、それらを区別する方法です(私が説明したように)。最悪のシナリオでは、最初にデータベースにヒットして、パスを満た​​すカテゴリがあるかどうかを確認し、そうでない場合は、条件を満たす製品があるかどうかを確認します。問題は、製品パスごとに、それがカテゴリではないことを確認するためにデータベースに無駄な呼び出しを行うことになることです。

@someええ、区切り文字が可能な解決策になる可能性がありますが、.htmlサフィックスはよりユーザーフレンドリーで一般的に知られています。

于 2008-11-14T13:32:13.240 に答える
0

両方をターゲットとして扱う際の問題は、それらをどのように区別するかです (私が説明したように)。最悪のシナリオでは、最初にデータベースにヒットして、パスを満た​​すカテゴリがあるかどうかを確認し、そうでない場合は、条件を満たす製品があるかどうかを確認します。問題は、製品パスごとに、データベースに無駄な呼び出しを行って、それがカテゴリではないことを確認することになります。

だから何?製品とカテゴリを厳密に区別する必要はありません。特に URI ではそうです。ただし、余分なデータベース呼び出しによるパフォーマンスの問題を除けば、そうではありません。それが本当にあなたにとって大きな問題である場合は、次の 2 つの提案を検討してください。

  1. ほとんどのページ ビューは、おそらくカテゴリではなく製品に関するものです。そのため、最初に製品のチェックを行うことで、データベース ルックアップを 2 倍にする必要がある頻度を最小限に抑えることができます。
  2. 各ページの生成にかかった時間を表示するコードをアプリに追加し、ストップウォッチを持って最寄りのインターネット カフェ (社内 LAN ではありません! )に出かけます。サイトからいくつかのページを表示し、それぞれのページが表示されるまでの時間を計測します。ページの生成にかかった時間を引きます。また、1 つのデータベース ルックアップ ページと 2 つのデータベース ルックアップ ページの生成にかかる時間を比較します。次に、ネットワーク接続の確立、コンテンツの生成、およびコンテンツのダウンロードに合計 1 ~ 2 秒かかる場合、追加のデータベース ルックアップに 0.05 秒以下の余分な時間を費やしているかどうかが本当に重要かどうかを自問してください。 ?

人間に優しい URL を作成するなど、重要な部分を最適化します (Chris Lloyd の回答のように)。最後の可能な限りの割合を削ろうとして時間を無駄にしないでください。

于 2008-11-23T04:02:18.567 に答える