Posted by Merlin on Fri, 09/28/2007 - 7:18pm
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
Why not add some documentation to this page first :)
http://drupal.org/node/99595
*cough*
Bite me.
Go be an asshole somewhere else.
Thanks for sharing this
Thanks for sharing this information..
Add new comment