123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- <?php
- /**
- * @file
- * Definition of views_handler_field_comment_node_link.
- */
- /**
- * Handler for showing comment module's node link.
- *
- * @ingroup views_field_handlers
- */
- class views_handler_field_comment_node_link extends views_handler_field_entity {
- /**
- * {@inheritdoc}
- */
- public function construct() {
- parent::construct();
- // Add the node fields that comment_link will need.
- $this->additional_fields['nid'] = array(
- 'field' => 'nid',
- );
- $this->additional_fields['type'] = array(
- 'field' => 'type',
- );
- $this->additional_fields['comment'] = array(
- 'field' => 'comment',
- );
- }
- /**
- * {@inheritdoc}
- */
- public function option_definition() {
- $options = parent::option_definition();
- $options['teaser'] = array('default' => FALSE, 'bool' => TRUE);
- return $options;
- }
- /**
- * {@inheritdoc}
- */
- public function options_form(&$form, &$form_state) {
- $form['teaser'] = array(
- '#type' => 'checkbox',
- '#title' => t('Show teaser-style link'),
- '#default_value' => $this->options['teaser'],
- '#description' => t('Show the comment link in the form used on standard node teasers, rather than the full node form.'),
- );
- parent::options_form($form, $form_state);
- }
- /**
- * {@inheritdoc}
- */
- public function query() {
- $this->ensure_my_table();
- $this->add_additional_fields();
- }
- /**
- * {@inheritdoc}
- */
- public function render($values) {
- // Build fake $node.
- $node = $this->get_value($values);
- // Call comment.module's hook_link:
- // comment_link($type, $node = NULL, $teaser = FALSE)
- // Call node by reference so that something is changed here.
- comment_node_view($node, $this->options['teaser'] ? 'teaser' : 'full');
- // Question: should we run these through:
- // drupal_alter('link', $links, $node);
- // Might this have unexpected consequences if these hooks expect items in
- // $node that we don't have?
- // Only render the links, if they are defined.
- return !empty($node->content['links']['comment']) ? drupal_render($node->content['links']['comment']) : '';
- }
- }
|