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 属性的键和值。而且 class 和 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 compliant

现在在样式表中添加一个 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 形式只读,请将值TRUE设置为readonly属性。

例如,

$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 回答