function noderelationships_backref_render_view in Node Relationships 6
Display a back reference view.
Parameters
$back_reference_view:
$context:
$render_view_title:
See also
noderelationships_views_pre_view()
noderelationships_customize_backref_view()
2 calls to noderelationships_backref_render_view()
- noderelationships_backref_build_content in ./
noderelationships.pages.inc - Build back reference content for the given node and region settings.
- theme_noderelationships_formatter_default in ./
noderelationships.pages.inc - Field formatter for back references view.
File
- ./
noderelationships.pages.inc, line 107 - Implementation of user land pages.
Code
function noderelationships_backref_render_view($back_reference_view, $context, $render_view_title = TRUE) {
static $pager_element = 0;
$referred_node =& $context['referred_node'];
$referred_type =& $context['referred_type'];
$referrer_type =& $context['referrer_type'];
$field_name = $context['field_name'];
// Load settings of the referring field.
$referrer_field = content_fields($field_name, $referrer_type->type);
if (empty($referrer_field)) {
drupal_set_message(t('Could not locate %field in content type %type.', array(
'%field' => $field_name,
'%type' => $referrer_type->type,
)), 'error');
watchdog('noderelationships', 'Could not locate %field in content type %type.', array(
'%field' => $field_name,
'%type' => $referrer_type->type,
), WATCHDOG_ERROR);
return '';
}
// Prepare the name of the view and display.
if (empty($back_reference_view)) {
$view_name = NODERELATIONSHIPS_BACKREF_VIEW_NAME;
$display_id = 'default';
}
else {
list($view_name, $display_id) = explode(':', $back_reference_view);
}
// Load the view and check access to the given display.
if (!($view = views_get_view($view_name)) || !$view
->access($display_id)) {
drupal_set_message(t('Could not load the view %view:%display.', array(
'%view' => $view_name,
'%display' => $display_id,
)), 'error');
watchdog('noderelationships', 'Could not load the view %view:%display.', array(
'%view' => $view_name,
'%display' => $display_id,
), WATCHDOG_ERROR);
return '';
}
// Prepare values for the view arguments as follows:
// 0 - nid of the referred node.
// 1 - type of the referring node.
// 2 - name of the nodereference field in the referring type.
$view_args = array(
$referred_node->nid,
$referrer_type->type,
$field_name,
);
// Assign a different pager element for each view in the same page request.
$view->display_handler
->override_option('pager_element', $pager_element);
// Make sure the view is completely valid.
$errors = $view
->validate();
if (is_array($errors)) {
foreach ($errors as $error) {
drupal_set_message($error, 'error');
}
return '';
}
// Execute and render the view in preview mode. Note that we only generate
// output if the executed view query returns any result.
$view->preview = TRUE;
$view
->pre_execute($view_args);
$view
->execute($display_id);
if (!empty($view->result)) {
$content = $view->display_handler
->preview();
}
$view
->post_execute();
if (empty($view->result)) {
return '';
}
// Now that we have output for this view, we need to increase the pager
// element counter.
$pager_element++;
// Find out a title for this view.
if ($render_view_title) {
// If the view title is empty (default), then we'll generate one.
$view_title = $view
->get_title();
if (empty($view_title)) {
$arguments = array(
'%node-title' => $referred_node->title,
'%referrer-type-name' => $referrer_type->name,
'%referred-type-name' => $referred_type->name,
'%referrer-label' => $referrer_field['widget']['label'],
);
$view_title = t('Back references from %referrer-label in %referrer-type-name for %referred-type-name: %node-title', $arguments);
// Allow external modules alter the view title.
noderelationships_alter_label($view_title, 'backref_view_title', $context, $arguments);
}
}
else {
$view_title = '';
}
return theme('noderelationships_backref_view', $view_title, $content);
}