Forms Drupal 7-重写基本表单HTML标记

Forms Drupal 7-重写基本表单HTML标记,forms,api,drupal,Forms,Api,Drupal,我真的很难理解Drupal表单API…实际上是整个Drupal 这是我的问题,我已经创建了一个具有良好渲染效果的表单,但是我现在想做的是围绕某些表单元素进行包装div,因此我以适合我的站点的方式来设计表单,而不是一些框标准的垃圾 有人能帮忙吗,或者至少能指出一个“好”教程的正确方向,而不是一些简单而模糊的废话,这些废话充斥着整个网络 谢谢。hook\u form\u alter是你的朋友 在主题的template.php文件中,可以向表单、表单元素等添加前缀和后缀 下面是我最近做的一个网站的例子

我真的很难理解Drupal表单API…实际上是整个Drupal

这是我的问题,我已经创建了一个具有良好渲染效果的表单,但是我现在想做的是围绕某些表单元素进行包装div,因此我以适合我的站点的方式来设计表单,而不是一些框标准的垃圾

有人能帮忙吗,或者至少能指出一个“好”教程的正确方向,而不是一些简单而模糊的废话,这些废话充斥着整个网络


谢谢。

hook\u form\u alter是你的朋友

在主题的template.php文件中,可以向表单、表单元素等添加前缀和后缀

下面是我最近做的一个网站的例子

function bhha_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'user_login') {      
    $form['#prefix'] = '<div class="loginForm">';
    $form['#suffix'] = '</div>';
    $form['name']['#title'] = Null; // Change text on form
    $form['name']['#description'] = Null; // Change text on form
    $form['name']['#attributes'] = array('placeholder' => t('username'));
    $form['name']['#size'] = '30';
    $form['pass']['#title'] = Null;
    $form['pass']['#description'] = Null; // Change text on form
    $form['pass']['#attributes'] = array('placeholder' => t('password'));
    $form['pass']['#size'] = '30';
    //$form['actions']['submit']['#value'] = t('password');
    $form['actions']['submit'] = array('#type' => 'image_button', '#src' => base_path() . path_to_theme() . '/images/Login.png');
    $form['links']['#markup'] = '<a class="user-password" href="'.url('user/password').'">' . t('Forgot your password?') . '</a>'; // Remove Request New Password from Block form
    $form['links']['#weight'] = 540;
  }
}
函数bha_form_alter(&$form,&$form_state,$form_id){
如果($form_id=='user_login'){
$form['#prefix']='';
$form['#后缀']='';
$form['name']['#title']=Null;//更改表单上的文本
$form['name']['#description']=Null;//更改表单上的文本
$form['name']['#attributes']=array('placeholder'=>t('username');
$form['name']['#size']='30';
$form['pass']['#title']=Null;
$form['pass']['#description']=Null;//更改表单上的文本
$form['pass']['#attributes']=array('placeholder'=>t('password');
$form['pass']['#size']='30';
//$form['actions']['submit']['#value']=t('password');
$form['actions']['submit']=array('#type'=>'image_button','#src'=>base_path().path_to_theme()./images/Login.png');
$form['links']['#markup']='';//从块表单中删除请求新密码
$form['links']['#weight']=540;
}
}
检查您的代码,以获取您想要主题id的表单。将下划线替换为连字符,您应该能够使用上面的示例来执行您想要的操作

最基本的情况是,我想一个例子是:

function THEME_NAME_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'FORM_ID') {      
        // Adds a wrapper div to the whole form
    $form['#prefix'] = '<div class="loginForm">';
    $form['#suffix'] = '</div>';

        // Adds a wrapper div to the element NAME
    $form['name']['#prefix'] = '<div class="formRow">';
    $form['name']['#suffix'] = '</div>';
  }
}
function-THEME\u-NAME\u-form\u-alter(&$form,&$form\u-state,$form\u-id){
如果($form_id=='form_id'){
//将包装器div添加到整个表单中
$form['#prefix']='';
$form['#后缀']='';
//将包装器div添加到元素名称
$form['name']['#prefix']='';
$form['name']['#后缀']='';
}
}

有几种方法可以做到这一点。比如说

  • 如果希望在字段级别覆盖标记,可以使用
    field.tpl.php
    template\u preprocess\u field()
  • 如果您想更改表单的封闭标记(尽管我想知道为什么Drupal的标准标记具有很强的样式性),那么您应该注册主题函数并处理标记。下面是一个详细阐述这一点的例子

  • 您是否创建了自定义表单或要设置现有表单的样式?试试这个,或者我已经使用表单API创建了我自己的自定义表单,但我无法按照我想要的方式对其进行样式设置,因为我需要对大量元素进行分组,例如个人详细信息(姓名、地址、电话等)。基本上,我想在屏幕上滑动表单的各个部分,当每个部分都填写好时,这就是为什么我需要添加额外的HTML标记。谢谢您的回复。JAYPAN发送的第一个教程在发布后运行良好,我必须在进行某些更改后重新启动模块。感谢alter函数的帮助,它确实提供了帮助,还尝试了其他一些方法。当您有一个动态复选框列表(来自分类术语)并且无法硬编码它们的名称时,您会怎么做。我有一个#类型的复选框,带有动态数量的#选项。ATM每个选项都显示一个不需要的div包装,我根本不需要任何包装。我要完全控制。