2

私はフォームが公開されたビューを持っています。私はそれにいくつかのことを試みています。理想的には、ボタンなしでフォームを起動するドロップダウンが必要です。それが不可能な場合は、ボタンのテキストを適用とは異なるものにしたいと思います。

とりあえずハッキングして、views.module の views_form を変更しましたが、それは正しい方法ではないようです。現在公開されているフォームは 1 つだけですが、さらに追加するとどうなりますか?

私の例については、 http://www.wiredvillage.ca/Newsを参照してください。

私は drupal.org をいじっていますが、同じ問題を抱えている他の人を見ていますが、これまでのところ解決策はありません。Drupal のヘルプを得るのに最適な場所がわからない。

これまでに行った変更は次のとおりです。

function views_exposed_form(&$form_state) {
  // Make sure that we validate because this form might be submitted
  // multiple times per page.
  $form_state['must_validate'] = TRUE;
  $view = &$form_state['view'];
  $display = &$form_state['display'];
  $form_state['input'] = $view->get_exposed_input();
  // Let form plugins know this is for exposed widgets.
  $form_state['exposed'] = TRUE;
  $form['#info'] = array();
  if (!variable_get('clean_url', FALSE)) {
    $form['q'] = array(
      '#type' => 'hidden',
      '#value' => $view->get_url(),
    );
  }
  // Go through each filter and let it generate its info.
  foreach ($view->filter as $id => $filter) {
    $view->filter[$id]->exposed_form($form, $form_state);
    if ($info = $view->filter[$id]->exposed_info()) {
      $form['#info']['filter-' . $id] = $info;
    }
  }

  // I CHANGED The VALUE OF THIS SUBMIT BUTTON TO GO


  $form['submit'] = array(
    '#name' => '', // prevent from showing up in $_GET.
    '#type' => 'submit',
    '#value' => t('go'),
  );
  $form['#action'] = url($view->get_url());
  $form['#theme'] = views_theme_functions('views_exposed_form', $view, $display);
  $form['#id'] = views_css_safe('views_exposed_form-' . check_plain($view->name) . '-' . check_plain($display->id));
//  $form['#attributes']['class'] = array('views-exposed-form');
  // If using AJAX, we need the form plugin.
  if ($view->use_ajax) {
    drupal_add_js('misc/jquery.form.js');
  }
  views_add_js('dependent');
  return $form;
}
4

5 に答える 5

6

または、前処理関数を使用して、ビルド前であってもフォームを変更できます。ボタンのテキストを変更したかったので、次のようにしました。

function MYTHEME_preprocess_views_exposed_form(&$vars, $hook) {

  // only alter the jobs search exposed filter form
  if ($vars['form']['#id'] == 'views-exposed-form-jobs-search-page-1') {

    // Change the text on the submit button
    $vars['form']['submit']['#value'] = t('Search');

    // Rebuild the rendered version (submit button, rest remains unchanged)
    unset($vars['form']['submit']['#printed']);
    $vars['button'] = drupal_render($vars['form']['submit']);
  }
}
于 2009-03-18T17:53:08.037 に答える
5

ドロップダウンを起動したい場合は、イートンが提案するようにモジュールをハッキングする代わりに、JavaScript を使用します。

基本的に、Eaton が示唆するように hook_form_alter でテキストを変更し、同じ hook_form_alter で使用し、カスタム JS で drupal_add_js への呼び出しを追加して、ボタンを非表示にし、選択ドロップダウンの onChange ハンドラーでフォームを送信します。JS が失敗した 10% のユーザーのために、その送信ボタンが必要です。

于 2009-01-18T06:50:22.137 に答える
4

上記はどちらも問題ありませんが、フォームを変更しても必ずしも望ましい結果が得られるとは限らないことがわかりました。これは主に、公開されたフィルターが特定のテーマ テンプレートを使用してテーマ化されているためです。views-exposed-form.tplテーマを変更する適切な方法は、テーマのフォルダー内のファイルをオーバーライドすることです。これは、公開されているすべてのフィルター フォームに適用されることに注意してください。特定のフィルター フォームをテーマにするには、次のように、そのファイル名に別の名前を使用する必要があります。

views-exposed-form--TITLE--DISPLAY.tpl.php
views-exposed-form--TITLE.tpl.php

テンプレートの命名規則については、ビューのテーマ: 情報セクションを確認してください。

于 2010-12-14T23:31:04.450 に答える
1

このモジュールは、とりわけ自動送信を提供しますhttp://drupal.org/project/views_hacks

このモジュールは、公開されたフィルターを改善するのに最適ですhttp://drupal.org/project/better_exposed_filters

于 2011-01-13T08:10:16.690 に答える
0

hook_form_alter()( http://api.drupal.org/api/function/hook_form_alter)を使用して、作成時にフォームを変更し、特定のビューが表示されているときに問題のフィールドを変更できるはずです。送信ボタンを削除したり、drupal_add_js()関数を呼び出す#theme関数を追加したりすることができます。

GETパラメータがビューが期待する方法で提供される限り、すべてが正常に機能します。フィルタ設定が公開されているページをブックマークできるように設計されています。重要なのは、フォームを実行していることを確認することです。独自のモジュールのhook_form_alter()関数をマングリングして、他のビュー駆動のものが詰まらないようにします。

于 2009-01-18T03:49:05.000 に答える