2012-03-23 14 views
10

Tridion Brokerデータベースクエリ(APIを使用)から返された結果のページングを制御するコードを記述しています。Tridionページネーション - 結果の総数を取得

SDL Tridion 2011 SP1を使用しており、選択したページのコンポーネントのtcmIdを取得するためにPagingFilterを使用できます。

ただし、ページネーションコントロールを書き出しているうちに、結果の総数を知る必要があります(いくつのページがあるかを判断する必要があります)。これを行うためのより効率的なメカニズムは、 'すべての'結果のために別々のクエリを実行し、返された文字列配列の.Lengthを実行するだけですか? (明らかにこのクエリを1回だけ実行し、ユーザーがページ間をクリックするとその値を保持します)。

すべての結果が得られたら、返された情報を処理できるときにPagingFilterを使用するのはなぜでしょうか「すべて」のクエリで事前に

多くのおかげで、 ジョナサン

注:おそらく返さいずれかのタイプの2000年結果の最大があります。

+0

以前のコンテンツ配信返されたオブジェクトはキャッシュされていましたが、(正確に一致する)ブローカクエリはキャッシュされています(Tridion 2011以降)--_多分、特定のフィルタを使用する理由でしょうか?私はJavaScriptを使ったページネーションを見たことがありますが、あなたの2つのクエリアプローチよりも良いアイデアはありません。 –

+1

大きな質問Jon、 "COUNT(....)"スタイルのクエリを実行できるように見えません。 – Neil

+0

ありがとうNeil。はい、私たちはもっと効率的なCOUNT(...)メカニズムがあるかもしれないと考えました。 PagingFilterアプローチは、いくつのページがあるかを知っているか、空の配列を処理するページ数を知る必要がない場合には非常に便利ですが、これはまれだと思います。 –

答えて

6

あなたには3つの回答がありますが、どれも適切な回答ではありません。

  1. CD APIを使用して返されるアイテムのCOUNTを読み取る方法はありません。ちょっとしたエクステンションを書くことができます。それはCDストレージエクステンション、または直接DBクエリなどです。

  2. あなたのコレクションにあるアイテムの正確な数を読んでください。これらのコンポーネントのDCPを取得する目的で、コンポーネントのクエリを使用している場合は、特に注意が必要です。特定のコンポーネントに対してDCPが存在しない可能性があるため、ページ付けを行うアイテムの正確な数を知るために、すべてのDCPを最初に読み取る必要があります。明らかに、これは改ページの全目的を凌ぐでしょう。クエリを一度実行してこのパフォーマンスの低下を緩和してからしばらくキャッシュすることができますが、クエリの内容によっては各Webサイトの訪問者が異なる用語をクエリするため、パフォーマンスが高くなる可能性があります。

  3. ページネーションのアイテムの総数は本当に気にしません。たとえば、「Page 1 of 23」、「Page 2 of 23」などを表示するのではなく、Page 1、Page 2の隣にNextボタンとPrevボタンを表示するだけです。

希望します。

+0

ありがとうMihai。コンポーネントのDCPを持たないことによる影響は考慮していませんでした(2番目の提案で強調表示)。私はCD Storage Extensionのアイデアが好きです(私たちは、ウェブサイトのユーザーが後でフィルタリングできるようにする必要があるかもしれません)。しかし、今のところ私はおそらく提案2を実装し、キャッシュを使用すると思います。どうもありがとう! –

8

コンポーネントの公開中に、公開されたコンポーネントをすべてカウントし、標準のsystem.io関数を使用して読み取ったバイナリとしてテキストまたはXMLファイルに結果を公開するTBBを実装できます。また、カウントを保持するために個別にDCPを公開することもできます(次に、各出版物にスキーマとコンポーネントが必要です)。

アイデアは、レンダリング時にカウントを決定し、何とかその数値を公開することです。プレゼンテーション側で単一の番号を引き出すことは、2000年のDCPを引くよりも確実に速いでしょう。

+0

ありがとうニコリ。私はこれが良い答えだと思っています。これを公開することでより効率的になることに同意します。私はTridionクライアント間で一貫性を持たせるためのベストプラクティスeXtensionの実装を考え出すことは良いことだと思っています....今すぐに時間を見つける必要があります! –

関連する問題