web-dev-qa-db-ja.com

ビューの公開フォームにテーマを設定する方法は?

いくつかの公開フィルターを使用してビューを作成しましたが、見た目はかなり醜いです。

enter image description here

テーマを改善したいのですが、フィールドセット全体をラップしたり、他の要素をグループ化したり(公開された入力と更新された入力のペアリングなど)を含めますが、どうすればよいかわかりません。

私はフォームをvar_dumpしようとしましたが、それは永遠に続くようで、ブラウザがロックしてしまうので、そのようにフォームについて何も簡単に学ぶことができません。

また、フォームをフィールドセットの子として別のフォームに配置しようとしましたが、すべてのフォームID情報などを取得するのに問題がありました(ただし、フィールドセットのスタイルは取得しました)。

誰かがポインタを持っていますか?

更新:

テンプレートをモジュールからサイトのテーマディレクトリにコピーして、開始しました。

<fieldset>
    <legend>Filters</legend>

    <div class="views-exposed-form">
        <div class="views-exposed-widgets clear-block">
            <?php foreach($widgets as $id => $widget): ?>
                <div class="views-exposed-widget">
                    <?php if (!empty($widget->label)): ?>
                        <label for="<?php print $widget->id; ?>">
                            <?php print $widget->label; ?>
                        </label>
                    <?php endif; ?>
                    <?php if (!empty($widget->operator)): ?>
                        <div class="views-operator">
                            <?php print $widget->operator; ?>
                        </div>
                    <?php endif; ?>
                    <div class="views-widget">
                        <?php print $widget->widget; ?>
                    </div>
                </div>
            <?php endforeach; ?>
            <div class="views-exposed-widget">
                <?php print $button ?>
            </div>
        </div>
    </div>
</fieldset>

日付フィールドをペアにする方法を理解できないようです-ウィジェットのプロパティを何らかの方法で変更してHTMLでラップできるようにする必要があります(#prefixと#suffixが$widget->widgetに追加されているため、hook_form_alterを使用しても機能しません彼らは出力を壊す)

12
HorusKol

ほとんどのフォームのように動作せず、独自のラベルメカニズムを使用するため、ビューの公開フォームのテーマ設定は困難です。したがって、form_alterフックを使用して#prefix#suffixを要素に追加することはできません。ただし、THEME_preprocess_views_exposed_formを使用すると、独自のサフィックス/プレフィックスメカニズムを作成できます。

function THEME_preprocess_views_exposed_form(&$variables) {
  if ($variables['form']['#id'] == 'views-exposed-form-VIEWNAME-DISPLAYID') {
    foreach ($variables['widgets'] as $id => &$widget) {
      switch ($id) {
        case 'first_date_id':
          $widget->prefix = '<div class="date-widgets-wrapper">';
          break;
        case 'last_date_id':
          $widget->suffix = '</div>';
          break;
      }
    }
  }
}

そしてテンプレートファイル内

<fieldset>
    <legend>Filters</legend>

    <div class="views-exposed-form">
        <div class="views-exposed-widgets clear-block">
            <?php foreach($widgets as $id => $widget): ?>
                <?php if (!empty($widget->prefix)) print $widget->prefix; ?>
                <div class="views-exposed-widget">
                    <?php if (!empty($widget->label)): ?>
                        <label for="<?php print $widget->id; ?>">
                            <?php print $widget->label; ?>
                        </label>
                    <?php endif; ?>
                    <?php if (!empty($widget->operator)): ?>
                        <div class="views-operator">
                            <?php print $widget->operator; ?>
                        </div>
                    <?php endif; ?>
                    <div class="views-widget">
                        <?php print $widget->widget; ?>
                    </div>
                </div>
                <?php if (!empty($widget->suffix)) print $widget->suffix; ?>
            <?php endforeach; ?>
            <div class="views-exposed-widget">
                <?php print $button ?>
            </div>
        </div>
    </div>
</fieldset>
22
Pierre Buyle

Views-exposed-form.tpl.phpをsites/all/modules/views/themeからテーマパスにコピーして、テンプレートを上書きできます。

7
Adam S

_form['#theme']_アイテムの内容を確認する必要があります。これを行うためのより良い方法(var_dump()よりも良い)はdsm($form)またはkpr($form)を使用することです。これらの関数は、develモジュールをインストールした後で使用できます(- http://drupal.org/project/devel )。 _form['#theme']_は、約7要素の配列である必要があります。これらの要素は、このフォームがレンダリングされているときに呼び出されるテーマフックの名前です。それらを使用して、フォームにテーマを設定する独自の方法を実装できます。

アイテムの1つは_views_exposed_form__VIEW_NAME__DISPLAY_ID_と呼ばれます。

あなたのモジュール(もしあれば)にhook_theme()の実装があるはずです

_function MYMODULE_theme($existing, $type, $theme, $path) {
  return array(
    'views_exposed_form__VIEW_NAME__DISPLAY_ID' => array(
      'function' => 'my_exposed_form_theme_function',
      'render element' => 'form',
    )
  );
}

// somwhere later in code

function my_exposed_form_theme_function($vaiables) {
  //$vaiables['form'] contains a form array
  //to display a form element call drupal_render($vaiables['form']['some element'])
  //don't forget to call drupal_render($form) 
  //after you are done with rendering individual elements
  //
  //you can use template_preprocess_views_exposed_form() from 
  // views/theme/theme.inc as an example

  return "concatenated results of multiple drupal_render() calls";
}
_
3
ihor marusyk

Better Exposed Filters モジュールもご覧ください。折りたたみ可能なフィルターオプションを取得するには、-devリリースが必要ですが、適切な1.1リリースがすぐにリリースされることを期待しています...

3
mikeker

以前の状況では、Hook_form_alter()を使用して接頭辞と接尾辞をフォーム要素に追加し、divにまとめてスタイル設定できるようにしました。ただし、フィールドセットのラッピングについては不明です。

例えば。

$form['submitted']['full_name']['#prefix'] = '<div class="background">';        
$form['submitted']['message']['#suffix'] = '</div>';
2
Teegan

ビューの公開されたフォームのレイアウト (D7)モジュールは、フォームのテーマが公開されたビューで役立ちます。

1
skorzh

Drupalのhook_form_FORM_ID_alterを使用してフォームを変更します。これは、価格フィールドに£文字をプレフィックスするという私の問題を解決したものです(これをカスタムモジュールに入力します)。

function THEME_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
   // check this is the right form
   if ($form['#theme'][0] == 'REPLACE_THIS') {
      // add the prefix
      $form['price']['min']['#prefix'] = "£";
   }
}
1
jackocnr

ビューの編集ページで、テーマ情報を確認できます(右下隅)。 Drupalによって使用されるテンプレートファイルに関する情報を画面に表示するために提供します。デフォルトでは、viewsモジュール(themeフォルダー内)によって提供されるテンプレートファイルが使用されます。ただし、ビューの表示方法を変更する場合は、これらのテンプレートファイルを、独自のカスタムテーマフォルダー(またはこのビューの表示に使用される予定のテーマ)内に配置できるカスタムテンプレートファイルで上書きできます。

このテーマ情報は、階層に従ってファイルに名前を付ける方法(または、ビューのテンプレートをオーバーライドする予定のテンプレートファイルの効果の範囲)を示しています。

現在、このテーマ情報には、ビューがこの特定のビューをレンダリングするために使用するすべてのテンプレートファイルが表示されない場合があります。

それで、sites/all/modules/views/themeに移動して、views-exposed-form.tpl.phpをコピーします(この場合、レンダリングフィルターのデフォルトを上書きするためです!)、それを独自のテーマフォルダーに貼り付けます。次に、同じ方法に従って、独自のテーマフォルダ内に配置したこのオーバーライドテンプレートファイルの効果を、それに応じて名前を変更して制御する必要があります。例えばviews-exposed-form--ビューの名前-ペインname.tpl.php(ビューの編集ページのtheme:informationを見て、命名法を理解します)

これで、このテンプレートファイルの個々のウィジェット(フィルターハンドラーによって生成された)にCSSを追加でき、それらの設定がフィルターに適用されます。

訪問 http://eureka.ykyuen.info/2011/07/25/drupal-theme-the-exposed-filter-in-views/

0
dresh