*************** *** 82,87 **** '#default_value' => $field['token_enabled'], ); } $form_state = NULL; $form['super_default_widget'] = array('#tree' => TRUE); --- 82,94 ---- '#default_value' => $field['token_enabled'], ); } + + $form['allow_recursion'] = array( + '#type' => 'checkbox', + '#title' => t('Allow recursion'), + '#description' => t('Allow views to load the node containing the view. Enable this only if you really know what you\'re doing.'), + '#default_value' => $field['allow_recursion'], + ); $form_state = NULL; $form['super_default_widget'] = array('#tree' => TRUE); *************** *** 97,103 **** break; case 'save': - return array('allowed_views', 'super_default', 'token_enabled', 'super_default_widget'); case 'database columns': $columns = array( --- 104,110 ---- break; case 'save': + return array('allowed_views', 'super_default', 'token_enabled', 'super_default_widget', 'allow_recursion'); case 'database columns': $columns = array( *************** *** 146,151 **** $items[$delta] = _viewfield_get_super_defaults($field); $items[$delta]['default'] = TRUE; } // load here the actual arguments to avoid the body disappearing $items[$delta]['actual_vargs'] = _viewfield_get_view_args($field, $items[$delta][$field_key_vargs], $node); $adds[$field_name][$delta] = $items[$delta]; --- 153,160 ---- $items[$delta] = _viewfield_get_super_defaults($field); $items[$delta]['default'] = TRUE; } + // Keep the allow_recursion flag for later use. + $items[$delta]['allow_recursion'] = $field['allow_recursion']; // load here the actual arguments to avoid the body disappearing $items[$delta]['actual_vargs'] = _viewfield_get_view_args($field, $items[$delta][$field_key_vargs], $node); $adds[$field_name][$delta] = $items[$delta]; *************** *** 191,197 **** $view_name = $element['#item']['vname']; $view_args = $element['#item']['actual_vargs']; - return _viewfield_get_view_content($view_name, $view_args, $display, $node); } --- 200,206 ---- $view_name = $element['#item']['vname']; $view_args = $element['#item']['actual_vargs']; + return _viewfield_get_view_content($view_name, $view_args, $display, $node, $element['#item']['allow_recursion']); } *************** *** 476,482 **** /** * Return a themed view avoiding viewfield recursion */ - function _viewfield_get_view_content($view_name, $view_args, $display, $node) { global $_viewfield_stack; $output = ''; --- 485,491 ---- /** * Return a themed view avoiding viewfield recursion */ + function _viewfield_get_view_content($view_name, $view_args, $display, $node, $allow_recursion) { global $_viewfield_stack; $output = ''; *************** *** 484,490 **** if (!empty($view_name) && count($_viewfield_stack) <= 2) { // Need to prevent recursive views and node building, but don't need to do it on // new node previews. - if ($node->nid) { _viewfield_nodestack_push($node->nid); } --- 493,499 ---- if (!empty($view_name) && count($_viewfield_stack) <= 2) { // Need to prevent recursive views and node building, but don't need to do it on // new node previews. + if ($node->nid && !$allow_recursion) { _viewfield_nodestack_push($node->nid); } *************** *** 494,500 **** } // This node is "safe" again. - if ($node->nid) { _viewfield_nodestack_pop(); } } --- 503,509 ---- } // This node is "safe" again. + if ($node->nid && !$allow_recursion) { _viewfield_nodestack_pop(); } }