Codigo para Views agrupadas por un campo en particular en Drupal

Saque este código de los foros de drupal, la idea es generar un views que agrupe los resultados del query, para un campo en particular.
Personalmente lo use para la página de artículos en Organic SA, pero estoy seguro de que tiene mas potencial y utilidad, mostrando información en la sección de avisos clasificados.

Para conseguir el efecto, hay que hacer uso del "theme wizard", que viene incorporado en el modulo de Views. Es precisamente de allí donde se genera el código que debemos insertar en el archivo "template.php", y en código que debemos pegar en otro archivo que debemos crear nosotros.

El código para el template sería:

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

  $taken = array();

  // Group our nodes
  $set = array();
foreach ($nodes as $node) {
  $set[format_date($node->node_created, 'custom', 'd F Y')][] = $node;//este código no fue generado por el wizard del views, pero es necesario para que funcione cuando se usa como campo "agrupador" el de "node created time".
}

  // 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,
  );

  $output = '';
  foreach ($set as $label => $nodes) {
    $items= array();
    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-grouped_articles', $vars);
    }
    if ($items) {
      $output .= theme('item_list', $items, $label);
    }
  }
  return $output;
}

Este es el código para el archivo "...tpl.php"

<div class="view-label view-field-created">
  <?php print $created_label ?>
<div class="view-field view-data-created">
  <?php print $title ?>
</div>
</div>

Reply

The content of this field is kept private and will not be shown publicly.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><h2><h3><div><del><img><hr>
  • Lines and paragraphs break automatically.
  • You may use [inline:xx] tags to display uploaded files or images inline.
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.

More information about formatting options

CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
6 + 8 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.