Hi

I'm trying to load a view using views_get_view set values to it's exposed filters / filters
and display it.

the main reason I need it is to display an age range select and maybe translate the age range to date of birth dates I have in my nodes, I thought of either modifying the exposed and later set the values to fit my view or creating my on form and then loading the view with those params

I've tried a few things some worked better some less but I can't manage to get it right

thanks

nir

this is the code I'm using to load the view


  $view = views_get_view('browser');

  // embed browse view 
  $arguments = array();
  // Age - age selection
  if ((!empty($_GET['age'])) && (intval($_GET['age']) != 0)) {
    $age_max = $_GET['age'];
    $age_min = $age_max--;
    $view->set_exposed_input(array('identifier' => 'age','value' => array('min' => $age_min, 'max' => $age_max)));
  }
  // s - sex selection
  if (!empty($_GET['s'])) {
    $view->set_exposed_input(array('identifier' => 's','value' => $_GET['s']));
  }
  // occu - occupation data
  if (!empty($_GET['occu'])) {
    $view->set_exposed_input(array('identifier' => 'occu','value' => $_GET['occu']));
  }
  $result = $view->render('default');
  print $result;

Comments

dawehner’s picture

I suggest to use $view->preview instaed of render. Render does not execute everything which is needed for a full views workflow, for example pre_render.

nir’s picture

Thanks,

sorry but I haven't understood fully

I want to supply filter values to a view -> I'll build a form or modify the existing exposed filter form
I want to be able according to that form output specify filters to the view

I get an age group 1-5 and I want to send the view min max dates according to that

I didn't understood how and where to use the $view-> preview

dawehner’s picture


  $view = views_get_view('browser');

  // embed browse view
  $arguments = array();
  // Age - age selection
  if ((!empty($_GET['age'])) && (intval($_GET['age']) != 0)) {
    $age_max = $_GET['age'];
    $age_min = $age_max--;
    $view->set_exposed_input(array('identifier' => 'age','value' => array('min' => $age_min, 'max' => $age_max)));
  }
  // s - sex selection
  if (!empty($_GET['s'])) {
    $view->set_exposed_input(array('identifier' => 's','value' => $_GET['s']));
  }
  // occu - occupation data
  if (!empty($_GET['occu'])) {
    $view->set_exposed_input(array('identifier' => 'occu','value' => $_GET['occu']));
  }
  $result = $view->preview('default');
  print $result;

You could try out this.

nir’s picture

Thanks

it doesn't seem to work

I've copied the code to my node - I giving the view different values but the display is always the same.

nir

nir’s picture

Thanks for the response

I've changed the code from set_exposed_filter ($filter) to
$view->exposed_input['age'] = array('min' => $age_min, 'max' => $age_max);

and now it works

dawehner’s picture

Status: Active » Fixed

Fine.

You could perhaps try out

$view->set_display('default');

Then set the exposed input... and then use view->preview.

Status: Fixed » Closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.

stefan81’s picture

Status: Closed (fixed) » Active

Hi, how to apply non-exposed filters?
I am trying to print an embedded view, filtered by a cck date field.

With the code below,
I get the view rendered, but the filter is not applied.

Maybe I need to pass in the operator?
I already defined a "same or smaller as" operator in the view though.

	$view = views_get_view('Treffpunkt');
	$display_id = 'default';
	$view->set_display($display_id);
	$filter = $view->get_item($display_id, 'filter', 'field_eventdate');
	$filter['value'] = '2011-02-11';
	$view->set_item($display_id, 'filter', 'field_eventdate', $filter);
	$view->set_items_per_page(3);
	$viewsoutput = $view->render();
	print $viewsoutput;

should execute like this:

SELECT node.nid AS nid, node.title AS node_title, node_data_field_eventdate.field_eventdate_value AS node_data_field_eventdate_field_eventdate_value, node_data_field_eventdate.field_eventdate_value2 AS node_data_field_eventdate_field_eventdate_value2, node.type AS node_type, node.vid AS node_vid FROM node node  LEFT JOIN content_field_eventdate node_data_field_eventdate ON node.vid = node_data_field_eventdate.vid WHERE DATE_FORMAT(STR_TO_DATE(node_data_field_eventdate.field_eventdate_value, '%Y-%m-%%dT%T'), '%Y-%m-%%d') <= '2011-02-11' ORDER BY node_data_field_eventdate_field_eventdate_value DESC
stefan81’s picture

any idea?

stefan81’s picture

Status: Active » Closed (fixed)

Ok, I exported the view and checked the filters again.
In my case, the filter "date_filter" has an additional array;

$handler->override_option('filters', array(
  'date_filter' => array(
    'operator' => '<',
    'value' => array(
      'value' => NULL,
      'min' => NULL,
      'max' => NULL,
      'default_date' => '',
      'default_to_date' => '',
    ),

so I needed to wrap the filter into an array.
Working code:


	<?php
	$view = views_get_view('Treffpunkt');
	$display_id = 'default';
	$view->set_display($display_id);
	
	$item = $view->get_item($display_id, 'filter', 'date_filter');
	$item['value'] = array('value'=>'2010-09-27');		
	$view->set_item($display_id, 'filter', 'date_filter', $item);

	$view->set_items_per_page(3);
	$viewsoutput = $view->render();
	print $viewsoutput;

	?>

Hope this helps someone else.

youngelpaso’s picture

Thanks. great discussion!

JCB’s picture

Here is my code which I used to filter nodes base on date using embed view via views_get_view().
*Note that the filter is already created on each view with the opperators (less than or equal to).

$arg_discharge_completed = '2011-05-09';

$nameshipped = 'vessels_shipped';
$viewshipped = views_get_view($nameshipped);
$display_id_shipped = 'default';
$viewshipped->set_display($display_id_shipped);
$filtershippped = $viewshipped->get_item($display_id_shipped, 'filter', 'field_vessel_date_shipped_value');
$filtershippped['value'] = array('value'=>$arg_discharge_completed);
$viewshipped->set_item($display_id_shipped, 'filter', 'field_vessel_date_shipped_value', $filtershippped);
$viewshippedoutput = $viewshipped->render();

$nametipped = 'reports_trains_tipped_for_stockp';
$viewtipped = views_get_view($nametipped);
$display_id_tipped = 'default';
$viewtipped->set_display($display_id_tipped);
$filtertipped = $viewtipped->get_item($display_id_tipped, 'filter', 'field_tracking_discharge_end_value');
$filtertipped['value'] = array('value'=>$arg_discharge_completed);
$viewtipped->set_item($display_id_tipped, 'filter', 'field_tracking_discharge_end_value', $filtertipped);
$viewtippedoutput = $viewtipped->render();
smiletrl’s picture

Issue summary: View changes

#10 works for my needs as well.

I was trying to use views_get_view_result($name, $display_id, arg1, arg2); to pass date filter arguments to views to get result directly. It does't work. #10 works. However, I made some changes to it to make it work. Assigning value to the item doesn't work, but 'default_date' and 'default_to_date' works.

  $view = views_get_view($name);
  $view->set_display($display_id);
  $item = $view->get_item($display_id, 'filter', 'date_filter');
  //$item['value'] = array('value'=>'2015-01-01 00:00:00');
  $item['default_date'] = '2015-01-01 00:00:00';
  $item['default_to_date'] = '2015-12-01 00:00:00';
  $view->set_item($display_id, 'filter', 'date_filter', $item);
  $item = $view->get_item($display_id, 'filter', 'date_filter');
  $view->pre_execute();
  $view->execute();
  $r = $view->result;
  dsm($r); // This is what I need.

You can also use following code to get the item/filter you want to change in code:

  $views = views_get_view($name);
  $r = $views->display['default']->display_options['filters'];
  dsm($r);
smiletrl’s picture

#5 works for another use case;

  $view = views_get_view($name);
  $view->set_display($display_id);

  $start = '2015-12-01 00:00:00';
  $end = '2015-12-31 00:00:00';
  $view->exposed_input['created'] = array('min' => $start, 'max' => $end);
  //$r = $view->get_exposed_input();
  //dsm($r);
  $view->pre_execute();
  $view->execute();
  $r = $view->result;
  dsm($r); // This is what I need.
Naveen Balakrishnan’s picture

hi please guide me to give the value for the exposed filter.
code:
$view_all = views_get_view('blog_category_display_block');

$view_all->set_exposed_input(array('identifier' => 'field_blog_category_target_id','value' => $_REQUEST['category']));

$result_all = $view_all->preview('default');

print $result_all;