2011-12-28 24 views
1

データベースから取得している2つのフィールドに基づいて動的URLを作成する必要があります。 最初のフィールドはmainCategoryで、2番目のフィールドはsubCategoryです。Coldfusionの動的URL

URLが構築されているがmainCategoryとサブカテゴリがダイナミックなので、私は仕事に、このページに表示する を必要とするどのようなコードを確認していないhttp://mydomain.com/cars/ford

ようになります。

+0

質問のいくつかの部分を明確にすることはできますか? 車はmainCategoryで、サブカテゴリをフォードしていますか? リンクを構築する方法や、誰かがそのリンクを使用しようとしたときに値を戻す方法を尋ねていますか? –

+0

誰かがそれを使用しようとしたときに値を戻す方法。それが私のジレンマです。 – user1068270

+0

それは価値があるため、一般に「検索エンジンにとって安全な」URLと呼ばれています。 「[ses url coldfusion](http://www.google.com/search?q=ses+url+coldfusion)」のウェブ検索では、他にも多くのリソースが必要です。 – ale

答えて

0

大きくオーバー簡素化答えはこのような何かに行くことができます。この例では

<cfquery name="getCats" datasource="dsn"> 
SELECT mainCategory, subCategory 
FROM myTable 
</cfquery> 

<cfset newURL = "http://mydomain.com/cars/ford/mainCategory/#getCats.mainCategory#/subCategory/#getCats.subCategory#" /> 

を、「getCats」の名を持つ基本的なCFQUERYは、データベーステーブル「mytableはのうちの2つの列を選択するために使用されます'結果があると仮定すると、これらの2つの値がURLに挿入され、 "newURL"という変数に保存され、コードの別の場所で使用されます。

この例は、実際には一般的なガイドラインとしてのみ使用できます。あなたの質問には明らかにされていない多くの追加の仮定があります(データベース、テーブル、DSNの名前、ユーザーが実際にそのURLに行く方法など)。この答えの範囲では扱われていません。

+0

Shawnさん、ありがとうございます。私は答えが必要な本当の質問は、このような動的URLを使用してサードパーティのユーザーに送信して、同じ結果が得られるようにする方法です。だから、私は何とか車を解体したり引き出したり、URLからフォールドしたり、テーブルと比較したりする必要があると思います。それはオプションですか? – user1068270

+0

今どこかに行ってきました。 a)URL情報を分析/抽出する - 場所を分解/解析する必要があります。b)これらの値を特定のシステムに適用される情報に変換します。任意のサードパーティURLバールを同じビジネスオブジェクトを表す*特定のバールにマッピングし、c)それらの値を上記のCFQUERYに渡します。これにより、あなたの要件に一層近似した動的URLを構築できます。繰り返しますが、まだあなたの欠けている部分がURL *バック*をユーザーに与えることになり、悲しいことに、アプリの知識がさらに必要になります。 –

0

これを行うにはいくつかの方法があります。あなたは

http://mydomain.com/cars/ford

http://mydomain.com/index.cfm?mainCategory=cars&subCategory=ford

を回すために、Webサーバー上のURL書き換えを使用することができますしかし、あなたは気にしない場合もでているindex.cfmにColdFusionでそれを行うことができますそのようなURL:

http://mydomain.com/index.cfm/cars/ford

あなたはColdFusiでそれをしたい場合あなたはlistGetAtを(使用することができます

<cfset mainCategory = "" /> 
<cfset subCategory = "" /> 

<cfset pathInfoString = reReplaceNoCase(trim(cgi.path_info), ".+\.cfm/? *", "") /> 
<cfset pathInfoArray = listToArray(pathInfoString, "/") /> 

<cfif arrayLen(pathInfoArray) gte 1> 
    <cfset mainCategory = pathInfoArray[ 1 ] /> 
</cfif> 
<cfif arrayLen(pathInfoArray) gte 2> 
    <cfset subCategory = pathInfoArray[ 2 ] /> 
</cfif> 

)の代わりに、配列に変換で、私は好む:「index.cfmに」の後のテキストは、あなたがそうのように出て解析することができますPATH_INFOと呼ばれるCGI変数に入れて、上リスト操作に対して配列操作を行います。 ReReplaceNoCase()は、パス情報の先頭にファイル名が追加される場合があると思いますが、それが必要ない場合は必要ありません。

+0

はい、これは私が必要とする行に沿っているようです。 http://mydomain.com/cars/fordをテーブルと比較できるように変換して、CarsとFordのすべての結果を表示できるようにします。私はあなたが投稿したコードとcfoutput mainCategoryとsubCategoryを使用しましたが、何も返しませんでした。ちょうど空白。 – user1068270

+0

投稿前にColdFusion 9でこれをテストしましたが、そこにCF9固有のものはないと思いました。私はtemp.cfmにコードを持ち、temp.cfm/cars/fordを使いました。 pathInfoArrayまたはpathInfoStringをダンプして値を取得してもよろしいですか? –

+0

おっとり、冷たい融合7. – user1068270