danielebarchiesi@2
|
1 <?php
|
danielebarchiesi@2
|
2
|
danielebarchiesi@2
|
3 /**
|
danielebarchiesi@2
|
4 * Renders the content using the original Quicktabs mechanism of previous versions.
|
danielebarchiesi@2
|
5 * Includes support for ajax rendered content.
|
danielebarchiesi@2
|
6 */
|
danielebarchiesi@2
|
7 class QuickQuicktabs extends QuickRenderer {
|
danielebarchiesi@2
|
8
|
danielebarchiesi@2
|
9 public function render() {
|
danielebarchiesi@2
|
10 $quickset = $this->quickset;
|
danielebarchiesi@2
|
11
|
danielebarchiesi@2
|
12 $render_array = array();
|
danielebarchiesi@2
|
13
|
danielebarchiesi@2
|
14 $active_tab = $quickset->getActiveTab();
|
danielebarchiesi@2
|
15 if ($tabs = $this->build_tablinks($active_tab)) {
|
danielebarchiesi@2
|
16 $render_array['#attached'] = $this->add_attached();
|
danielebarchiesi@2
|
17
|
danielebarchiesi@2
|
18 $qt_name = $quickset->getName();
|
danielebarchiesi@2
|
19 $settings = $quickset->getSettings();
|
danielebarchiesi@2
|
20 $contents = $quickset->getContents();
|
danielebarchiesi@2
|
21
|
danielebarchiesi@2
|
22 $render_array['content'] = array(
|
danielebarchiesi@2
|
23 '#theme' => 'qt_quicktabs',
|
danielebarchiesi@2
|
24 '#options' => array('attributes' => array(
|
danielebarchiesi@2
|
25 'id' => 'quicktabs-' . $qt_name,
|
danielebarchiesi@2
|
26 'class' => 'quicktabs-wrapper quicktabs-style-' . drupal_strtolower($settings['style']),
|
danielebarchiesi@2
|
27 )),
|
danielebarchiesi@2
|
28 'tabs' => array('#theme' => 'qt_quicktabs_tabset', '#options' => array('active' => $active_tab, 'style' => drupal_strtolower($settings['style'])), 'tablinks' => $tabs),
|
danielebarchiesi@2
|
29 // The main content area, each quicktab container needs a unique id.
|
danielebarchiesi@2
|
30 'container' => array(
|
danielebarchiesi@2
|
31 '#prefix' => '<div id="quicktabs-container-' . $qt_name .'" class="quicktabs_main quicktabs-style-' . drupal_strtolower($settings['style']) .'">',
|
danielebarchiesi@2
|
32 '#suffix' => '</div>',
|
danielebarchiesi@2
|
33 'divs' => array(),
|
danielebarchiesi@2
|
34 ),
|
danielebarchiesi@2
|
35 );
|
danielebarchiesi@2
|
36
|
danielebarchiesi@2
|
37 // If in ajax mode, we'll only be rendering one tab, otherwise all of them.
|
danielebarchiesi@2
|
38 $tabs_to_render = $settings['ajax'] ? array($active_tab => $contents[$active_tab]) : $contents;
|
danielebarchiesi@2
|
39 foreach ($tabs_to_render as $key => $tab) {
|
danielebarchiesi@2
|
40 if (!empty($tab)) {
|
danielebarchiesi@2
|
41 $attribs = array(
|
danielebarchiesi@2
|
42 'id' => 'quicktabs-tabpage-'. $qt_name . '-'. $key,
|
danielebarchiesi@2
|
43 'class' => array('quicktabs-tabpage', ($active_tab == $key ? '' : 'quicktabs-hide')),
|
danielebarchiesi@2
|
44 );
|
danielebarchiesi@2
|
45 $render_array['content']['container']['divs'][] = array(
|
danielebarchiesi@2
|
46 '#prefix' => '<div '. drupal_attributes($attribs) .'>',
|
danielebarchiesi@2
|
47 '#suffix' => '</div>',
|
danielebarchiesi@2
|
48 'content' => $tab->render(),
|
danielebarchiesi@2
|
49 );
|
danielebarchiesi@2
|
50 }
|
danielebarchiesi@2
|
51 }
|
danielebarchiesi@2
|
52 }
|
danielebarchiesi@2
|
53 return $render_array;
|
danielebarchiesi@2
|
54 }
|
danielebarchiesi@2
|
55
|
danielebarchiesi@2
|
56 /**
|
danielebarchiesi@2
|
57 * Build the actual tab links, with appropriate href, title and attributes.
|
danielebarchiesi@2
|
58 *
|
danielebarchiesi@2
|
59 * @param $active_tab The index of the active tab.
|
danielebarchiesi@2
|
60 */
|
danielebarchiesi@2
|
61 protected function build_tablinks($active_tab) {
|
danielebarchiesi@2
|
62 $quickset = $this->quickset;
|
danielebarchiesi@2
|
63 $settings = $quickset->getSettings();
|
danielebarchiesi@2
|
64 $tabs = array();
|
danielebarchiesi@2
|
65 foreach ($quickset->getContents() as $i => $tab) {
|
danielebarchiesi@2
|
66 if (!empty($tab)) {
|
danielebarchiesi@2
|
67 $tablink = array(
|
danielebarchiesi@2
|
68 '#type' => 'link',
|
danielebarchiesi@2
|
69 '#title' => $quickset->translateString($tab->getTitle(), 'tab', $i),
|
danielebarchiesi@2
|
70 '#href' => $_GET['q'],
|
danielebarchiesi@2
|
71 '#options' => $this->construct_link_options($i),
|
danielebarchiesi@2
|
72 );
|
danielebarchiesi@2
|
73 if ($settings['ajax']) {
|
danielebarchiesi@2
|
74 $tab_settings = $tab->getSettings();
|
danielebarchiesi@2
|
75 $ajax_keys = $tab->getAjaxKeys();
|
danielebarchiesi@2
|
76 $ajax_args = array();
|
danielebarchiesi@2
|
77 foreach ($ajax_keys as $key) {
|
danielebarchiesi@2
|
78 $ajax_args[] = $tab_settings[$key];
|
danielebarchiesi@2
|
79 }
|
danielebarchiesi@2
|
80 $ajax_path = $quickset->getAjaxPath($i, $tab->getType());
|
danielebarchiesi@2
|
81 $ajax_href = $ajax_path . '/'. implode('/', $ajax_args);
|
danielebarchiesi@2
|
82 $tablink['#ajax'] = array(
|
danielebarchiesi@2
|
83 'progress' => array('message' => '', 'type' => 'throbber'),
|
danielebarchiesi@2
|
84 'path' => $ajax_href,
|
danielebarchiesi@2
|
85 );
|
danielebarchiesi@2
|
86 }
|
danielebarchiesi@2
|
87 $tabs[$i] = $tablink;
|
danielebarchiesi@2
|
88 }
|
danielebarchiesi@2
|
89 }
|
danielebarchiesi@2
|
90 return $tabs;
|
danielebarchiesi@2
|
91 }
|
danielebarchiesi@2
|
92
|
danielebarchiesi@2
|
93 /**
|
danielebarchiesi@2
|
94 * Add any necessary js, css and libraries for the render array.
|
danielebarchiesi@2
|
95 */
|
danielebarchiesi@2
|
96 protected function add_attached() {
|
danielebarchiesi@2
|
97 $attached = array(
|
danielebarchiesi@2
|
98 'css' => array(
|
danielebarchiesi@2
|
99 array('data' => drupal_get_path('module', 'quicktabs') .'/css/quicktabs.css'),
|
danielebarchiesi@2
|
100 ),
|
danielebarchiesi@2
|
101 'js' => array(
|
danielebarchiesi@2
|
102 array('data' => drupal_get_path('module', 'quicktabs') . '/js/quicktabs.js'),
|
danielebarchiesi@2
|
103 array('data' => 'misc/progress.js', 'weight' => JS_LIBRARY),
|
danielebarchiesi@2
|
104 ),
|
danielebarchiesi@2
|
105 );
|
danielebarchiesi@2
|
106 $settings = $this->quickset->getSettings();
|
danielebarchiesi@2
|
107 // Add the custom style css if a custom style has been set.
|
danielebarchiesi@2
|
108 $style_css = quicktabs_get_css($settings['style']);
|
danielebarchiesi@2
|
109 if (!empty($style_css)) {
|
danielebarchiesi@2
|
110 $attached['css'][] = $style_css;
|
danielebarchiesi@2
|
111 }
|
danielebarchiesi@2
|
112 // Prepare a tab_settings array for passing the tab info to our JavaScript.
|
danielebarchiesi@2
|
113 $tab_settings = array();
|
danielebarchiesi@2
|
114 foreach ($this->quickset->getContents() as $i => $content) {
|
danielebarchiesi@2
|
115 if (!empty($content)) {
|
danielebarchiesi@2
|
116 $tab_settings[$i] = $content->getSettings();
|
danielebarchiesi@2
|
117 }
|
danielebarchiesi@2
|
118 }
|
danielebarchiesi@2
|
119 // Add our JS settings
|
danielebarchiesi@2
|
120 $javascript = drupal_add_js();
|
danielebarchiesi@2
|
121 foreach ($javascript['settings']['data'] as $key => $settings) {
|
danielebarchiesi@2
|
122 if (key($settings) == 'quicktabs') {
|
danielebarchiesi@2
|
123 $qtkey = $key;
|
danielebarchiesi@2
|
124 break;
|
danielebarchiesi@2
|
125 }
|
danielebarchiesi@2
|
126 }
|
danielebarchiesi@2
|
127 $name = $this->quickset->getName();
|
danielebarchiesi@2
|
128 if (!isset($qtkey) || (isset($javascript['settings']['data'][$qtkey]['quicktabs'])
|
danielebarchiesi@2
|
129 && !array_key_exists('qt_' . $name, $javascript['settings']['data'][$qtkey]['quicktabs']))) {
|
danielebarchiesi@2
|
130 $quicktabs_array = array_merge(array('name' => $name, 'tabs' => $tab_settings), $settings);
|
danielebarchiesi@2
|
131 $attached['js'][] = array('data' => array('quicktabs' => array('qt_' . $name => $quicktabs_array)), 'type' => 'setting');
|
danielebarchiesi@2
|
132 }
|
danielebarchiesi@2
|
133 return $attached;
|
danielebarchiesi@2
|
134 }
|
danielebarchiesi@2
|
135
|
danielebarchiesi@2
|
136 /**
|
danielebarchiesi@2
|
137 * Helper function to construct link options for tab links.
|
danielebarchiesi@2
|
138 */
|
danielebarchiesi@2
|
139 protected function construct_link_options($tabkey) {
|
danielebarchiesi@2
|
140 $qt_name = $this->quickset->getName();
|
danielebarchiesi@2
|
141 $id = 'quicktabs-tab-' . implode('-', array($qt_name, $tabkey));
|
danielebarchiesi@2
|
142
|
danielebarchiesi@2
|
143 // Need to construct the correct querystring for the tab links.
|
danielebarchiesi@2
|
144 $query = drupal_get_query_parameters(NULL, array("qt-$qt_name", 'q', 'page'));
|
danielebarchiesi@2
|
145 $query["qt-{$qt_name}"] = $tabkey;
|
danielebarchiesi@2
|
146
|
danielebarchiesi@2
|
147 $link_options = array(
|
danielebarchiesi@2
|
148 'attributes' => array(
|
danielebarchiesi@2
|
149 'id' => $id,
|
danielebarchiesi@2
|
150 ),
|
danielebarchiesi@2
|
151 'query' => $query,
|
danielebarchiesi@2
|
152 'fragment' => 'qt-' . $qt_name,
|
danielebarchiesi@2
|
153 );
|
danielebarchiesi@2
|
154 return $link_options;
|
danielebarchiesi@2
|
155 }
|
danielebarchiesi@2
|
156 } |