web-dev-qa-db-ja.com

ブロック内の表示されたフォームのビュー:Ajax結果カウンターを追加する方法?

私は次のようにビューを実装しました:

  • 豊富な公開フィルターフォーム(より良い公開フィルター)、ajaxが有効になっているページ表示、これをランディングページと呼びましょう
  • そのクローン、2番目のページにはまったく同じフィールドが表示されますが、代わりに公開されたフィルターはほとんどありません(クイック検索フォーム)
  • そのクローンのパスはまったく同じですブロック内の公開フォームはyesに設定されています

クローン作成ブロック(クイック検索フォーム)をホームページに表示します。フォームを送信すると、正しい結果と完全に公開されたフィルターを含むランディングページにリダイレクトされます。これで結構です。

質問 :

表示する必要がある結果数公開されたフォームブロックの隣に毎回更新フォームで公開されたフィルター値を変更します。

ヘッダーまたはフッターのGlobal:Result summaryは機能しません。フッターとヘッダーは公開されたブロックと一緒に表示されないため、フルビュー表示でのみ表示されます。

UIを使用して、またはプログラムでそれをどのように解決できますか?開始するいくつかのアイデアの下に、良い、まっすぐな方法があるかもしれません:

  • 結果カウントヘッダーを強制的に公開ブロックの横に表示しますか?
  • ajaxの結果を含むマークアップをフォームに追加しますか?
  • 別のブロックを作成しますか?

編集

以下の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';
}
_

ビューを実行できない理由、またはそのコンテキストでカウントを返す方法を説明する手掛かりはありますか?

4
Kojo
  1. フォルダー構造をsites/all/themes/example_theme/templates/viewsとして作成します

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;
  }

}
  1. 次に、公開されたフィルターtplをオーバーライドできます。特定のビューの公開されたフォームテンプレートをオーバーライドするには、次の名前パターンでテンプレートを作成する必要があります。

    views-exposed-form--view_name.tpl.php

    カウントを配置する場所に$ count変数を出力します。テンプレートを追加したら、キャッシュをクリアします。

1
Shreya Shetty

フロントエンドアプローチを試すことができます。ビューのヘッダーでは、非表示のdivに合計結果(グローバル:結果の概要)を表示し、jsを使用してそこから値を取得し、必要な場所に出力できます。

編集:私はあなたの実装を誤解しました。必要なのとまったく同じフィルター(cssで非表示)を使用してブロックを使用し、ヘッダーのみを表示してみることができます。 ajaxで動作するように調整できるので、結果が更新され、jsを使用して、ブロック内の公開されたフォームで変更されたフィルターでフィルターを変更します。