How can I display Drupal comments on a separate page from hook_node_view()?
The Talk module shows the comments for a node in a tab added to the node page.


  The talk module removes comments from the node page and puts them on a separate tab. This style of commenting is very popular on Wiki sites (usually called the "discussion" page) and on news websites where the goal is to separate user generated content from editorial content.
  
  When installed this module will add a tab to the set of tabs at the top of a node view page like "View | Edit | Talk" and provides a link at the bottom of the node to go to the talk page and view comments. 


If you need to do something similar, but on a completely different page, you can look at the code of the module to write similar code.
In short, apart from implementing hook_node_view(), the module implements hook_node_load() to set $node-&gt;comment to 0 (after saving its value in another node property). Then it calls comment_node_view() after temporary setting the values of the Drupal variables used from that function.

  global $conf;
  $clone = clone($node);
  $clone-&gt;comment = _talk_node_comment_value($clone);
  $recover = FALSE;
  if (array_key_exists('comment_form_location_' . $node-&gt;type, $conf)) {
    $original_setting = $conf['comment_form_location_' . $node-&gt;type];
    $recover = TRUE;
  }
  $conf['comment_form_location_' . $node-&gt;type] = COMMENT_FORM_SEPARATE_PAGE;
  comment_node_view($clone, $view_mode, $langcode);
  if ($recover) {
    $conf['comment_form_location_' . $node-&gt;type] = $original_setting;
  }
  else {
    unset($conf['comment_form_location_' . $node-&gt;type]);
  }

  // Display comment summary
  $addcmnt = ((_talk_node_comment_value($node) == COMMENT_NODE_OPEN) &amp;&amp; (($view_mode != "teaser") || variable_get('talk_addcmnt_teaser', TRUE)));  
  if ($addcmnt) {
    $links = $clone-&gt;content['links']['comment']['#links'];
    $node-&gt;content['links']['comment'] = array(
      '#theme' =&gt; 'links__node__comment__talk',
      '#attributes' =&gt; array(
        'class' =&gt; array('links', 'inline'),
      ),
    );

    foreach ($links as $link) {
      if(talk_activated($node-&gt;type)) {
        if (isset($link['href']) &amp;&amp; $link['href'] == 'node/' . $node-&gt;nid) {
          $link['href'] .= '/talk';
        }
      }
      $node-&gt;content['links']['comment']['#links'][] = $link;
    }
  }
  // Add the Talk link if user has access and it's not blank
  if (_talk_access($node) &amp;&amp; strlen(variable_get('talk_link', '')) &gt; 0) {
    $node-&gt;content['links']['comment']['#links'][] = array(
      'href' =&gt; 'node/' . $node-&gt;nid . '/talk',
      'title' =&gt; talk_title($node, 'link'),
    );
  }