私は次のようにビューを実装しました:
クローン作成ブロック(クイック検索フォーム)をホームページに表示します。フォームを送信すると、正しい結果と完全に公開されたフィルターを含むランディングページにリダイレクトされます。これで結構です。
表示する必要がある結果数公開されたフォームブロックの隣に毎回更新フォームで公開されたフィルター値を変更します。
ヘッダーまたはフッターのGlobal:Result summaryは機能しません。フッターとヘッダーは公開されたブロックと一緒に表示されないため、フルビュー表示でのみ表示されます。
UIを使用して、またはプログラムでそれをどのように解決できますか?開始するいくつかのアイデアの下に、良い、まっすぐな方法があるかもしれません:
以下のShreyaの回答に基づいていくつかのアプローチを試しましたが、ブロッキングポイントは常に同じです。結果カウントを取得するにはビューを実行する必要がありますが、実行するとすぐにが返されますメモリサイズを使い果たしました。
template.php:
_function shoot_preprocess_views_exposed_form(&$vars){
if($vars['form']['#id'] == 'views-exposed-form-customer-products-list-search-block') {
$view = views_get_view('MY_VIEW');
$view->set_display('MY_DISPLAY');
$view->execute();
$count = count( $view->result );
$vars['count'] = $count;
}
}
_
views-exposed-form--MY_VIEW.tpl.php
_print 'There are:'. $count. 'results';
_
そして、tplでviews_get_current_view()
またはviews_get_view_result()
を使用した他の試行も、フォームalter内で試行されました。
_function MYMODULE_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
if($form['#id'] == 'views-exposed-form-my-view-my-display') {
$view = views_get_view('MY_VIEW');
$view->set_display('MY_DISPLAY');
$view->get_total_rows = true;
$view->pre_execute();
$view->preview('MY_DISPLAY');
$view->execute();
$content = $view->total_rows;
}
$form['submit']['#value'] = 'Voir les'. $content.' résultats';
}
_
ビューを実行できない理由、またはそのコンテキストでカウントを返す方法を説明する手掛かりはありますか?
2. MYTHEME_preprocess_views_exposed_formを使用するviews-exposed-form.varsという名前のファイルを作成します。以下のコードスニペット:
function example_theme_preprocess_views_exposed_form(&$vars){
if($vars['form']['#id'] == 'views-exposed-form-exaample-page') {
$views_rows = views_get_view_result('my_custom_view', 'page');
$count_rows = count($views_rows);
$vars['count'] = $count_rows;
}
}
次に、公開されたフィルターtplをオーバーライドできます。特定のビューの公開されたフォームテンプレートをオーバーライドするには、次の名前パターンでテンプレートを作成する必要があります。
views-exposed-form--view_name.tpl.php
カウントを配置する場所に$ count変数を出力します。テンプレートを追加したら、キャッシュをクリアします。
フロントエンドアプローチを試すことができます。ビューのヘッダーでは、非表示のdivに合計結果(グローバル:結果の概要)を表示し、jsを使用してそこから値を取得し、必要な場所に出力できます。
編集:私はあなたの実装を誤解しました。必要なのとまったく同じフィルター(cssで非表示)を使用してブロックを使用し、ヘッダーのみを表示してみることができます。 ajaxで動作するように調整できるので、結果が更新され、jsを使用して、ブロック内の公開されたフォームで変更されたフィルターでフィルターを変更します。