Same name in other branches
- 8.x-1.x src/QuickSet.php \Drupal\quicktabs\QuickSet::prepareContents()
This method does some initial set-up of the tab contents, such as hiding tabs with no content if the hide_empty_tabs option is set. It also makes sure that prerendered contents are never attempted to be loaded via ajax.
Throws
InvalidQuickSetException if there are no contents to render.
1 call to QuickSet::prepareContents()
- QuickSet::__construct dans ./
quicktabs.classes.inc - Constructor
Fichier
-
./
quicktabs.classes.inc, line 182
Classe
- QuickSet
- A QuickSet object is an unrendered Quicktabs instance, essentially just a container of content items, as defined by its configuration settings and the array of content items it contains.
Code
protected function prepareContents() {
if (!count($this->contents)) {
throw new InvalidQuickSetException('There are no contents to render.');
}
if ($this->settings['hide_empty_tabs'] && !$this->settings['ajax']) {
// Check if any tabs need to be hidden because of empty content.
$renderable_contents = 0;
foreach ($this->contents as $key => $tab) {
$contents = $tab->render(TRUE);
reset($contents);
if (!empty($contents)) {
// If it's block type quicktab, #markup will be on level lower.
if (!isset($contents['#markup'])) {
$contents = reset($contents);
}
$string = strip_tags($contents['#markup']);
// If string contains only whitespaces it will be removed.
$string = trim($string);
}
else {
$string = $contents;
}
if (!$string) {
// Rather than removing the item, we set it to NULL. This way we retain
// the same indices across tabs, so that permanent links to particular
// tabs can be relied upon.
$this->contents[$key] = NULL;
// The default tab must not be a hidden tab.
if ($this->settings['default_tab'] == $key) {
$this->settings['default_tab'] = ($key + 1) % count($this->contents);
}
}
else {
$renderable_contents++;
}
}
if (!$renderable_contents) {
throw new InvalidQuickSetException('There are no contents to render.');
}
}
elseif ($this->settings['ajax']) {
// Make sure that there is at most 1 prerendered tab and it is the default tab.
// Prerendered content cannot be rendered via ajax.
$has_prerendered = FALSE;
// keep track of whether we have found a prerendered tab.
foreach ($this->contents as $key => $tab) {
$type = $tab->getType();
if ($type == 'prerendered') {
if (!$has_prerendered) {
$has_prerendered = TRUE;
$this->settings['default_tab'] = $key;
// In the case of a direct link to a different tab, the 'default_tab'
// will be overridden, so we need to make sure it does not attempt
// to load a pre-rendered tab via ajax. Turn ajax option off.
if ($this->getActiveTab() !== $key) {
$this->settings['ajax'] = 0;
}
}
else {
// We are on a second custom tab and the ajax option is set, we cannot
// render custom tabs via ajax, so we skip out of the loop, set the
// ajax option to off, and call the method again.
$this->settings['ajax'] = 0;
$this->prepareContents();
return;
}
}
}
}
}