function views_content_views_content_type_render
Output function for the 'views' content type.
Outputs a view based on the module and delta supplied in the configuration.
File
-
views_content/
plugins/ content_types/ views.inc, line 89
Code
function views_content_views_content_type_render($subtype, $conf, $panel_args, $contexts) {
if (!is_array($contexts)) {
$contexts = array(
$contexts,
);
}
$view = _views_content_views_update_conf($conf, $subtype);
if (empty($view) || !is_object($view) || empty($view->display_handler)) {
return;
}
if (!$view->display_handler
->access($GLOBALS['user'])) {
return;
}
$arguments = explode('/', $_GET['q']);
$args = $conf['args'];
foreach ($arguments as $id => $arg) {
$args = str_replace("%{$id}", $arg, $args);
}
foreach ($panel_args as $id => $arg) {
if (is_string($arg)) {
$args = str_replace("@{$id}", $arg, $args);
}
}
$args = preg_replace(',/?(%\\d|@\\d),', '', $args);
$args = $args ? explode('/', $args) : array();
if ($conf['panel_args'] && is_array($panel_args)) {
$args = array_merge($panel_args, $args);
}
if (isset($conf['context']) && is_array($conf['context'])) {
foreach ($conf['context'] as $count => $context_info) {
if (!strpos($context_info, '.')) {
// Old skool: support pre-converter contexts as well.
$cid = $context_info;
$converter = '';
}
else {
list($cid, $converter) = explode('.', $context_info, 2);
}
if (!empty($contexts[$cid])) {
$arg = ctools_context_convert_context($contexts[$cid], $converter, array(
'sanitize' => FALSE,
));
array_splice($args, $count, 0, array(
$arg,
));
}
else {
// Make sure we put an argument in even if it was not there.
$arg = NULL;
}
}
}
$view->set_arguments($args);
if ($conf['url']) {
$view->override_path = $conf['url'];
}
$block = new stdClass();
$block->module = 'views';
$block->delta = $view->name . '-' . $view->current_display;
if (!empty($conf['link_to_view'])) {
$block->title_link = $view->get_url();
}
if (!empty($conf['more_link'])) {
$block->more = array(
'href' => $view->get_url(),
);
$view->display_handler
->set_option('use_more', FALSE);
}
// Only set use_pager if they differ, this way we can avoid overwriting the
// pager type that Views uses.
if ($conf['override_pager_settings']) {
if (method_exists($view, 'init_pager')) {
// Views 3 version.
$view->set_items_per_page($conf['nodes_per_page']);
$view->set_offset($conf['offset']);
$pager = $view->display_handler
->get_option('pager');
if ($conf['use_pager'] && ($pager['type'] == 'none' || $pager['type'] == 'some')) {
$pager['type'] = 'full';
}
elseif (!$conf['use_pager']) {
$pager['type'] = $view->get_items_per_page() ? 'some' : 'none';
}
if ($conf['use_pager']) {
if (!isset($pager['options']['id']) || $pager['options']['id'] != $conf['pager_id']) {
$pager['options']['id'] = $conf['pager_id'];
}
}
$view->display_handler
->set_option('pager', $pager);
}
else {
if (!$view->display_handler
->get_option('use_pager') || empty($conf['use_pager'])) {
$view->display_handler
->set_option('use_pager', $conf['use_pager']);
}
$view->display_handler
->set_option('pager_element', $conf['pager_id']);
$view->display_handler
->set_option('items_per_page', $conf['nodes_per_page']);
$view->display_handler
->set_option('offset', $conf['offset']);
}
}
$stored_feeds = drupal_add_feed();
$block->content = $view->preview();
$block->title = $view->get_title();
if (empty($view->result) && !$view->display_handler
->get_option('empty') && empty($view->style_plugin->definition['even empty'])) {
return;
}
if (!empty($conf['feed_icons'])) {
$new_feeds = drupal_add_feed();
if ($diff = array_diff(array_keys($new_feeds), array_keys($stored_feeds))) {
foreach ($diff as $url) {
$block->feeds[$url] = $new_feeds[$url];
}
}
}
$view->destroy();
return $block;
}