web-dev-qa-db-ja.com

同じビューを公開したフォームブロックを2回表示する方法は?

ブロックから公開された同じビューを2回表示しようとしています。左ナビゲーションに1回、コンテンツ上部に1回。マルチブロックを使用すると、ブロックのクローンを作成でき、両方を表示できます。ただし、左側のナビゲーションフォームでは、フィルターの露出を少なくしたいと考えています。

問題は、hook_form_alter()およびhook_preprocess_views_exposed_from()に、フォームを変更するためにチェックできる一意の識別子がないことです。フックを2回実行しますが、左ナビゲーションフォームとコンテンツトップフォームのどちらを処理しているのかわかりません。

誰かこれについて何か洞察がありますか?

ビュー2で機能する以下のコードを試して、独自のブロックを作成してフォームをレンダリングしようとしました。しかし、コードをビュー3で機能させることはできません。

$view = views_get_view('brands');
$view->set_display('page_2');
$view->init_handlers();

$form_state = array(
  'view' => $view,
  'display' => $view->display_handler->display,
  'method' => 'get',
  'rerender' => TRUE,
  'no_redirect' => TRUE,
);

$output = drupal_build_form('views_exposed_form', $form_state);
$blocks['content'] = $output;

私は間違った方向を見ていますか?

6
Jepedo

このコードは私のために働いた。 Views 6 Alpha 4を使用しています。

$view = views_get_view('your_view');
$view->set_display('the_display_you_want_that_have_a_exposed_block');
$view->init_handlers();
$exposed_form = $view->display_handler->get_plugin('exposed_form');
print $exposed_form->render_exposed_form(true);
3
Luis Aveiga

1>同じビューのディスプレイをもう1つ追加して、そのディスプレイのフィルターをオーバーライドできませんか?私があなたの質問を正しく受け取ったら、それでうまくいくはずです。ビューからブロックで公開されたフィルターの2つの差分バージョンが必要です。

マルチブロック問題の提案:

2>私はむしろ、コンテキストモジュール- http://drupal.org/project/context を使用して、同じページ上の複数の同じブロックと他のブロックの可視性の問題を処理します。これは現在の問題を解決しませんが、マルチブロックおよびブロッククローン戦略と比較してfwdを実行する方が良い方法です。

2
Dipen

いくつかの異なるコードを使用して、ビューフォームを含むブロックを作成します(別の理由で、フォームをページコールバックとして表示しますが、機能するはずです)。

 $module = 'views';
 $delta = '-exp-my_block_id';
 $block = (object) module_invoke($module, 'block', 'view', $delta);
 $block->module = $module;
 $block->delta = $delta;
 return theme('block', $block); 
0
Jeremy French