You are here

function views_attach_nodeapi in Views attach 6

Same name and namespace in other branches
  1. 6.2 views_attach.module \views_attach_nodeapi()
  2. 7.2 views_attach.module \views_attach_nodeapi()

Implementation of hook_nodeapi().

File

./views_attach.module, line 72

Code

function views_attach_nodeapi(&$node, $op, $teaser, $page) {
  switch ($op) {
    case 'view':

      // A side effect of defining it this way is that if we're called for an
      // embedded node, with no teaser or page, we use the full version's settings.
      // That is by design.
      if (isset($node->build_mode)) {
        $mode = $node->build_mode;
        if ($mode === NODE_BUILD_NORMAL) {
          $mode = $teaser ? 'teaser' : 'full';
        }
      }
      else {
        $mode = 'full';
      }
      $views = views_attach_get_node_views($node->type, $mode);
      foreach ($views as $info) {
        $view = views_get_view($info['name']);
        $view
          ->set_display($info['display']);
        $args = $view->display_handler
          ->get_option('default_argument') === 'nid' ? array(
          $node->nid,
        ) : array();
        $result = $view
          ->execute_display($info['display'], $args);
        if (!empty($result)) {
          $node->content[$view->name . '_' . $info['display']] = array(
            '#weight' => module_exists('content') ? content_extra_field_weight($node->type, $view->name . '_' . $info['display']) : 10,
            '#value' => $result,
          );
        }
      }
      break;
  }
}