views:

1282

answers:

2

I've used the Views Theming Wizard to output a template and it gave me the following chunk of code to go in template.php.

I'd prefer to just maintain the one template, so all my functions will be calling the same one, and rather than writing numerous versions of the same function, I'm wondering if there's a way to string function names together? Something like:

function phptemplate_views_view_list_recent_articles($view, $nodes, $type),
phptemplate_views_view_list_popular_articles($view, $nodes, $type) {
  $fields = _views_get_fields();

  $taken = array();

  // Set up the fields in nicely named chunks.
  foreach ($view->field as $id => $field) {
    $field_name = $field['field'];
    if (isset($taken[$field_name])) {
      $field_name = $field['queryname'];
    }
    $taken[$field_name] = true;
    $field_names[$id] = $field_name;
  }

  // Set up some variables that won't change.
  $base_vars = array(
    'view' => $view,
    'view_type' => $type,
  );

  foreach ($nodes as $i => $node) {
    $vars = $base_vars;
    $vars['node'] = $node;
    $vars['count'] = $i;
    $vars['stripe'] = $i % 2 ? 'even' : 'odd';
    foreach ($view->field as $id => $field) {
      $name = $field_names[$id];
      $vars[$name] = views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view);
      if (isset($field['label'])) {
        $vars[$name . '_label'] = $field['label'];
      }
    }
    $items[] = _phptemplate_callback('views-list-first-with-abstract', $vars);
  }
  if ($items) {
    return theme('item_list', $items);
  }
}

Thanks,
Steve

+1  A: 

You could just have the templates you need call one version of the actual function.

Something like:

function phptemplate_views_view_list_recent_articles($view, $nodes, $type){
          actual_template_function($view, $nodes, $type);
}

function phptemplate_views_view_list_popular_articles($view, $nodes, $type){
          actual_template_function($view, $nodes, $type);
}
pdemarest
A: 

One correction above that slowed me down for a 1/2 hour... your need to include a return:

return actual_template_function($view, $nodes, $type);

Other than that, works great.