What is best way to combine multiple fields in template preprocess?
I would do this using hook_node_view() or theme_preprocess_node(), but I'm not sure which is the best way.

function MYMODULE_node_view($node, $view_mode = 'full', $langcode = NULL) {
    if($view_mode == 'full'){
        if($node-&gt;type == 'your_content_type'){     
            $field_1 = $node-&gt;content['your_field_1'];
            $field_2 = $node-&gt;content['your_field_2'];
            $field_3 = $node-&gt;content['your_field_3'];

            // remove individual fields
            unset($node-&gt;content['your_field_1']);
            unset($node-&gt;content['your_field_2']);
            unset($node-&gt;content['your_field_3']);

            // combine those fields in a tag
            $html = '&lt;div id="some-id"&gt;';
            $html .= '&lt;span&gt;'.$field_1.'&lt;/span&gt;';
            $html .= '&lt;span&gt;'.$field_2.'&lt;/span&gt;';
            $html .= '&lt;span&gt;'.$field_3.'&lt;/span&gt;';
            $html .= '&lt;/div&gt;';

            $node-&gt;content['combined_field'] array(
                '#markup' =&gt; $html,
                '#weight' =&gt; 1
            );
        }
    }
}


Another way is to alter these from THEME_preprocess_node() in the template.php.

function MYTHEME_preprocess_node(&amp;$variables) {
  if ($variables['view_mode'] == 'full' &amp;&amp; node_is_page($variables['node'])) {      
    $field1 = strip_tags($variables['content']['field_1']['#markup']);
    $field2 = strip_tags($variables['content']['field_2']['#markup']);

    // remove individual fields
    unset($variables['content']['field_1']);
    unset($variables['content']['field_2']);

    // combine those fields in a tag
    $variables['content']['combined_fields'] = array(
        '#markup' =&gt; '&lt;div id="some_id"&gt;'.$field1.$field2.'&lt;/div&gt;',
        '#weight' =&gt; 2
    );
  }
}