0

Drupal フォームに「マークアップ」要素をプログラムで追加しました。ページにレンダリングされると、要素は送信ボタンのラッパーに表示されます。明確化: 「field_school_name_value」要素と「distance」要素の間に表示する必要があります。レイアウトが正しくなるように、すべての要素の重みを設定しましたが、役に立たないようです。私は何を間違っていますか?

<?php
function abq_misc_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'views_exposed_form') {
    $state_select = array(
      '#attributes' => array(
        'style' => 'width:10em;',
      ),
      '#default_value' => 'All',
      '#multiple' => FALSE,
      '#options' => array_merge(array('All' => 'State'), location_get_provinces()),
      '#title' => NULL,
      '#type' => 'select',
      '#weight' => 0,
    );
    $form['province'] = $state_select;

    $school = &$form['field_school_name_value'];
    $school['#attributes'] = array(
      'size' => 15,
    );
    $school['#weight'] = 1;

    // THIS GUY
    $form['divider'] = array(
      '#type' => 'item',
      '#markup' => '<div>&ndash;or&ndash;</div>',
      '#weight' => 2,
    );

    $form['distance']['#weight'] = 3;

    $search_distance = &$form['distance']['search_distance'];
    $search_distance['#attributes'] = array(
      'placeholder' => 'miles',
      'size' => '5',
    );
    $search_distance['#prefix'] = 'Within';
    $search_distance['#suffix'] = 'of';
    unset($search_distance['#title']);
    $search_distance['#weight'] = 0;

    $postal_code = &$form['distance']['postal_code'];
    unset($postal_code['#title']);
    $postal_code['#attributes'] = array(
      'placeholder' => 'Zip Code',
      'size' => '5',
    );
    $postal_code['#weight'] = 1;

    hide($form['distance']['search_units']);

    $form['submit']['#weight'] = 4;
 }

}

4

2 に答える 2

0

送信ボタンのラッパー内で要素をレンダリングする正当な理由はありません。

ただし、簡単な修正は#prefix、送信ボタンのラッパーの直前にマークアップがレンダリングされることを保証する送信ボタンの属性を使用することです。

$form['submit']['#prefix'] = '<div>&ndash;or&ndash;</div>';

アップデート

#prefix編集に対処するために、代わりにdistance要素の を設定すると、同じ解決策が適用できると思います。

$form['distance']['#prefix'] = '<div>&ndash;or&ndash;</div>';

hook_form_alterたまたまあなたの後に実行され、あなたの良い仕事を台無しにすることを実装する別のモジュールによって行われたいくつかの余分なフォーマットがある可能性があります。プレフィックスをdistance要素に適用することで、要素の直前に来るようになりfield_school_name_valueます。

提供された の配列メンバーへの参照を取得するときに、まさにこれに問題があったことを言及する必要が$formあります(これは で行っています$school = &$form['field_school_name_value'];)。追加の健全性チェックとして、そのコードをこれに変更して、それが役立つかどうかを確認することをお勧めします(上記の他の提案の前にこれを試してください。修正される可能性があるためです)。

$form['field_school_name_value']['#attributes'] = array('size' => 15);
$form['field_school_name_value']['#weight'] = 1;

それ以外の

$school = &$form['field_school_name_value'];
$school['#attributes'] = array(
  'size' => 15,
);
$school['#weight'] = 1;
于 2011-11-30T23:02:30.903 に答える