我试图以不同的方式设置我的webform复选框和单选按钮的样式。出于这个原因,我想在标签中插入span元素并使用它而不是原始复选框。
找到此模块:https://www.drupal.org/project/webform_optionsmarkup,但未列出的选项会显示在我的网络表单字段设置中。
有没有人知道解决这个问题的好方法?
function bigdaddy_preprocess_webform_element(&$variables) {
if ($variables['element']['#type'] == 'textfield' || $variables['element']['#type'] == 'textarea') {
$variables['element']['#title_display'] = 'after';
}
if ($variables['element']['#type'] == 'checkboxes') {
foreach ($variables['element']['#options'] as $key => $one) {
$variables['element']['#options'][$key] = "<span>jpnas</span>" . $one;
}
}
答案 0 :(得分:0)
通过使用hook_form_alter()函数,我能够实现所需的功能。在模块的.inc文件中,我创建了一个函数,如MY_MODULE_form_alter。我将分享我的代码...
function MY_MODULE_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'MY_FORM_ID') {
foreach($form['ELEMENT_#NAME']['#options'] as $key => $value) {
// $form['ELEMENT_#NAME'][$key]['#theme_wrappers'] = array();
$form['ELEMENT_#NAME'][$key]['#prefix'] = '<span>jpnas</span>';
$form['ELEMENT_#NAME'][$key]['#suffix'] = '<span>jpnas</span>';
}
}
}
如果要将跨度放在复选框之前,请使用['#prefix']。 显然,将MY_MODULE替换为模块名称,将MY_FORM_ID替换为实际的$ form_id名称,将ELEMENT_#NAME替换为您要更改的表单元素的名称。请记住,如果需要查看任何这些值,可以执行var_dump($ form)。我正在做听起来像您想做的几乎一样的事情,只是我没有将其放入我的标签中,因为我还没有找到直接粘贴到标签上的方法。另一方面,输入元素是一个不同的故事。此外,如果取消注释循环中的第一行,则会从每个复选框周围除去包装器,但包装器将带有标签。然后,您可以使用#prefix和#suffix相应地自己添加标签以及自己的包装器元素。
答案 1 :(得分:-1)
我的回答看起来很愚蠢,但是你无法在CSS中实现这一切吗? 通过使用像
这样的东西input[type='checkbox'] { ... }
input[type='radio'] { ... }