4

この質問は一般的なものであり、私はすでにそのバージョンをここに投稿しています。ただし、このフォーラムで質問することで、回答を得て、より多くの人に役立つ可能性が高くなることを願っています.

すべてのコンテンツが drupal ページに読み込まれるときにコンテンツを関連付けるのは難しい作業です。drupal では、サイトに関係なく、各ページは基本的に同じです。中央にメイン コンテンツ (ビュー、ノード、または複数のノード) があり、その中央のコンテンツをブロックが囲んでいます。ブロックが中間にあるものを何らかの方法で認識できるようにするには (相互の認識ははるかに少ない)、独自のカスタム モジュールで非常に手の込んだフットワークを行うか、URL で「引数」を使用できるようにする必要があります。

私は、開発シードによって提供されたスペース/コンテキスト/機能/モジュールのpurlスイートを研究してきました。また、Earl Miles (ビューを書いた人) によって作成されたPanels / Ctoolsモジュールも調べました。どちらも私の仕事を容易にするツールを提供しますが、「コンテキスト」によって定義されたブロックのコンテンツが必要な場合は、URL に「引数」を配置する必要があることを理解しています (一般的にはこれを使用します)。コンテキスト モジュールまたは Ctools のコンテキストの概念が意味する特定の意味ではありません)。

何かが欠けているのでしょうか、それとも Drupal の現状はそこにあるのでしょうか?

最後に、この種のことをケースバイケースで限定的に支援する他のモジュールを認識していることを締めくくります。たとえば、Views attach モジュールと Node reference views モジュールは、それぞれ非常に特殊なユース ケースでこの問題を解決しようとしてますどちらも優れたモジュールであり、似たようなモジュールもありますが、この問題全般の解決策を見つけたいと思っています。

4

2 に答える 2

7

私はあなたが何を目指しているのか本当に理解していないと思いますが、それでも試してみます:

Drupalに基づいているかどうかにかかわらず、静的でないすべてのWebサイトには、要求に応じて配信するコンテンツを決定するための「コンテキスト」を提供する2つの基本的なものがあります。

最初で最も重要なことは、明らかにリクエスト自体です。これは、常にそこにあることが保証されている唯一の情報です。ほとんどの場合、これは単にGETリクエストであり、これらの場合、URLは暗黙的に利用可能な「コンテキスト」メインソースになります。POSTリクエストは、URL以外にもう少し「コンテキスト」を提供できますが、あなたの質問では、それらはGETリクエストのより複雑なバリエーションであり、URLからのもの以外にいくつかの「引数」を提供すると主張することができます(ほとんどの場合、POSTリクエストをより複雑なURLを使用したGETリクエストに変えることができます)。

2番目の「コンテキスト提供」はセッションです。セッション処理がどのメカニズムに基づいている場合でも(現在は主にCookie)、目標は常に同じです。つまり、本質的にステートレスな要求の境界を越えて「状態」情報を伝達することです。これは、サーバー側に保存されている以前のリクエストからの情報に特定のリクエストを結び付けることによって行われます。これにより、リクエストに対して配信するコンテンツを決定するために利用できる情報を「充実」させることができます。基本的に、リクエストにさらにいくつかの「引数」を追加する方法としてそれを見ることができます。

以上です。応答を組み立てるために必要なその他の情報は、リクエストで指定された情報から何らかの形で導出する必要があります(Cookieまたはその他の識別子に基づいて「コンテキスト」を追加することにより、セッション処理がすでにその主なプロセスであると言えます。リクエストに付属)。

Drupalは、このプロセスを非常によく反映しています。IMHOは、最初にURLに基​​づいて応答の「メイン」コンテンツをアセンブルし、セッションに「追加情報(ユーザーに関する情報など)を添付」します。index.phpを呼び出してメインコンテンツをアセンブルしたでのみ、を呼び出し$return = menu_execute_active_handler()て応答の他の要素(ブロック、メニューなど)を追加しますtheme('page', $return);

したがって、これらの他の要素に「渡す」という「コンテキスト」が何であれ、メインコンテンツ(URL、セッション)のアセンブルにすでに使用されている情報から「再抽出」するか、一時的に保存する必要があります。メインコンテキストの生成中。これは、セッションにすでに格納されている情報に追加する、一部の関数内で静的キャッシュを使用する、グローバル変数を設定する(しないでください)、データベースにデータを渡すなど、さまざまな方法で実行できます。 。

繰り返しになりますが、私はあなたが何を目指しているのか理解していないようです。ここで欠けているのは何ですか?

于 2009-12-18T14:51:14.067 に答える
5

Henrik からの良い回答ですが、Cookie で状態を維持する以外に、リクエストにはかなり多くの情報が含まれている可能性があることを付け加えたいと思います。accept や language 、さらには X-REQUESTED-WITH などの重要な HTTP ヘッダーを考えてみてください。ほとんどの Web フレームワークは、この情報を 1 つの便利なデータ構造にラップします。残念ながら、与えられた答えから、drupalはそうではないと結論付けなければなりません。

于 2010-06-20T16:43:53.560 に答える