ds_extras.pages.inc in Display Suite 7
Display suite Extras page functions.
File
modules/ds_extras/ds_extras.pages.incView source
<?php
/**
* @file
* Display suite Extras page functions.
*/
/**
* Menu callback: show an individual node with the Switch field.
*/
function ds_extras_node_page_view($node) {
// If there is a menu link to this node, the link becomes the last part
// of the active trail, and the link name becomes the page title.
// Thus, we must explicitly set the page title to be the node title.
drupal_set_title($node->title);
$uri = entity_uri('node', $node);
// Set the node path as the canonical URL to prevent duplicate content.
drupal_add_html_head_link(array(
'rel' => 'canonical',
'href' => url($uri['path'], $uri['options']),
), TRUE);
// Set the non-aliased path as a default shortlink.
drupal_add_html_head_link(array(
'rel' => 'shortlink',
'href' => url($uri['path'], array_merge($uri['options'], array(
'alias' => TRUE,
))),
), TRUE);
// Update the history table, stating that this user viewed this node.
node_tag_new($node);
// For markup consistency with other pages, use node_view_multiple() rather than node_view().
$view_mode = !empty($node->ds_switch) ? $node->ds_switch : 'full';
// It's also possible to use $_GET['v'] to switch view modes.
if (isset($_GET['v']) && !empty($_GET['v'])) {
$view_mode = $_GET['v'];
// Check if this is a valid view mode, switch to default otherwise.
$view_modes = ds_extras_get_bundle_view_modes('node', $node->type);
if (!isset($view_modes[$view_mode])) {
$view_mode = 'full';
}
}
drupal_static('ds_extras_view_mode', $view_mode);
return node_view_multiple(array(
$node->nid => $node,
), $view_mode);
}
/**
* Menu callback: show an individual revision node using the revision view mode.
*/
function ds_extras_revision_node_show($node, $message = NULL) {
drupal_set_title(t('Revision of %title from %date', array(
'%title' => $node->title,
'%date' => format_date($node->revision_timestamp),
)), PASS_THROUGH);
// Update the history table, stating that this user viewed this node.
node_tag_new($node);
// Determine view mode.
$layout = ds_get_layout('node', $node->type, 'revision', FALSE);
$view_mode = $layout ? 'revision' : 'full';
drupal_static('ds_extras_view_mode', $view_mode);
// For markup consistency with other pages, use node_view_multiple() rather than node_view().
return node_view_multiple(array(
$node->nid => $node,
), $view_mode);
}
/**
* Menu callback: switches to another view mode inline.
*/
function ds_switch_view_mode_inline() {
$content = '';
$status = TRUE;
$error = FALSE;
$id = $_REQUEST['id'];
$view_mode = $_REQUEST['view_mode'];
$entity_type = $_REQUEST['entity_type'];
$entity = entity_load($entity_type, array(
$id,
));
if (!isset($entity[$id])) {
$status = FALSE;
$error = t('Content was not found.');
}
else {
if (node_access('view', $entity[$id])) {
$element = node_view($entity[$id], $view_mode);
$content = drupal_render($element);
}
else {
$error = t('Access denied');
}
}
drupal_add_http_header('Content-Type', 'text/javascript; charset=utf-8');
print drupal_json_encode(array(
'status' => $status,
'content' => $content,
'errorMessage' => $error,
));
exit;
}
/**
* Menu callback: redirect to manage display.
*/
function ds_extras_contextual_page_tab($object, $entity_type) {
switch ($entity_type) {
case 'node':
$bundle = $object->type;
$view_mode = !empty($object->ds_switch) ? $object->ds_switch : 'full';
// Let's always go back to the node page.
$destination = 'node/' . $object->nid;
break;
case 'user':
$bundle = 'user';
$view_mode = 'full';
$destination = 'user/' . $object->uid;
break;
case 'taxonomy_term':
$bundle = $object->vocabulary_machine_name;
$view_mode = 'full';
$destination = 'taxonomy/term/' . $object->tid;
break;
}
// Check if we have a configured layout. Do not fallback to default.
$layout = ds_get_layout($entity_type, $bundle, $view_mode, FALSE);
// Get the manage display URI.
$admin_path = _field_ui_bundle_admin_path($entity_type, $bundle);
// Check view mode settings.
$view_mode_settings = field_view_mode_settings($entity_type, $bundle);
$overriden = !empty($view_mode_settings[$view_mode]['custom_settings']) ? TRUE : FALSE;
if (empty($layout) && !$overriden) {
$admin_path .= '/display';
}
else {
$admin_path .= '/display/' . $view_mode;
}
drupal_goto($admin_path, array(
'query' => array(
'destination' => $destination,
),
));
}
Functions
Name | Description |
---|---|
ds_extras_contextual_page_tab | Menu callback: redirect to manage display. |
ds_extras_node_page_view | Menu callback: show an individual node with the Switch field. |
ds_extras_revision_node_show | Menu callback: show an individual revision node using the revision view mode. |
ds_switch_view_mode_inline | Menu callback: switches to another view mode inline. |