web-dev-qa-db-ja.com

hook_form_FORM_ID_alterを使用してCSSクラスを単純な階層選択に追加する

_hook_form_FORM_ID_alter_を使用して、select要素の1つにCSSクラスを追加しようとしています。

CSSクラス「フォームコントロール」を_<select id="edit-shs-term-node-tid-depth-select-1">_のクラスに追加しようとしています。

私はそれを追加し、_drush cc all_も実行しましたが、selectのクラスには何も追加されていません。

[〜#〜] html [〜#〜]

_ <form action="/properties" method="get" id=
  "views-exposed-form-view-property-page-master" accept-charset="UTF-8" class=
  "jquery-once-1-processed">
    <div>
      <div class="views-exposed-form">
        <div class="views-exposed-widgets clearfix">
          <div id="edit-title-wrapper" class=
          "views-exposed-widget views-widget-filter-title">
            <label for="edit-title">Search</label>

            <div class="views-widget">
              <div class="form-type-textfield form-item-title form-item form-group">
                <input class="form-control form-text" type="text" id="edit-title" name=
                "title" value="" size="30" maxlength="128" />
              </div>
            </div>
          </div>

          <div id="edit-field-developer2-tid-wrapper" class=
          "views-exposed-widget views-widget-filter-field_developer2_tid">
            <label for="edit-field-developer2-tid">Developer</label>

            <div class="views-widget">
              <div class=
              "form-type-select form-item-field-developer2-tid form-item form-group">
                <select class="form-control form-select" id="edit-field-developer2-tid"
                name="field_developer2_tid">
                  <option value="All" selected="selected">
                    - Any -
                  </option>
                </select>
              </div>
            </div>
          </div>

          <div id="edit-shs-term-node-tid-depth-wrapper" class=
          "views-exposed-widget views-widget-filter-shs_term_node_tid_depth">
            <label for="edit-shs-term-node-tid-depth">Location</label>

            <div class="views-widget">
              <div class=
              "form-type-textfield form-item-shs-term-node-tid-depth form-item form-group shs-wrapper-processed">
              <input class=
              "element-invisible shs-enabled form-control form-text shs-processed"
                type="text" id="edit-shs-term-node-tid-depth" name=
                "shs_term_node_tid_depth" value="All" size="60" maxlength="128" />
                <select id="edit-shs-term-node-tid-depth-select-1" class=
                "shs-select form-select shs-select-level-1" style=
                "display: inline-block;">
                  <option value="0">
                    - None -
                  </option>
                </select>
              </div>
            </div>
          </div>

          <div id="edit-field-property-type-tid-wrapper" class=
          "views-exposed-widget views-widget-filter-field_property_type_tid">
            <label for="edit-field-property-type-tid">Property Type</label>

            <div class="views-widget">
              <div class=
              "form-type-select form-item-field-property-type-tid form-item form-group">
                <select class="form-control form-select" id=
                "edit-field-property-type-tid" name="field_property_type_tid">
                  <option value="All" selected="selected">
                    - Any -
                  </option>
                </select>
              </div>
            </div>
          </div>

          <div class="views-exposed-widget views-submit-button">
            <button class="btn btn-info form-submit" id="edit-submit-view-property" name=
            "" value="Apply" type="submit">Apply</button>
          </div>
        </div>
      </div>
    </div>
  </form>
_

template.php

_/*
 * implements hook_form_FORM_ID_alter
 *
 */
function directbootstrap_form_views_exposed_form_view_property_page_master_alter(&$form, &$form_state, $form_id) {


    $form['shs_term_node_tid_depth']['#attributes'][] = array('class' => array('form-control'));
}
_

[〜#〜]編集[〜#〜]

質問を更新しました

私が達成しようとしているのは、階層選択にクラス「フォームコントロール」を挿入することです。しかし、関数内にdpm($form);を挿入した後。私が見つけることができるのは、_shs_term_node_tid_depth_自体ではなく、要素_<select>_の配列だけです。

これが私のtemplate.phpです

_/**
 * implementation of hook_form_FORM_ID_alter()
 */
function directbootstrap_form_views_exposed_form_alter(&$form, &$form_state, $form_id)
{
 if ($form['#id'] == 'views-exposed-form-view-property-page-master')) {
    $form['shs_term_node_tid_depth']['#attributes']['class'][] = 'form-control';
  }
}
_
1
lozadaOmr

必要なもの:

$form['shs_term_node_tid_depth']['#attributes'] = array('class' => array('form-control'));

以上の簡潔なバージョン:

$form['shs_term_node_tid_depth']['#attributes']['class'][] = 'form-control';
3
Felix Eve

ビューが公開されたフォームは...楽しいです。たとえば、取得するフォームIDはalwaysになりますviews_exposed_form、HTMLまたは他の場所に表示されるIDに関係なく。そのため、現在、フォーム変更関数の名前は正しくありません。

PHP=側の正しいIDでフォームを変更し、フォームの他の何か、おそらくHTML ID自体からコンテキストを取得する必要があります。

したがって、あなたが探しているものの基本的なバージョンは

function MYMODULE_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
  if ($form['#id'] == 'views-exposed-form-view-property-page-master')) {
    $form['shs_term_node_tid_depth']['#attributes']['class'][] = 'form-control';
  }
}

関数名を変更したら、必ずキャッシュをクリアしてください。

1
Clive