欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

移除 表单单个字段的外面的 class 类 为 form-item 的div 改写 单个字段 textfield text 自己亲自做的 有大用 有大用 有大用

第一方法 是 hook_theme 表单,表单字段  好像不需要对form 进行hook 感觉到  theme_form 可能用不着改写  

<?php

function accept_task_form()//accept_task_form 就是 $form_id
{
   // 文本框  name是文本框的名称
   $form['accept_task_num'] =  array(
      '#type' =>'textfield',//drupal 规定文本框用textfield来表示
      '#size' => 2,
   );
   //提交按钮  //
   $form['submit'] = array('#type'=>'submit','#value'=>'领单');
   $form['#after_build'][] = '_remove_form_item_div';
   return $form;
}
function _remove_form_item_div($form, &$form_state)
{
  // 第一步 给表单  加个 #theme  
   $form['#theme'] = array('accept_task_form');

//第一步给表单字段 加个 #theme

   $form['accept_task_num']['#theme'] = array('accept_task_num_text_field');

return $form; } function shipingzhongcustomtask_theme() { return array(
//第二步 hook theme一下
'accept_task_form' => array( 'render element' => 'form', ), 'accept_task_num_text_field' => array( 'render element' => 'element', ), ); }

//第三步 实现这个  hook 的theme 关于表单
function theme_accept_task_form($form) {
// $export = kprint_r(drupal_render($element['accept_task_num']), TRUE); // $vars - is a variable which you want to print.
// print $export;
   $output = '';
// $output .=  drupal_render($element['form_id']);
// $output .=  drupal_render($element['form_build_id']);
// $output .=  drupal_render($element['form_token']);
// $output .=  drupal_render($element['accept_task_num']);
// $output .=  drupal_render($element['submit']);
   //$output .= drupal_render_children($form); //这个好像  drupal 6 不行 drupal 7 才行

   $output .= drupal_render($form);
   return $output;


   // Anonymous div to satisfy XHTML compliance.
// $action = $element['#action'] ? 'action="' . check_url($element['#action']) . '" ' : '';
// return '<form ' . $action . ' accept-charset="UTF-8" method="' . $element['#method'] . '" id="' . $element['#id'] . '"' . drupal_attributes($element['#attributes']) . ">\n<div>" . $element['#children'] . "\n</div></form>\n";
}

//第三步 实现这个  hook 的theme 关于表单字段 其实就是把 theme_textfield函数拿过来修改一下

function theme_accept_task_num_text_field($element) { $size = empty($element['#size']) ? '' : ' size="'. $element['#size'] .'"'; $maxlength = empty($element['#maxlength']) ? '' : ' maxlength="'. $element['#maxlength'] .'"'; $class = array('form-text'); $extra = ''; $output = ''; if ($element['#autocomplete_path'] && menu_valid_path(array('link_path' => $element['#autocomplete_path']))) { drupal_add_js('misc/autocomplete.js'); $class[] = 'form-autocomplete'; $extra = '<input class="autocomplete" type="hidden" id="'. $element['#id'] .'-autocomplete" value="'. check_url(url($element['#autocomplete_path'], array('absolute' => TRUE))) .'" disabled="disabled" />'; } _form_set_class($element, $class); if (isset($element['#field_prefix'])) { $output .= '<span class="field-prefix">'. $element['#field_prefix'] .'</span> '; } $output .= '<input type="text"'. $maxlength .' name="'. $element['#name'] .'" id="'. $element['#id'] .'"'. $size .' value="'. check_plain($element['#value']) .'"'. drupal_attributes($element['#attributes']) .' />'; if (isset($element['#field_suffix'])) { $output .= ' <span class="field-suffix">'. $element['#field_suffix'] .'</span>'; }
//修改处在这儿
_accept_task_num_text_field_form_element 是改写 theme_form_element 我的目的就是 去除掉 form-item 的div


   //return theme('form_element', $element, $output) . $extra;
   return _accept_task_num_text_field_form_element($element, $output) . $extra;
}
function _accept_task_num_text_field_form_element($element, $value)
{
   // This is also used in the installer, pre-database setup.
   $t = get_t();

   $output = '';
   $required = !empty($element['#required']) ? '<span class="form-required" title="'. $t('This field is required.') .'">*</span>' : '';

   if (!empty($element['#title'])) {
      $title = $element['#title'];
      if (!empty($element['#id'])) {
         $output .= ' <label for="'. $element['#id'] .'">'. $t('!title: !required', array('!title' => filter_xss_admin($title), '!required' => $required)) ."</label>\n";
      }
      else {
         $output .= ' <label>'. $t('!title: !required', array('!title' => filter_xss_admin($title), '!required' => $required)) ."</label>\n";
      }
   }

   $output .= " $value\n";

   if (!empty($element['#description'])) {
      $output .= ' <div class="description">'. $element['#description'] ."</div>\n";
   }

   return $output;


}


//表单函数_validate 验证类似于钩子函数的回调函数
function accept_task_form_validate(&$form, &$form_state)
{
   /**
    * 用户提交的所有数据在 $form_state['values'] 之中,相当于 $_POST
    */
   // form_set_error('',$form_values['name']);
   if($form_state['values']['name'] == '')
   {
      form_set_error('',t('You must input your name'));
   }
}
//表单函数_submit 提交函数
function accept_task_form_submit(&$form, &$form_state)
{
   /**
    * 用户提交的所有数据在 $form_state['values'] 之中,相当于 $_POST
    */
   drupal_set_message(t('Your name is ').$form_state['values']['name'].'    '.
      t('Your age is ').$form_state['values']['age']);
}

第二种方法 是 在 主题的temlate.php文件中   好像不需要对form 进行hook 感觉到  theme_form 可能用不着改写

改写 超越一下 theme_form() 和 
theme_textfiel() 和 theme_form_element()
判断一下
如果 是 字段 accept_task_num 就改写方法
否则的话 调用默认的方法 ,思路比较简单,就不写了




普通分类: