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';
}
?>

Comments

Go be an asshole somewhere else.

Thanks for sharing this information..

Add new comment