Same name and namespace in other branches
  1. 8.x-1.x quicktabs.module \quicktabs_build_quicktabs() 1 comment

Constructs a Quicktabs instance.

This function can be called by other modules to programmatically build a quicktabs instance.

Parameters

name. The machine name of the Quicktabs instance to build - if a name: is passed that does not correspond to an existing instance, then it is taken to be a completely custom instance and is built from only the custom tabs that are passed in.

settings. An array of settings that will override the options of the Quicktabs: instance from the database, or if no existing instance is being used, these will override the default settings. Possible keys are 'style', 'hide_empty_tabs', ajax', 'default_tab', 'renderer', 'title' and 'options'.

custom_tabs. An array representing custom tab contents, which will be: appended to the Quicktabs instance from the database, or if no existing instance is being used, the custom tabs will be the entire contents. An example custom_tabs array would be array(array('title' => 'custom', 'contents' => array('#markup' => t('Some markup'), 'weight' => 5));

Return value

A render array that can be used as block content in hook_block_view (see quicktabs_block_view()), but can also just be added to the page array during hook_page_alter, or output anywhere else where it's sure to get passed through drupal_render().

3 calls to quicktabs_build_quicktabs()
quicktabs_block_view in ./quicktabs.module
Implements hook_block_view().
quicktabs_style_plugin::render in includes/quicktabs_style_plugin.inc
theme_quicktabs_style_options in quicktabs_tabstyles/quicktabs_tabstyles.module
Theme function for quicktabs style radio options.

File

./quicktabs.module, line 185

Code

function quicktabs_build_quicktabs($name, $settings = array(), $custom_tabs = array()) {
    if ($info = quicktabs_load($name)) {
        // Allow other modules to alter the Quicktabs instance before it gets output.
        drupal_alter('quicktabs', $info);
        $info = (array) $info;
        $settings = array_merge($info, $settings);
        $contents = $settings['tabs'];
        unset($settings['tabs'], $settings['machine_name']);
    }
    elseif (!empty($custom_tabs)) {
        // We'll be creating a custom Quicktabs instance. Make sure we're using an
        // alphanumeric name.
        $name = preg_replace('/[^[a-zA-Z]_]/', '_', $name);
        $contents = array();
    }
    else {
        // If $name doesn't correspond to an existing Quicktabs instance, and there
        // are no custom tabs to render, then we have nothing to do.
        return array();
    }
    $renderer = isset($settings['renderer']) ? $settings['renderer'] : 'quicktabs';
    unset($settings['renderer']);
    $needs_sorting = FALSE;
    $weight = 0;
    foreach ($custom_tabs as &$tab) {
        $needs_sorting = $needs_sorting || isset($tab['weight']);
        $tab += array(
            'type' => 'prerendered',
            'weight' => $weight++,
        );
    }
    $contents = array_merge($custom_tabs, $contents);
    $weight = array();
    foreach ($contents as $key => $item) {
        // Load the plugin responsible for rendering this item, if it is not a
        // prerendered tab.
        if ($item['type'] != 'prerendered') {
            ctools_plugin_load_class('quicktabs', 'contents', $item['type'], 'handler');
        }
        // Add item's weight to our weights array so that we can then sort by weight.
        $weight[$key] = $item['weight'];
        // Make sure we're not going to try to load the same QuickSet instance
        // inside itself.
        if ($item['type'] == 'qtabs' && $item['machine_name'] == $name) {
            unset($contents[$key]);
            unset($weight[$key]);
        }
    }
    // Only sort by weight if the tabs haven't already been sorted by some other
    // mechanism, e.g. Views in the case of the Views style plugin and there was
    // a weight given for one of the tabs.
    if ($needs_sorting && (!isset($settings['sorted']) || !$settings['sorted'])) {
        array_multisort($weight, SORT_ASC, $contents);
    }
    else {
        unset($settings['sorted']);
    }
    if ($qt = quickset_renderer_factory($name, $contents, $renderer, $settings)) {
        $renderable_qt = array(
            '#title' => $qt->getTitle(),
            'content' => $qt->render(),
        );
        return $renderable_qt;
    }
    return array();
}