9

drupal フォームの入力要素にスタイルと読み取り専用プロパティを適用する必要があります。以下をコーディングしました。

$form['precio'] = array(
  '#type' => 'textfield',
  '#title' => t('Precio'),
  '#default_value' => ''.$precio,
  '#size' => 20,
  '#required' => TRUE,
  '#attributes' => array($inputAtributo => 1),
  '#description' => t('Modifica el precio '),
);

そして '#attributes' => array($inputAtributo => 1),

フォームを作成する前に、この入力を読み取り専用にする必要があるかどうかを確認し、スタイルを適用します。

if ($tarifa !='' & $tarifa=='N')
$inputAtributo=" readonly style=\"background: none repeat scroll 0 0 #EAEAEA;\" ";
else
$inputAtributo = "";

これは機能しますが、正しくコーディングされていないと思います

html コードは次のことを示しています。

<input id="edit-precio" class="form-text required" type="text" maxlength="128" size="20" value="258" name="precio" ="1"="" style="background: none repeat scroll 0 0 #EAEAEA;" readonly="">

どうすればこれを改善できますか?

4

4 に答える 4

14

#attributesキーと値のペアの配列でなければなりません。

したがって、配列は次のようになります

'#attributes' => array(
    'readonly'=>'readonly',
    'style'=>'background: none repeat scroll 0 0 #EAEAEA;'
);
于 2012-12-19T12:12:42.770 に答える
7

#attributesスタイルで使用することを意図していません。html 属性を再現するキーと値を持つ配列を提供する必要があります。また、クラスと css は、スタイルを直接 html に追加するよりも優れています。

'#attributes' = array(
  'class' => array('readonly-input'),
  'readonly' => 'readonly',
)

if に追加したい場合は、次のようにします。

if ($tarifa !='' & $tarifa=='N') {
  $form['precio']['#attributes']['class'][] = 'readonly-input';
  $form['precio']['#attributes']['readonly'] = 'readonly';
}

readonly 属性にも値として「readonly」があるため、xhtml に準拠していることに注意してください。

スタイルシートに css ルールを追加します。

.readonly-input { background: none repeat scroll 0 0 #EAEAEA; }
于 2012-12-19T12:11:01.800 に答える
0

他の答えは正しいです。readonlyを使用する代わりに、#disabledを使用したいと思います。また、フォーム フィールドが読み取り専用または無効の場合、ユーザーは値を変更できないため、#required は必要ありません。

$form['precio'] = array(
  '#type' => 'textfield',
  '#title' => t('Price'),
  '#default_value' => $precio,
  '#size' => 20,
  '#attributes' => array(
    'style'=>'background: none repeat scroll 0 0 #EAEAEA;'
  ),
  '#description' => t('Change the price'),
);

値を表示するだけで編集する必要がない場合は、テキスト フィールドを使用する代わりに、マークアップフォーム フィールドを使用します。

$form['precio'] = array(
  '#prefix' => '<span style="background: none repeat scroll 0 0 #EAEAEA">',
  '#suffix' => '</span>',
  '#markup' => t('<strong>Price:</strong> @price', array('@price' => $precio)),
);
于 2012-12-19T12:43:51.683 に答える
0

入力フィールドを drupal 形式で読み取り専用にするには、値TRUEreadonly属性に設定します。

例えば、

$user_name = variable_get('logined_user', 'guest_user');
$form['user_name'] = array(
    '#type' => 'textfield',
    '#title' => t('User Name'),
    '#required' => TRUE,
    '#default_value' => $user_name,
    '#description' => t('Logined user name'),
    '#attributes' => array(
        'readonly' => TRUE
    )
);
于 2013-10-01T14:48:23.073 に答える