danielebarchiesi@2: quickset; danielebarchiesi@6: danielebarchiesi@2: $render_array = array(); danielebarchiesi@2: danielebarchiesi@2: $active_tab = $quickset->getActiveTab(); danielebarchiesi@2: if ($tabs = $this->build_tablinks($active_tab)) { danielebarchiesi@2: $render_array['#attached'] = $this->add_attached(); danielebarchiesi@2: danielebarchiesi@2: $qt_name = $quickset->getName(); danielebarchiesi@2: $settings = $quickset->getSettings(); danielebarchiesi@2: $contents = $quickset->getContents(); danielebarchiesi@2: danielebarchiesi@2: $render_array['content'] = array( danielebarchiesi@2: '#theme' => 'qt_quicktabs', danielebarchiesi@2: '#options' => array('attributes' => array( danielebarchiesi@2: 'id' => 'quicktabs-' . $qt_name, danielebarchiesi@6: 'class' => 'quicktabs-wrapper quicktabs-style-' . drupal_html_class($settings['style']), danielebarchiesi@2: )), danielebarchiesi@6: 'tabs' => array('#theme' => 'qt_quicktabs_tabset', '#options' => array('active' => $active_tab, 'style' => drupal_html_class($settings['style'])), 'tablinks' => $tabs), danielebarchiesi@2: // The main content area, each quicktab container needs a unique id. danielebarchiesi@2: 'container' => array( danielebarchiesi@6: '#prefix' => '
', danielebarchiesi@2: '#suffix' => '
', danielebarchiesi@2: 'divs' => array(), danielebarchiesi@2: ), danielebarchiesi@2: ); danielebarchiesi@2: danielebarchiesi@2: // If in ajax mode, we'll only be rendering one tab, otherwise all of them. danielebarchiesi@2: $tabs_to_render = $settings['ajax'] ? array($active_tab => $contents[$active_tab]) : $contents; danielebarchiesi@2: foreach ($tabs_to_render as $key => $tab) { danielebarchiesi@2: if (!empty($tab)) { danielebarchiesi@2: $attribs = array( danielebarchiesi@2: 'id' => 'quicktabs-tabpage-'. $qt_name . '-'. $key, danielebarchiesi@2: 'class' => array('quicktabs-tabpage', ($active_tab == $key ? '' : 'quicktabs-hide')), danielebarchiesi@2: ); danielebarchiesi@2: $render_array['content']['container']['divs'][] = array( danielebarchiesi@2: '#prefix' => '
', danielebarchiesi@2: '#suffix' => '
', danielebarchiesi@2: 'content' => $tab->render(), danielebarchiesi@2: ); danielebarchiesi@2: } danielebarchiesi@2: } danielebarchiesi@2: } danielebarchiesi@2: return $render_array; danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: /** danielebarchiesi@2: * Build the actual tab links, with appropriate href, title and attributes. danielebarchiesi@6: * danielebarchiesi@2: * @param $active_tab The index of the active tab. danielebarchiesi@2: */ danielebarchiesi@2: protected function build_tablinks($active_tab) { danielebarchiesi@2: $quickset = $this->quickset; danielebarchiesi@2: $settings = $quickset->getSettings(); danielebarchiesi@2: $tabs = array(); danielebarchiesi@2: foreach ($quickset->getContents() as $i => $tab) { danielebarchiesi@2: if (!empty($tab)) { danielebarchiesi@2: $tablink = array( danielebarchiesi@2: '#type' => 'link', danielebarchiesi@2: '#title' => $quickset->translateString($tab->getTitle(), 'tab', $i), danielebarchiesi@2: '#href' => $_GET['q'], danielebarchiesi@2: '#options' => $this->construct_link_options($i), danielebarchiesi@2: ); danielebarchiesi@2: if ($settings['ajax']) { danielebarchiesi@2: $tab_settings = $tab->getSettings(); danielebarchiesi@2: $ajax_keys = $tab->getAjaxKeys(); danielebarchiesi@2: $ajax_args = array(); danielebarchiesi@2: foreach ($ajax_keys as $key) { danielebarchiesi@2: $ajax_args[] = $tab_settings[$key]; danielebarchiesi@2: } danielebarchiesi@2: $ajax_path = $quickset->getAjaxPath($i, $tab->getType()); danielebarchiesi@2: $ajax_href = $ajax_path . '/'. implode('/', $ajax_args); danielebarchiesi@2: $tablink['#ajax'] = array( danielebarchiesi@2: 'progress' => array('message' => '', 'type' => 'throbber'), danielebarchiesi@2: 'path' => $ajax_href, danielebarchiesi@2: ); danielebarchiesi@2: } danielebarchiesi@2: $tabs[$i] = $tablink; danielebarchiesi@2: } danielebarchiesi@2: } danielebarchiesi@2: return $tabs; danielebarchiesi@2: } danielebarchiesi@2: danielebarchiesi@2: /** danielebarchiesi@2: * Add any necessary js, css and libraries for the render array. danielebarchiesi@2: */ danielebarchiesi@2: protected function add_attached() { danielebarchiesi@2: $attached = array( danielebarchiesi@2: 'css' => array( danielebarchiesi@2: array('data' => drupal_get_path('module', 'quicktabs') .'/css/quicktabs.css'), danielebarchiesi@2: ), danielebarchiesi@2: 'js' => array( danielebarchiesi@2: array('data' => drupal_get_path('module', 'quicktabs') . '/js/quicktabs.js'), danielebarchiesi@2: array('data' => 'misc/progress.js', 'weight' => JS_LIBRARY), danielebarchiesi@2: ), danielebarchiesi@2: ); danielebarchiesi@2: $settings = $this->quickset->getSettings(); danielebarchiesi@2: // Add the custom style css if a custom style has been set. danielebarchiesi@2: $style_css = quicktabs_get_css($settings['style']); danielebarchiesi@2: if (!empty($style_css)) { danielebarchiesi@2: $attached['css'][] = $style_css; danielebarchiesi@2: } danielebarchiesi@2: // Prepare a tab_settings array for passing the tab info to our JavaScript. danielebarchiesi@2: $tab_settings = array(); danielebarchiesi@2: foreach ($this->quickset->getContents() as $i => $content) { danielebarchiesi@2: if (!empty($content)) { danielebarchiesi@2: $tab_settings[$i] = $content->getSettings(); danielebarchiesi@2: } danielebarchiesi@2: } danielebarchiesi@2: // Add our JS settings danielebarchiesi@2: $javascript = drupal_add_js(); danielebarchiesi@2: foreach ($javascript['settings']['data'] as $key => $settings) { danielebarchiesi@2: if (key($settings) == 'quicktabs') { danielebarchiesi@2: $qtkey = $key; danielebarchiesi@2: break; danielebarchiesi@2: } danielebarchiesi@2: } danielebarchiesi@2: $name = $this->quickset->getName(); danielebarchiesi@2: if (!isset($qtkey) || (isset($javascript['settings']['data'][$qtkey]['quicktabs']) danielebarchiesi@2: && !array_key_exists('qt_' . $name, $javascript['settings']['data'][$qtkey]['quicktabs']))) { danielebarchiesi@2: $quicktabs_array = array_merge(array('name' => $name, 'tabs' => $tab_settings), $settings); danielebarchiesi@2: $attached['js'][] = array('data' => array('quicktabs' => array('qt_' . $name => $quicktabs_array)), 'type' => 'setting'); danielebarchiesi@2: } danielebarchiesi@2: return $attached; danielebarchiesi@2: } danielebarchiesi@6: danielebarchiesi@2: /** danielebarchiesi@2: * Helper function to construct link options for tab links. danielebarchiesi@2: */ danielebarchiesi@2: protected function construct_link_options($tabkey) { danielebarchiesi@2: $qt_name = $this->quickset->getName(); danielebarchiesi@6: $settings = $this->quickset->getSettings(); danielebarchiesi@6: danielebarchiesi@2: $id = 'quicktabs-tab-' . implode('-', array($qt_name, $tabkey)); danielebarchiesi@6: danielebarchiesi@2: // Need to construct the correct querystring for the tab links. danielebarchiesi@2: $query = drupal_get_query_parameters(NULL, array("qt-$qt_name", 'q', 'page')); danielebarchiesi@2: $query["qt-{$qt_name}"] = $tabkey; danielebarchiesi@6: danielebarchiesi@2: $link_options = array( danielebarchiesi@2: 'attributes' => array( danielebarchiesi@2: 'id' => $id, danielebarchiesi@2: ), danielebarchiesi@2: 'query' => $query, danielebarchiesi@2: 'fragment' => 'qt-' . $qt_name, danielebarchiesi@6: 'html' => isset($settings['html']) ? $settings['html'] : FALSE, danielebarchiesi@2: ); danielebarchiesi@2: return $link_options; danielebarchiesi@2: } danielebarchiesi@6: }