10

Tridion Brokerデータベースクエリから返される結果のページ付けを制御するためのコードを作成しています(APIを使用)。

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

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

すべての結果を取得している場合、「all」クエリで返された情報を処理できるのに、なぜPagingFilterを使用する必要があるのでしょうか。

よろしくお願いします、ジョナサン

注:1つのタイプで最大2000件の結果が返される可能性があります。

4

2 に答える 2

8

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

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

于 2012-03-24T05:46:16.543 に答える
6

私はあなたのために3つの可能な答えを持っていますが、どれもあなたが望むものではないかもしれません。

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

  2. あなたはあなたのコレクションにあるアイテムの正確な数を読みます。これは、コンポーネントのクエリを使用していて、これらのコンポーネントのDCPを取得することを目的としている場合は、特に注意が必要です。特定のコンポーネントにDCPがない可能性があるため、ページ付けするアイテムの正確な数を知るには、最初にすべてのDCPを読み取る必要があります。明らかに、これはページ付けの目的全体を無効にします。クエリを1回実行してからしばらくキャッシュすることで、このパフォーマンスの低下を軽減できますが、クエリの内容によっては、各Webサイト訪問者が異なる用語をクエリするため、パフォーマンスへの影響が大きくなる可能性があります。

  3. ページネーション内のアイテムの総数はあまり気にしません。したがって、たとえば、「ページ1/23」、「ページ2/23」などを表示するのではなく、ページ1、ページ2の横に[次へ]ボタンと[前へ]ボタンを表示するだけです。

お役に立てれば!

于 2012-03-23T16:17:04.743 に答える