I want to make a view which displays all nodes of a certain content type, except for the last six submitted nodes. I.e. if there are 12 nodes fulfilling the view's filtering criteria, it only shows the six oldest. Is this possible to do?

Thanks,
joeboris

Comments

nickmaynard’s picture

id also like to know how to do this.

inforeto’s picture

Try this:

For list view:

function phptemplate_views_view_list_VIEWNAME($view, $nodes, $type) {
  $fields = _views_get_fields();
  $skip = 0;// THIS
  foreach ($nodes as $node) {
    $item = '';
    $skip++; // THIS
    if ($skip > 6) { // THIS
      foreach ($view->field as $field) {
        if ($field['label']) {
          $item .= "<div class='view-label view-label-$field[queryname]'>" . $field['label'] . "</div>";
        }
        $item .= "<div class='view-field view-data-$field[queryname]'>" . views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view) . "</div>";
      }
      $items[] = "<div class='view-item view-item-$view->name'>$item</div>\n"; 
    } // THIS
  }
  if ($items) {
    return theme('item_list', $items);
  }
}

For table view:

function phptemplate_views_view_table_VIEWNAME($view, $nodes, $type) {
  $fields = _views_get_fields();
  $skip = 0;// THIS
  foreach ($nodes as $node) {
    $skip++; // THIS
    if ($skip > 6) { // THIS
      $row = array();
      foreach ($view->field as $field) {
        $cell['data'] = views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view);
        $cell['class'] = "view-field view-field-$field[queryname]";
        $row[] = $cell;
      }
      $rows[] = $row;
    } // THIS
  }
  return theme('table', $view->table_header, $rows);
}

Cut and paste in template.php, and change VIEWNAME for the appropiate view name.

Currently there's no limit option in the UI, but you can modify views with php in the theme.
It is a generic sample code found here: http://drupal.org/node/42597

joeboris’s picture

Thank you for your fast reply! It worked! I'm using Bonus Grid View, so I had to modify it slightly; I'll include the code, in case someone else needs it. It shows the view except for the four first nodes (my grid is modified to hold six nodes, so I made it fit Views Bonus' defaults).

<?php
function phptemplate_views_bonus_view_grid_VIEWNAME($view, $nodes, $type) {
  $fields = _views_get_fields();
  $content = '<table class="view-grid view-grid-' . $view->name . '">';
  $count = 0;
  $total = count($nodes);
  $skip = 0;// THIS
  foreach ($nodes as $node) {
    $skip++; // THIS
    if ($skip > 4) { // THIS
    $item = '';
    if ($count % 4 == 0) { 
      $content .= '<tr>'; 
    }

    foreach ($view->field as $field) {
      if ($fields[$field['id']]['visible'] !== FALSE) {
        if ($field['label']) {
          $item .= "<div class='view-label view-label-$field[queryname]'>" . $field['label'] . "</div>";
        }
        $item .= "<div class='view-field view-data-$field[queryname]'>" . views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view) . "</div>";
      }
    }
    $content .= "<td class='view-grid-item'><div class='view-item view-item-$view->name'>$item</div></td>\n"; 

    $count++;
    if ($count % 4 == 0 || $count == $total) {
      $content .= '</tr>';
    }
  }
  }
  $content .= '</table>';
  
  if ($content) {
    return $content;
  }
}
?>

Cheers!
joeboris