I hope I haven't just misread the manual on this one. What I'm seeing is a misalignment of the 'th' cells with the 'td' cells. I have prefixes and suffixes disabled for the legal name (preferred name completely disabled). When the module writes out the table, it correctly(?) omits the 'th' cells for those fields, but incorrectly(?) includes empty 'td' cells for them. As a result, the headings are not aligned over their respective columns.

Comments

macco’s picture

I had the same Problem. I overwrote the following theme-function.
Please use my version only as basis for your version.

/**
 * Display the input fields to the user.
 * 
 * @param array $form
 * 	The data to be rendered.
 * @return string An HTML string ready for display.
 */
function phptemplate_cck_fullname_display($form) {
  // drupal_add_css(drupal_get_path('module', 'cck_fullname') .'/cck_fullname.css', 'module', 'all', FALSE);
  $output = '';
  $rows = array();
  $header = array();
  
  
  $header[] = t('First').":".'<span class="form-required" title="This field is required.">*</span>';
  $header[] = t('Middle').":";
  $header[] = t('Last').":".'<span class="form-required" title="This field is required.">*</span>';
  
  foreach (element_children($form) as $delta) {
    if (is_numeric($delta)) {
      /*if ($form['use_legalname']['#value'] == 'legal_require') {
        $rows[$delta]['name'] = '<div class="fullname-type required">'. t('Legal name') .'<span class="form-required" title="This field is required.">*</span></div>';
      }
      else {
        $rows[$delta]['name'] = '<div class="fullname-type">'. t('Legal name') .'</div>';
      }*/
      unset($form['use_legalname']);
      
      if ($form['legalname']['#value']['legal_prefix'] === 'legal_prefix') {
        $rows[$delta]['prefix'] = drupal_render($form[$delta]['prefix']);
      }
      else {
        //$rows[$delta]['prefix'] = '';
        $form[$delta]['prefix']['#access'] = FALSE;
      }
      if ($form['legalname']['#value']['legal_first'] === 'legal_first') {
        $rows[$delta]['first'] = drupal_render($form[$delta]['first']);
      }
      else {
        $rows[$delta]['first'] = '';
        $form[$delta]['first']['#access'] = FALSE;
      }
      if ($form['legalname']['#value']['legal_middle'] === 'legal_middle') {
        $rows[$delta]['middle'] = drupal_render($form[$delta]['middle']);
      }
      else {
        $rows[$delta]['middle'] = '';
        $form[$delta]['middle']['#access'] = FALSE;
      }
      if ($form['legalname']['#value']['legal_last'] === 'legal_last') {
        $rows[$delta]['last'] = drupal_render($form[$delta]['last']);
      }
      else {
        $rows[$delta]['last'] = '';
        $form[$delta]['last']['#access'] = FALSE;
      }
      if ($form['legalname']['#value']['legal_suffix'] === 'legal_suffix') {
        $rows[$delta]['suffix'] = drupal_render($form[$delta]['suffix']);
      }
      else {
        //$rows[$delta]['suffix'] = '';
        $form[$delta]['suffix']['#access'] = FALSE;
      }
      
      
        $form[$delta]['prefix_preferred']['#access'] = FALSE;
        $form[$delta]['first_preferred']['#access'] = FALSE;
        $form[$delta]['middle_preferred']['#access'] = FALSE;
        $form[$delta]['last_preferred']['#access'] = FALSE;
        $form[$delta]['suffix_preferred']['#access'] = FALSE;
      
    }
  }
  unset($form['use_legalname']);
  unset($form['use_preferredname']);
  unset($form['required_parts']);
  unset($form['legalname']);
  unset($form['preferredname']);
  $output .= theme('table', $header, $rows);
  $output .= drupal_render($form);
  return $output;
} //function theme_cck_fullname_display

Regards,
Macco

rconstantine’s picture

Assigned: Unassigned » rconstantine
Status: Active » Fixed

Hey folks, I did run into this myself the other day but didn't have time to work out the problem. It looks like what I need to do is make the lines like this one: $rows[$delta]['suffix'] = ''; contingent on the existence of the same field in the preferred name and visa versa. The rest of the changes to macco's code are customizations and not the bug fix - for anyone that didn't catch that.

BTW, the recommended way to customize theme functions is to put copy them to one of your theme's file and change it there instead of changing the one provided with the module. And as for CSS, the recommended practice for changing, or eliminating CSS is to override it in your theme's style.css file (or other). See the Drupal handbooks on theming for more info.

Anyway, this is the proper fix, sorry it isn't a patch (I don't have time right now):

 /**
 * Display the input fields to the user.
 * 
 * @param array $form
 * 	The data to be rendered.
 * @return string An HTML string ready for display.
 */
function theme_cck_fullname_display($form) {
  drupal_add_css(drupal_get_path('module', 'cck_fullname') .'/cck_fullname.css', 'module', 'all', FALSE);
  $output = '';
  $rows = array();
  $header = array();
  
  $header[] = t('');
  if ($form['legalname']['#value']['legal_prefix'] === 'legal_prefix' || $form['preferredname']['#value']['preferred_prefix'] === 'preferred_prefix') {
    $header[] = t('Prefix');
  }
  if ($form['legalname']['#value']['legal_first'] === 'legal_first' || $form['preferredname']['#value']['preferred_first'] === 'preferred_first') {
    $header[] = t('First');
  }
  if ($form['legalname']['#value']['legal_middle'] === 'legal_middle' || $form['preferredname']['#value']['preferred_middle'] === 'preferred_middle') {
    $header[] = t('Middle');
  }
  if ($form['legalname']['#value']['legal_last'] === 'legal_last' || $form['preferredname']['#value']['preferred_last'] === 'preferred_last') {
    $header[] = t('Last');
  }
  if ($form['legalname']['#value']['legal_suffix'] === 'legal_suffix' || $form['preferredname']['#value']['preferred_suffix'] === 'preferred_suffix') {
    $header[] = t('Suffix');
  }
  
  foreach (element_children($form) as $delta) {
    if (is_numeric($delta)) {
      if ($form['use_legalname']['#value'] == 'legal_require') {
        $rows[$delta]['name'] = '<div class="fullname-type required">'. t('Legal name') .'<span class="form-required" title="This field is required.">*</span></div>';
      }
      else {
        $rows[$delta]['name'] = '<div class="fullname-type">'. t('Legal name') .'</div>';
      }
      unset($form['use_legalname']);
      
      if ($form['legalname']['#value']['legal_prefix'] === 'legal_prefix') {
        $rows[$delta]['prefix'] = drupal_render($form[$delta]['prefix']);
      }
      else {
        if ($form['use_preferredname']['#value'] != 'preferred_hide' && $form['preferredname']['#value']['preferred_prefix'] === 'preferred_prefix') {
          $rows[$delta]['prefix'] = '';
        }
        $form[$delta]['prefix']['#access'] = FALSE;
      }
      if ($form['legalname']['#value']['legal_first'] === 'legal_first') {
        $rows[$delta]['first'] = drupal_render($form[$delta]['first']);
      }
      else {
        if ($form['use_preferredname']['#value'] != 'preferred_hide' && $form['preferredname']['#value']['preferred_first'] === 'preferred_first') {
          $rows[$delta]['first'] = '';
        }
        $form[$delta]['first']['#access'] = FALSE;
      }
      if ($form['legalname']['#value']['legal_middle'] === 'legal_middle') {
        $rows[$delta]['middle'] = drupal_render($form[$delta]['middle']);
      }
      else {
        if ($form['use_preferredname']['#value'] != 'preferred_hide' && $form['preferredname']['#value']['preferred_middle'] === 'preferred_middle') {
          $rows[$delta]['middle'] = '';
        }
        $form[$delta]['middle']['#access'] = FALSE;
      }
      if ($form['legalname']['#value']['legal_last'] === 'legal_last') {
        $rows[$delta]['last'] = drupal_render($form[$delta]['last']);
      }
      else {
        if ($form['use_preferredname']['#value'] != 'preferred_hide' && $form['preferredname']['#value']['preferred_last'] === 'preferred_last') {
          $rows[$delta]['last'] = '';
        }
        $form[$delta]['last']['#access'] = FALSE;
      }
      if ($form['legalname']['#value']['legal_suffix'] === 'legal_suffix') {
        $rows[$delta]['suffix'] = drupal_render($form[$delta]['suffix']);
      }
      else {
        if ($form['use_preferredname']['#value'] != 'preferred_hide' && $form['preferredname']['#value']['preferred_suffix'] === 'preferred_suffix') {
          $rows[$delta]['suffix'] = '';
        }
        $form[$delta]['suffix']['#access'] = FALSE;
      }
      
      //if preferred name is active, show the input fields
      if ($form['use_preferredname']['#value'] != 'preferred_hide') {
        //if form has fields from preferred name, set a title based on required-ness
        if ($form[$delta]['prefix_preferred'] || $form[$delta]['first_preferred'] || $form[$delta]['middle_preferred'] || $form[$delta]['last_preferred'] || $form[$delta]['suffix_preferred']) {
          if ($form['use_preferredname']['#value'] == 'preferred_require') {
            $rows[$delta .'b']['name_preferred'] = '<div class="fullname-type required">'. t('Preferred name') .'<span class="form-required" title="This field is required.">*</span></div>';
          }
          else {
            $rows[$delta .'b']['name_preferred'] = '<div class="fullname-type">'. t('Preferred name') .'</div>';
          }
          unset($form['use_preferredname']);
        }
            
        if ($form['preferredname']['#value']['preferred_prefix'] === 'preferred_prefix') {
          $rows[$delta .'b']['prefix_preferred'] = drupal_render($form[$delta]['prefix_preferred']);
        }
        else {
          $rows[$delta .'b']['prefix_preferred'] = '';
          $form[$delta]['prefix_preferred']['#access'] = FALSE;
        }
        if ($form['preferredname']['#value']['preferred_first'] === 'preferred_first') {
          $rows[$delta .'b']['first_preferred'] = drupal_render($form[$delta]['first_preferred']);
        }
        else {
          $rows[$delta .'b']['first_preferred'] = '';
          $form[$delta]['first_preferred']['#access'] = FALSE;
        }
        if ($form['preferredname']['#value']['preferred_middle'] === 'preferred_middle') {
          $rows[$delta .'b']['middle_preferred'] = drupal_render($form[$delta]['middle_preferred']);
        }
        else {
          $rows[$delta .'b']['middle_preferred'] =  '';
          $form[$delta]['middle_preferred']['#access'] = FALSE;
        }
        if ($form['preferredname']['#value']['preferred_last'] === 'preferred_last') {
          $rows[$delta .'b']['last_preferred'] = drupal_render($form[$delta]['last_preferred']);
        }
        else {
          $rows[$delta .'b']['last_preferred'] = '';
          $form[$delta]['last_preferred']['#access'] = FALSE;
        }
        if ($form['preferredname']['#value']['preferred_suffix'] === 'preferred_suffix') {
          $rows[$delta .'b']['suffix_preferred'] = drupal_render($form[$delta]['suffix_preferred']);
        }
        else {
          $rows[$delta .'b']['suffix_preferred'] = '';
          $form[$delta]['suffix_preferred']['#access'] = FALSE;
        }
      }
      else {
        $form[$delta]['prefix_preferred']['#access'] = FALSE;
        $form[$delta]['first_preferred']['#access'] = FALSE;
        $form[$delta]['middle_preferred']['#access'] = FALSE;
        $form[$delta]['last_preferred']['#access'] = FALSE;
        $form[$delta]['suffix_preferred']['#access'] = FALSE;
      }
    }
  }
  unset($form['use_legalname']);
  unset($form['use_preferredname']);
  unset($form['required_parts']);
  unset($form['legalname']);
  unset($form['preferredname']);
  $output .= theme('table', $header, $rows);
  $output .= drupal_render($form);
  return $output;
} //function theme_cck_fullname_display 

I tested it by requiring the legal name, setting the preferred name to don't use, then using only the first, middle, and last name of the legal name, and requiring only the first and last name. Pre-changes, it was messed up. Post-changes it was fixed.

Thanks for the issue post. I'll get this out in a new release later today.

Anonymous’s picture

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for two weeks with no activity.