public function ViewContent::render in Quick Tabs 8.3
Return a render array for an individual tab tat the theme layer to process.
Return value
string @todo test if changing type to array works
Overrides TabTypeBase::render
File
- src/
Plugin/ TabType/ ViewContent.php, line 72
Class
- ViewContent
- Provides a 'view content' tab type.
Namespace
Drupal\quicktabs\Plugin\TabTypeCode
public function render(array $tab) {
$options = $tab['content'][$tab['type']]['options'];
$args = empty($options['args']) ? [] : array_map('trim', explode('/', $options['args']));
if (isset($args)) {
$current_path = \Drupal::service('path.current')
->getPath();
// If the request is a ajax callback we need to use $_SERVER['HTTP_REFERER'] to get current path.
if (strpos($current_path, '/quicktabs/ajax/') !== FALSE) {
$request = \Drupal::request();
if ($request->server
->get('HTTP_REFERER')) {
$referer = parse_url($request->server
->get('HTTP_REFERER'), PHP_URL_PATH);
// Stripping the language path prefix.
$current_language = \Drupal::service('language_manager')
->getCurrentLanguage()
->getId();
$path = str_replace("/{$current_language}/", '/', $referer);
$current_path = \Drupal::service('path_alias.manager')
->getPathByAlias($path);
}
}
$url_args = explode('/', $current_path);
foreach ($url_args as $id => $arg) {
$args = str_replace("%{$id}", $arg, $args);
}
$args = preg_replace(',/?(%\\d),', '', $args);
}
$view = Views::getView($options['vid']);
// Return empty render array if user doesn't have access.
if (!$view
->access($options['display'], \Drupal::currentUser())) {
return [];
}
// Return empty if the view is empty.
$view_results = views_get_view_result($options['vid'], $options['display']);
if (!$view_results && !empty($options['vid']) && !empty($options['display'])) {
// If the initial view is empty, check the attachments.
$view = Views::getView($options['vid']);
$view
->setDisplay($options['display']);
$display = $view
->getDisplay();
$attachments = $display
->getAttachedDisplays();
// If there are attachments, check if they are empty.
if (!empty($attachments)) {
foreach ($attachments as $attachment) {
if (!empty(views_get_view_result($options['vid'], $attachment))) {
$view_results = TRUE;
continue;
}
}
}
}
if (empty($view_results)) {
return [];
}
else {
$render = $view
->buildRenderable($options['display'], $args);
}
// Set additional cache keys that depend on the arguments provided for this
// view.
// Until this is fixed in core:
// https://www.drupal.org/project/drupal/issues/2823914
$render['#cache']['keys'] = array_merge($render['#cache']['keys'], $args);
return $render;
}