2

今日、クライアントから興味深いリクエストがありましたが、Drupal Views を使用してそれを解決する最善の方法が正確にはわかりません。現在、スタッフのメンバーを表す「チーム メンバー」コンテンツ タイプがあります。各スタッフ メンバー ページには、他のすべてのスタッフ メンバー ページへのリンクがあります。これまでのところ、それは問題ではありません。

彼らは、このリストが現在見ている人から始まり、「ソートされた」順序ですぐ後に続く人に進むことを望んでいます. 次に、リストの最後に到達すると、ラップアラウンドし、元に戻るまで最初に戻ります (循環リンクリストの動作と同様)。

たとえば、チーム メンバー A、B、C、D、E、F、および G がいるとします。

  • チーム メンバー A を見ている場合、リストの順序は A、B、C、D、E、F、G です。
  • チーム メンバー D を見ている場合、リストの順序は、D、E、F、G、A、B、C です。
  • チーム メンバー G を見ている場合、リストの順序は G、A、B、C、D、E、F です。

通常のプログラミング環境で他のデータ構造を扱っていた場合、現在どこにいるかを判断し、そこからソートを開始して「循環リスト」を偽造するための何らかのアルゴリズムを思いつくことができると確信しています。ビューはもう少しトリッキーなようです。

私が考えることができる唯一の潜在的な解決策は、2 つの別々のビューを作成し、事後に結果を結合することです。

  1. 1 つのビューは、現在のチーム メンバー以上の並べ替え番号を持つすべてのチーム メンバーの並べ替えられたリストです。
  2. 現在のチーム メンバー以下の並べ替え番号を持つすべてのチーム メンバーの並べ替えられたリストである 2 番目のビュー。

ビューでこの種の並べ替えを行うより効率的な方法があるかどうか、私はただ興味がありますか?

4

2 に答える 2

1

すべての結果を 1 つのページに含めることができる限り、おそらく、あなたが言及した解決策が最適です: 2 つのビュー (おそらく Oswald が示唆するように、テンプレート内) を操作して、一方が他方の後に表示されるようにすることです。しかし、多くの結果が得られ、ページングが必要になった場合は、ソート番号の差を計算し、この値を ORDER BY で使用するという複雑な作業が必要になるでしょう。メインの Views クエリを書き直すタスク。

私は数年前にこれを試しましたが、非常に困難でした...ビューのメイン開発者であるカオスのマーリンは、ビューは実際には派手なプログラミング用ではなく、クエリを処理する方法は許可しないとどこかで述べました。多くの操作のために...物事が壊れるでしょう。しかし、その間に何かが変わった... Views に、メインクエリを書き換える目的で作成されたと思われる新しい関数を見た覚えがあります。

ビュー クエリの書き換えに関するチュートリアルは次のとおりです

注意: ビューでは多くのことが行われているため、何も壊れていないことを確認するために多数のダミー エントリを作成する必要があります。クエリを書き直すと、エラーが発生しやすくなります。

実際、Drupal モジュールの構築に精通している場合は、このような場合、クエリと表示をより細かく制御できるカスタム モジュールを構築する方が理にかなっているかもしれません。これは、多くの実験やテストよりも実際には高速である可能性があります。

于 2011-03-23T22:28:19.790 に答える
1

私の選択はテーマレイヤーです。これは前処理関数で実行できると思います。テンプレートファイルを上書きする必要があるかもしれません。Theme Developer モジュールは、ビューがどのようにレンダリングされ、どのオーバーライドが可能かを教えてくれます。

于 2011-03-23T22:13:03.943 に答える