When I include following line in my hook_pre_render(), some token dissapears:

$header_item = $view->get_item('default', 'header', 'text');

Weird.
Like my Overwritten output of 'Node: Comment count', or Overwritten output of 'Content: Submitter'.

[comment_count] Comments
by: [field_submitter_name_value]

Any ideas?

Comments

kenorb’s picture

Title: $view->get_item makes token dissappears » $view->get_item in hook_pre_render makes token dissappears
Category: support » bug

Probably because token values are executed twice? And second time are empty?

kenorb’s picture

The same when executed this like in pre_render:

$view->set_item_option('default', 'header', 'text', 'content', 'test');

Before upgrading from Views2 I had no similar problems with that hook. But it was rather object change, not a function call.

kenorb’s picture

Title: $view->get_item in hook_pre_render makes token dissappears » $view->get_item, set_item_option in hook_pre_render makes token dissappears

As a workaround, is there any other methods getting or setting items without breaking tokens?

kenorb’s picture

It's related to feature: #349178: Generic Link handler
File: /handlers/views_handler_field.inc
Git link: http://drupalcode.org/project/views.git/blame/429d3608a94b0a2436c7cd6006...

  function get_render_tokens($item) {
...
656	    // Now add replacements for our fields.
657	    foreach ($this->view->display_handler->get_handlers('field') as $field => $handler) {
658	      if (isset($handler->last_render)) {
659	        $tokens["[$field]"] = $handler->last_render;
660	      }
661	      else {
662	        $tokens["[$field]"] = '';
663	      }

When it's working, first condition is executed, when I add get_item, second condition is executed, that's empty token value.

dawehner’s picture

hook_views_pre_render is perhaps too late to do it.
Something like hook_views_pre_build might be better.

kenorb’s picture

Tried with hook_views_pre_build, hook_pre_render, hook_pre_execute and there is the same problem.
Without code does work, with code (even get_item) doesn't work.

kenorb’s picture

Did workaround in hook_views_post_render.


/**
 * Implementation of hook_views_post_render().
 */
function hook_views_post_render(&$view, &$output) {
  switch ($view->name) {
    case 'my_view':
      $header_text = 'my header text';
      $output = $header_text . $output;
    break;
  }
}

Token doesn't disappear then.

dawehner’s picture

Status: Active » Fixed

You could have used hook_views_pre_render and directly alter $view->filter['id']

kenorb’s picture

Status: Fixed » Active

It's fixed?
It's a bug report. Views should render all tokens (which is allowed), not only the first one, without any workarounds.

twardnw’s picture

Version: 6.x-3.x-dev » 7.x-3.5

I too am having this issue. As soon as I have a $view->get_item() in my hook_views_pre_render I lose my tokens.

kenorb’s picture

Priority: Normal » Minor
Issue summary: View changes