This is a code snippet I'm using that lets me create views by hand so I can test the process of build/execute/render. I'm posting it here because the markdown syntax interferes with code on groups.drupal.org :/

<?php
// $Id: views.module,v 1.194 2007/08/19 23:29:50 merlinofchaos Exp $

/**
* @file views.module
* Query and view site content
*/

function views_test_theme() {
  return array(
   
'views_test_form' => array(
     
'arguments' => array('form' => NULL),
    ),
  );
}

/**
* Implementation of hook_menu
*/
function views_test_menu() {
 
$items['views/test'] = array(
   
'page callback' => 'views_test_test',
   
'access callback' => TRUE,
   
'title' => 'Views test',
   
'type' => MENU_NORMAL_ITEM,
  );
 
$items['views/test/1'] = array(
   
'page callback' => 'views_test_test_1',
   
'access callback' => TRUE,
   
'title' => 'Views test 1',
   
'type' => MENU_NORMAL_ITEM,
  );
 
$items['views/test/2'] = array(
   
'page callback' => 'views_test_test_2',
   
'access callback' => TRUE,
   
'title' => 'Views test 2',
   
'type' => MENU_NORMAL_ITEM,
  );
 
$items['views/test/3'] = array(
   
'page callback' => 'views_test_test_3',
   
'access callback' => TRUE,
   
'title' => 'Views test 3',
   
'type' => MENU_NORMAL_ITEM,
  );

  return
$items;
}


function
views_test_test() {
  return
' ';
}


function
views_test_test_1() {
 
views_include('view');

 
$view = new view;
 
$view->name = 'foo';
 
$view->description = 'foobar';
 
$view->set_page_size(3);

 
$argument = new views_argument;
 
$argument->type = 'node_nid';
 
$argument->default_action = 'not_found';
 
$argument->title = '%1';

 
$view->argument[] = drupal_clone($argument);
 
$argument->default_action = 'summary, ascended';
 
$view->argument[] = $argument;

 
$view->save();

 
$view2 = new view;
 
$view2->load($view->vid);

 
$output = '<pre>';
 
$array = array();
 
$output .= "Array test: " . (array_push($array, 'foo'));
 
$output .= "\n";
 
$output .= var_export($view, 1);
 
$output .= var_export($view2, 1);
 
$output .= '</pre>';
  return
$output;
}

function
views_test_test_2() {

 
views_include('query');
 
$query = new views_query;



 
$book_parent = $query->add_relationship('book_parent', new views_join('node', 'book', 'pid', 'nid'));
 
$book_parent_users = $query->ensure_table('users', 'book_parent');

 
$book_parent_parent = $query->add_relationship('book_parent_parent', new views_join('node', 'book', 'pid', 'nid'), 'book_parent');
 
$book_parent_parent_users = $query->ensure_table('users', 'book_parent_parent');



 
$query->add_relationship('term_hierarchy_1', new views_join('term_hierarchy', 'term_hierarchy', 'parent', 'tid'));
 
$query->add_relationship('term_hierarchy_2', new views_join('term_hierarchy', 'term_hierarchy', 'parent', 'tid'), 'term_hierarchy_1');
 
$book_parent_users = $query->ensure_table('term_data');
 
$book_parent_users = $query->ensure_table('term_data', 'term_hierarchy_1', new views_join('term_data', 'term_hierarchy', 'tid', 'tid'));
 
$book_parent_users = $query->ensure_table('term_data_x', 'term_hierarchy_2');

 
$query->add_field('bar', 'baz');
 
$query->add_field('node', 'title');
 
$query->add_field(NULL, 'unix_timestamp(some_value)');

 
$query->set_where_group('or', 'or');
 
$query->add_where(0, 'froot_loops = 1', 'froot', 'loops');
 
$query->add_where(0, 'gay = yes', 'gay', 'yes');
 
$query->add_where('or', 'foo = bar');
 
$query->add_where('or', 'bar = baz', 'bar', 'baz');

 
$output = '';

 
$output .= '<pre>';
 
$output .= $query->query() . "\n";
 
$output .= var_export($query->get_where_args(), true) . "\n";
/*
  $output .= "book_parent: <b>$book_parent</b>\n";
  $output .= "book_parent_users: <b>$book_parent_users</b>\n";
  $output .= "book_parent_parent: <b>$book_parent_parent</b>\n";
  $output .= "book_parent_parent_users: <b>$book_parent_parent_users</b>\n";
*/
 
$output .= var_export($query, 1);
 
$output .= '</pre>';
  return
$output;
}

function
views_test_3() {
 
$output = '';

 
$view = views_get_view('views_test');
  if (!
$view) {
   
$view = new view;
   
$view->name = 'views_test';
   
$view->description = 'A view being used to test some handlers.';
   
$view->set_page_size(3);

   
$display = new views_display;
   
$display->display_plugin = 'embed';
   
$display->style_plugin = 'default';
   
$display->id = 'embed';
   
$view->display[] = $display;

   
$field = new views_field;
   
$field->tablename = 'node';
   
$field->field = 'title';
   
$field->display_id = 'page';
   
$view->field[] = drupal_clone($field);

   
$field->field = 'created';
   
$view->field[] = drupal_clone($field);
   
   
$field->tablename = 'users';
   
$field->field = 'name';
   
$view->field[] = $field;

   
$sort = new views_sort;
   
$sort->tablename = 'node';
   
$sort->field = 'created';
   
$sort->order = 'ASC';
   
$view->sort[] = $sort;

/*
    $filter = new views_filter;
    $filter->tablename = 'node';
    $filter->field = 'nid';
    $filter->operator = '=';
    $filter->value = 3;
    $view->filter[] = $filter;
*/

   
$argument = new views_argument;
   
$argument->tablename = 'node';
   
$argument->field = 'nid';
   
$argument->default_action = 'summary asc';
   
$view->argument[] = $argument;

   
$view->save();
  }

//  $view->build();
//  $view2 = views_get_view('views_test');
//  $view2->args = array('1');
//  $view2->execute();
 
$code = $view->export();
 
dsm('Code');
 
dsm($code);
  eval(
$code);
 
dsm($view);
//  $output .= print_r($view->build_info, 1);
//  $output .= print_r($view2->build_info, 1);
//  $output .= $view2->render();
 
return 'x';
}
?>

Why not add some documentation to this page first :)

Bite me.

Go be an asshole somewhere else.

Thanks for sharing this

Thanks for sharing this information..

Post new comment

The content of this field is kept private and will not be shown publicly.