view->display_handler->get_handlers('argument'); foreach ($arguments as $id => $argument) { $options[$id] = $argument->ui_name(); } $form['argument'] = array( '#type' => 'select', '#title' => t('Argument to use'), '#description' => t('The argument that contains the node ID. This content will be re-cached whenever that node is updated. If there is no node ID then the cache expiration will default to 1 hour.'), '#options' => $options, '#default_value' => $this->options['argument'], ); } function summary_title() { return t('Node comment thread'); } function cache_expire($type) { // extract the node ID. if (isset($this->view->argument[$this->options['argument']])) { $nid = $this->view->argument[$this->options['argument']]->argument;; $node = node_load($nid); if ($node) { return max($node->changed, $node->last_comment_timestamp); } } // default to 1 hour. return time() - 3600; } /** * Post process cached output for new strings. * * The template preprocess will use placeholders for any 'new' output, so * that the post process can replace it. This postprocess runs despite caching, * so the freshness of comments can always be checked accurately for the * logged in user. Without this, the "new" values are incorrect. This can * be extended by modules that utlize other values that need to be * freshened very easily with hook_views_post_render. */ function post_render(&$output) { $tokens = array(); // First comment checking. static $first_new = TRUE; if (!isset($this->view->argument[$this->options['argument']])) { return; } $nid = $this->view->argument[$this->options['argument']]->argument;; $node = node_load($nid); if (!$node) { return; } // Set up tokens for each row. foreach ($this->view->result as $id => $row) { // we probably shouldn't use node_created directly here, but the display // doesn't use any relationship so the chances of this alias failing is // much slimmer than other weird things going wrong. $new_output = $first = $new_class = ''; $new = node_mark($node->nid, $row->node_changed); if ($new) { $new_output = $new ? '' . t('new') . '' : ''; $new_class = 'comment-new'; if ($first_new) { $first = ""; $first_new = FALSE; } } $tokens[""] = $first; $tokens[""] = $new_output; $tokens[""] = $new_class; } // Replace $output = strtr($output, $tokens); } }