function noderelationships_customize_backref_view in Node Relationships 6
Apply custom configuration to the given back reference view.
1 call to noderelationships_customize_backref_view()
- noderelationships_views_pre_view in ./
noderelationships.module - Implementation of hook_views_pre_view().
File
- ./
noderelationships.inc, line 898 - Common functions for the noderelationships module.
Code
function noderelationships_customize_backref_view(&$view, $display_id, &$view_args, $reset_current_display = TRUE) {
// Nothing to do if the view has already been processed.
if (!empty($view->noderelationships_processed)) {
return;
}
// Mark the view as being already processed.
$view->noderelationships_processed = TRUE;
// If the view is not executed with the expected number of arguments, then
// we should abort this view.
if (count($view_args) < 3 || !is_numeric($view_args[0])) {
noderelationships_abort_view($view, $view_args);
return FALSE;
}
// We expect to see the following arguments:
// 0 - nid of the referred node.
// 1 - type of the referring node.
// 2 - name of the nodereference field in the referring type.
list($referred_nid, $type_name, $field_name) = $view_args;
// Load the referred node.
if (!($referred_node = node_load($referred_nid))) {
noderelationships_abort_view($view, $view_args);
return FALSE;
}
// Load settings of the referring field.
$referrer_field = content_fields($field_name, $type_name);
if (empty($referrer_field)) {
drupal_set_message(t('Could not load field information to properly customize the view %view-name.', array(
'%view-name' => $view->name,
)), 'error');
watchdog('noderelationships', 'Could not load field information to properly customize the view %view-name (field: @field-name, type: @type-name).', array(
'%view-name' => $view->name,
'@field-name' => $field_name,
'@type-name' => $type_name,
), WATCHDOG_ERROR);
noderelationships_abort_view($view, $view_args);
return FALSE;
}
drupal_add_css(drupal_get_path('module', 'noderelationships') . '/css/noderelationships.backref_views.css');
// Load the related node types.
$referrer_type = noderelationships_get_localized_content_type($type_name);
$referred_type = noderelationships_get_localized_content_type($referred_node->type);
// Get view overrides for the given nodereference field.
$view_overrides = noderelationships_get_backref_view_overrides($view, $referrer_field);
// Customization related to the page display.
if ($view->display_handler->display->display_plugin == 'page') {
$view_title = $view
->get_title();
$context = array(
'referred_node' => $referred_node,
'referred_type' => $referred_type,
'referrer_type' => $referrer_type,
'referrer_field' => $referrer_field,
'field_name' => $field_name,
);
// Build custom title, if nothing exists.
if (empty($view_title)) {
// Prepare default 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_referred_page_title', $context, $arguments);
$view_overrides['title'] = $view_title;
}
// Build custom breadcrumb.
$view->noderelationships_breadcrumb = array(
l(t('Home'), NULL),
l($referred_node->title, 'node/' . $referred_node->nid),
);
// Allow external modules alter the breadcrumb.
drupal_alter('noderelationships_breadcrumb', $view->noderelationships_breadcrumb, $view, $view_args, $context);
}
// Reset the current page display so that the changes take effect.
// This is necessary for AJAX requests and page displays managed by
// the views menu callback.
if ($reset_current_display && isset($view->current_display)) {
unset($view->current_display);
}
// Activate the specified display.
$view
->set_display($display_id);
// Allow external modules alter the view.
drupal_alter('noderelationships_view', $view_overrides, $view, $display_id, $view_args);
// Apply dynamic customization to the view display.
foreach ($view_overrides as $option => $definition) {
$view->display_handler
->override_option($option, $definition);
}
// If this is the default backref view AND it has not been overridden, then
// we want to customize the node title and body labels for fields in the main
// table to match those defined in the content type settings page.
if ($view->name == NODERELATIONSHIPS_BACKREF_VIEW_NAME && $view->type == t('Default')) {
noderelationships_customize_views_node_fields($view, $display_id, $referrer_type);
}
return TRUE;
}