Webサイトをasp.netに移植する必要があり、Umbracoを基盤とするCMSとして使用することに決めました。Umbracoとルートレベルの動的URLコンテンツ
問題は、現在のサイトのURL構造を維持する必要があることです。
現在のURLテンプレートには、次の
domain.com/{brand}/{product}
のように見えるこれは、サイト上の他のすべてのコンテンツでミックス以来のルートを作るのは難しいです。 domain.com/foo/bar
のようなブランドや製品ではありません。
私はIContentFinder
をコードし、それをUmbracoのパイプラインに注入しました。URL構造を確認して、domain.com/{brand}
がサイトの既知のブランドと一致するかどうかを判断します。その場合、内部ルートdomain.com/products/
を入力し、{brand}/{model}
をHttpContext Items
とし、IContentFinder
を使用して返します。
これは機能しますが、MVCコントローラが呼び出されていないことを意味します。ですから、私はcshtmlファイルのデータベースからフェッチしています。これはあまり美しくないし、MVCの慣習を破るものです。
URLはdomain.com/{brand}/{product}
で、domain.com/products/{brand}/{product}
に書き換えてから、パラメーターブランドと製品に基づいてコンテンツを提供するProductsControllerをヒットすることができます。
コンテンツツリーにはdomain.com/Porducts/の1ページしかありません。私は外部ソースから製品を入手しています。 IContentFinderでContentCache.GetByRoute( "Products /")ビットを使用してPublishedContentを設定すると、ProductsControllerによってトリガされないように見えます.Productコンテンツアイテムには独自のドキュメントタイプとテンプレートがあります。 私はテンプレートにHtml.RenderAction()を挿入し、それをProductsControllerに向けることで動作させました。しかし、私は非常にきれいだとは思わないし、最初にGetByRoute( "Products /")を呼び出すときにProductsControllerを押すことができません。 – CodeMonkey
@ CodeMonkey [OK]を、私はあなたが探しているものをほとんどどこで行うプロジェクトからいくつかのサンプルコードが含まれています。私の場合は、あなたが提供するドキュメントの種類に一致するまで、URLからセグメントを切り取るでしょう。 次に、あなたは "brand/sku"を "products/brand/sku"にre retritするURL書き換えと組み合わせることができ、上記のコードはあなたを動かすはずです。 – mortenbock
ありがとう、私は家に帰るとこれを試してみます。ProductPageControllerの動作はどのようにこのすべてに適合しますか? UmbracoのコンテンツツリーのProductPageコンテンツアイテムにテンプレートが割り当てられているか、コントローラを使用してビュー(cshtml)を返す必要がありますか? – CodeMonkey