Chris@76
|
1 <?php
|
Chris@76
|
2 /**
|
Chris@76
|
3 * Simple Machines Forum (SMF)
|
Chris@76
|
4 *
|
Chris@76
|
5 * @package SMF
|
Chris@76
|
6 * @author Simple Machines
|
Chris@76
|
7 * @copyright 2011 Simple Machines
|
Chris@76
|
8 * @license http://www.simplemachines.org/about/smf/license.php BSD
|
Chris@76
|
9 *
|
Chris@76
|
10 * @version 2.0
|
Chris@76
|
11 */
|
Chris@76
|
12
|
Chris@76
|
13 function template_show_list($list_id = null)
|
Chris@76
|
14 {
|
Chris@76
|
15 global $context, $settings, $options, $scripturl, $txt, $modSettings;
|
Chris@76
|
16
|
Chris@76
|
17 // Get a shortcut to the current list.
|
Chris@76
|
18 $list_id = $list_id === null ? $context['default_list'] : $list_id;
|
Chris@76
|
19 $cur_list = &$context[$list_id];
|
Chris@76
|
20
|
Chris@76
|
21 // These are the main tabs that is used all around the template.
|
Chris@76
|
22 if (!empty($settings['use_tabs']) && isset($cur_list['list_menu'], $cur_list['list_menu']['show_on']) && ($cur_list['list_menu']['show_on'] == 'both' || $cur_list['list_menu']['show_on'] == 'top'))
|
Chris@76
|
23 template_create_list_menu($cur_list['list_menu'], 'top');
|
Chris@76
|
24
|
Chris@76
|
25 if (isset($cur_list['form']))
|
Chris@76
|
26 echo '
|
Chris@76
|
27 <form action="', $cur_list['form']['href'], '" method="post"', empty($cur_list['form']['name']) ? '' : ' name="' . $cur_list['form']['name'] . '" id="' . $cur_list['form']['name'] . '"', ' accept-charset="', $context['character_set'], '">
|
Chris@76
|
28 <div class="generic_list">';
|
Chris@76
|
29
|
Chris@76
|
30 // Show the title of the table (if any).
|
Chris@76
|
31 if (!empty($cur_list['title']))
|
Chris@76
|
32 echo '
|
Chris@76
|
33 <div class="title_bar clear_right">
|
Chris@76
|
34 <h3 class="titlebg">
|
Chris@76
|
35 ', $cur_list['title'], '
|
Chris@76
|
36 </h3>
|
Chris@76
|
37 </div>';
|
Chris@76
|
38 // This is for the old style menu with the arrows "> Test | Test 1"
|
Chris@76
|
39 if (empty($settings['use_tabs']) && isset($cur_list['list_menu'], $cur_list['list_menu']['show_on']) && ($cur_list['list_menu']['show_on'] == 'both' || $cur_list['list_menu']['show_on'] == 'top'))
|
Chris@76
|
40 template_create_list_menu($cur_list['list_menu'], 'top');
|
Chris@76
|
41
|
Chris@76
|
42 if (isset($cur_list['additional_rows']['top_of_list']))
|
Chris@76
|
43 template_additional_rows('top_of_list', $cur_list);
|
Chris@76
|
44
|
Chris@76
|
45 if (isset($cur_list['additional_rows']['after_title']))
|
Chris@76
|
46 {
|
Chris@76
|
47 echo '
|
Chris@76
|
48 <div class="information flow_hidden">';
|
Chris@76
|
49 template_additional_rows('after_title', $cur_list);
|
Chris@76
|
50 echo '
|
Chris@76
|
51 </div>';
|
Chris@76
|
52 }
|
Chris@76
|
53
|
Chris@76
|
54 if (!empty($cur_list['items_per_page']) || isset($cur_list['additional_rows']['bottom_of_list']))
|
Chris@76
|
55 {
|
Chris@76
|
56 echo '
|
Chris@76
|
57 <div class="flow_auto">';
|
Chris@76
|
58
|
Chris@76
|
59 // Show the page index (if this list doesn't intend to show all items).
|
Chris@76
|
60 if (!empty($cur_list['items_per_page']))
|
Chris@76
|
61 echo '
|
Chris@76
|
62 <div class="floatleft">
|
Chris@76
|
63 <div class="pagesection">', $txt['pages'], ': ', $cur_list['page_index'], '</div>
|
Chris@76
|
64 </div>';
|
Chris@76
|
65
|
Chris@76
|
66 if (isset($cur_list['additional_rows']['above_column_headers']))
|
Chris@76
|
67 {
|
Chris@76
|
68 echo '
|
Chris@76
|
69 <div class="floatright">';
|
Chris@76
|
70
|
Chris@76
|
71 template_additional_rows('above_column_headers', $cur_list);
|
Chris@76
|
72
|
Chris@76
|
73 echo '
|
Chris@76
|
74 </div>';
|
Chris@76
|
75 }
|
Chris@76
|
76
|
Chris@76
|
77 echo '
|
Chris@76
|
78 </div>';
|
Chris@76
|
79 }
|
Chris@76
|
80
|
Chris@76
|
81 echo '
|
Chris@76
|
82 <table class="table_grid" cellspacing="0" width="', !empty($cur_list['width']) ? $cur_list['width'] : '100%', '">';
|
Chris@76
|
83
|
Chris@76
|
84 // Show the column headers.
|
Chris@76
|
85 $header_count = count($cur_list['headers']);
|
Chris@76
|
86 if (!($header_count < 2 && empty($cur_list['headers'][0]['label'])))
|
Chris@76
|
87 {
|
Chris@76
|
88 echo '
|
Chris@76
|
89 <thead>
|
Chris@76
|
90 <tr class="catbg">';
|
Chris@76
|
91
|
Chris@76
|
92 // Loop through each column and add a table header.
|
Chris@76
|
93 $i = 0;
|
Chris@76
|
94 foreach ($cur_list['headers'] as $col_header)
|
Chris@76
|
95 {
|
Chris@76
|
96 $i ++;
|
Chris@76
|
97 if (empty($col_header['class']) && $i == 1)
|
Chris@76
|
98 $col_header['class'] = 'first_th';
|
Chris@76
|
99 elseif (empty($col_header['class']) && $i == $header_count)
|
Chris@76
|
100 $col_header['class'] = 'last_th';
|
Chris@76
|
101
|
Chris@76
|
102 echo '
|
Chris@76
|
103 <th scope="col"', empty($col_header['class']) ? '' : ' class="' . $col_header['class'] . '"', empty($col_header['style']) ? '' : ' style="' . $col_header['style'] . '"', empty($col_header['colspan']) ? '' : ' colspan="' . $col_header['colspan'] . '"', '>', empty($col_header['href']) ? '' : '<a href="' . $col_header['href'] . '" rel="nofollow">', empty($col_header['label']) ? ' ' : $col_header['label'], empty($col_header['href']) ? '' : '</a>', empty($col_header['sort_image']) ? '' : ' <img src="' . $settings['images_url'] . '/sort_' . $col_header['sort_image'] . '.gif" alt="" />', '</th>';
|
Chris@76
|
104 }
|
Chris@76
|
105
|
Chris@76
|
106 echo '
|
Chris@76
|
107 </tr>
|
Chris@76
|
108 </thead>
|
Chris@76
|
109 <tbody>';
|
Chris@76
|
110 }
|
Chris@76
|
111
|
Chris@76
|
112 // Show a nice message informing there are no items in this list.
|
Chris@76
|
113 if (empty($cur_list['rows']) && !empty($cur_list['no_items_label']))
|
Chris@76
|
114 echo '
|
Chris@76
|
115 <tr>
|
Chris@76
|
116 <td class="windowbg" colspan="', $cur_list['num_columns'], '" align="', !empty($cur_list['no_items_align']) ? $cur_list['no_items_align'] : 'center', '"><div class="padding">', $cur_list['no_items_label'], '</div></td>
|
Chris@76
|
117 </tr>';
|
Chris@76
|
118
|
Chris@76
|
119 // Show the list rows.
|
Chris@76
|
120 elseif (!empty($cur_list['rows']))
|
Chris@76
|
121 {
|
Chris@76
|
122 $alternate = false;
|
Chris@76
|
123 foreach ($cur_list['rows'] as $id => $row)
|
Chris@76
|
124 {
|
Chris@76
|
125 echo '
|
Chris@76
|
126 <tr class="windowbg', $alternate ? '2' : '', '" id="list_', $list_id, '_', $id, '">';
|
Chris@76
|
127
|
Chris@76
|
128 foreach ($row as $row_data)
|
Chris@76
|
129 echo '
|
Chris@76
|
130 <td', empty($row_data['class']) ? '' : ' class="' . $row_data['class'] . '"', empty($row_data['style']) ? '' : ' style="' . $row_data['style'] . '"', '>', $row_data['value'], '</td>';
|
Chris@76
|
131
|
Chris@76
|
132 echo '
|
Chris@76
|
133 </tr>';
|
Chris@76
|
134
|
Chris@76
|
135 $alternate = !$alternate;
|
Chris@76
|
136 }
|
Chris@76
|
137 }
|
Chris@76
|
138
|
Chris@76
|
139 echo '
|
Chris@76
|
140 </tbody>
|
Chris@76
|
141 </table>';
|
Chris@76
|
142
|
Chris@76
|
143 if (!empty($cur_list['items_per_page']) || isset($cur_list['additional_rows']['below_table_data']) || isset($cur_list['additional_rows']['bottom_of_list']))
|
Chris@76
|
144 {
|
Chris@76
|
145 echo '
|
Chris@76
|
146 <div class="flow_auto">';
|
Chris@76
|
147
|
Chris@76
|
148 // Show the page index (if this list doesn't intend to show all items).
|
Chris@76
|
149 if (!empty($cur_list['items_per_page']))
|
Chris@76
|
150 echo '
|
Chris@76
|
151 <div class="floatleft">
|
Chris@76
|
152 <div class="pagesection">', $txt['pages'], ': ', $cur_list['page_index'], '</div>
|
Chris@76
|
153 </div>';
|
Chris@76
|
154
|
Chris@76
|
155 if (isset($cur_list['additional_rows']['below_table_data']))
|
Chris@76
|
156 {
|
Chris@76
|
157 echo '
|
Chris@76
|
158 <div class="floatright">';
|
Chris@76
|
159
|
Chris@76
|
160 template_additional_rows('below_table_data', $cur_list);
|
Chris@76
|
161
|
Chris@76
|
162 echo '
|
Chris@76
|
163 </div>';
|
Chris@76
|
164 }
|
Chris@76
|
165
|
Chris@76
|
166 if (isset($cur_list['additional_rows']['bottom_of_list']))
|
Chris@76
|
167 {
|
Chris@76
|
168 echo '
|
Chris@76
|
169 <div class="floatright">';
|
Chris@76
|
170
|
Chris@76
|
171 template_additional_rows('bottom_of_list', $cur_list);
|
Chris@76
|
172
|
Chris@76
|
173 echo '
|
Chris@76
|
174 </div>';
|
Chris@76
|
175 }
|
Chris@76
|
176
|
Chris@76
|
177 echo '
|
Chris@76
|
178 </div>';
|
Chris@76
|
179 }
|
Chris@76
|
180
|
Chris@76
|
181 if (isset($cur_list['form']))
|
Chris@76
|
182 {
|
Chris@76
|
183 foreach ($cur_list['form']['hidden_fields'] as $name => $value)
|
Chris@76
|
184 echo '
|
Chris@76
|
185 <input type="hidden" name="', $name, '" value="', $value, '" />';
|
Chris@76
|
186
|
Chris@76
|
187 echo '
|
Chris@76
|
188 </div>
|
Chris@76
|
189 </form>';
|
Chris@76
|
190 }
|
Chris@76
|
191
|
Chris@76
|
192 // Tabs at the bottom. Usually bottom alligned.
|
Chris@76
|
193 if (!empty($settings['use_tabs']) && isset($cur_list['list_menu'], $cur_list['list_menu']['show_on']) && ($cur_list['list_menu']['show_on'] == 'both' || $cur_list['list_menu']['show_on'] == 'bottom'))
|
Chris@76
|
194 template_create_list_menu($cur_list['list_menu'], 'bottom');
|
Chris@76
|
195
|
Chris@76
|
196 if (isset($cur_list['javascript']))
|
Chris@76
|
197 echo '
|
Chris@76
|
198 <script type="text/javascript"><!-- // --><![CDATA[
|
Chris@76
|
199 ', $cur_list['javascript'], '
|
Chris@76
|
200 // ]]></script>';
|
Chris@76
|
201 }
|
Chris@76
|
202
|
Chris@76
|
203 function template_additional_rows($row_position, $cur_list)
|
Chris@76
|
204 {
|
Chris@76
|
205 global $context, $settings, $options;
|
Chris@76
|
206
|
Chris@76
|
207 foreach ($cur_list['additional_rows'][$row_position] as $row)
|
Chris@76
|
208 echo '
|
Chris@76
|
209 <div class="additional_row', empty($row['class']) ? '' : ' ' . $row['class'], '"', empty($row['style']) ? '' : ' style="' . $row['style'] . '"', '>', $row['value'], '</div>';
|
Chris@76
|
210 }
|
Chris@76
|
211
|
Chris@76
|
212 function template_create_list_menu($list_menu, $direction = 'top')
|
Chris@76
|
213 {
|
Chris@76
|
214 global $context, $settings;
|
Chris@76
|
215
|
Chris@76
|
216 /**
|
Chris@76
|
217 // This is use if you want your generic lists to have tabs.
|
Chris@76
|
218 $cur_list['list_menu'] = array(
|
Chris@76
|
219 // This is the style to use. Tabs or Buttons (Text 1 | Text 2).
|
Chris@76
|
220 // By default tabs are selected if not set.
|
Chris@76
|
221 // The main difference between tabs and buttons is that tabs get highlighted if selected.
|
Chris@76
|
222 // If style is set to buttons and use tabs is diabled then we change the style to old styled tabs.
|
Chris@76
|
223 'style' => 'tabs',
|
Chris@76
|
224 // The posisiton of the tabs/buttons. Left or Right. By default is set to left.
|
Chris@76
|
225 'position' => 'left',
|
Chris@76
|
226 // This is used by the old styled menu. We *need* to know the total number of columns to span.
|
Chris@76
|
227 'columns' => 0,
|
Chris@76
|
228 // This gives you the option to show tabs only at the top, bottom or both.
|
Chris@76
|
229 // By default they are just shown at the top.
|
Chris@76
|
230 'show_on' => 'top',
|
Chris@76
|
231 // Links. This is the core of the array. It has all the info that we need.
|
Chris@76
|
232 'links' => array(
|
Chris@76
|
233 'name' => array(
|
Chris@76
|
234 // This will tell use were to go when they click it.
|
Chris@76
|
235 'href' => $scripturl . '?action=theaction',
|
Chris@76
|
236 // The name that you want to appear for the link.
|
Chris@76
|
237 'label' => $txt['name'],
|
Chris@76
|
238 // If we use tabs instead of buttons we highlight the current tab.
|
Chris@76
|
239 // Must use conditions to determine if its selected or not.
|
Chris@76
|
240 'is_selected' => isset($_REQUEST['name']),
|
Chris@76
|
241 ),
|
Chris@76
|
242 ),
|
Chris@76
|
243 );
|
Chris@76
|
244 */
|
Chris@76
|
245
|
Chris@76
|
246 // Are we using right-to-left orientation?
|
Chris@76
|
247 $first = $context['right_to_left'] ? 'last' : 'first';
|
Chris@76
|
248 $last = $context['right_to_left'] ? 'first' : 'last';
|
Chris@76
|
249
|
Chris@76
|
250 // Tabs take preference over buttons in certain cases.
|
Chris@76
|
251 if (empty($settings['use_tabs']) && $list_menu['style'] == 'button')
|
Chris@76
|
252 $list_menu['style'] = 'tabs';
|
Chris@76
|
253
|
Chris@76
|
254 if (!isset($list_menu['style']) || isset($list_menu['style']) && $list_menu['style'] == 'tabs')
|
Chris@76
|
255 {
|
Chris@76
|
256 if (!empty($settings['use_tabs']))
|
Chris@76
|
257 {
|
Chris@76
|
258 echo '
|
Chris@76
|
259 <table cellpadding="0" cellspacing="0" style="margin-', $list_menu['position'], ': 10px; width: 100%;">
|
Chris@76
|
260 <tr>', $list_menu['position'] == 'right' ? '
|
Chris@76
|
261 <td> </td>' : '', '
|
Chris@76
|
262 <td align="', $list_menu['position'], '">
|
Chris@76
|
263 <table cellspacing="0" cellpadding="0">
|
Chris@76
|
264 <tr>
|
Chris@76
|
265 <td class="', $direction == 'top' ? 'mirror' : 'main', 'tab_', $first, '"> </td>';
|
Chris@76
|
266
|
Chris@76
|
267 foreach ($list_menu['links'] as $link)
|
Chris@76
|
268 {
|
Chris@76
|
269 if ($link['is_selected'])
|
Chris@76
|
270 echo '
|
Chris@76
|
271 <td class="', $direction == 'top' ? 'mirror' : 'main', 'tab_active_', $first, '"> </td>
|
Chris@76
|
272 <td valign="top" class="', $direction == 'top' ? 'mirrortab' : 'maintab', '_active_back">
|
Chris@76
|
273 <a href="', $link['href'], '">', $link['label'], '</a>
|
Chris@76
|
274 </td>
|
Chris@76
|
275 <td class="', $direction == 'top' ? 'mirror' : 'main', 'tab_active_', $last, '"> </td>';
|
Chris@76
|
276 else
|
Chris@76
|
277 echo '
|
Chris@76
|
278 <td valign="top" class="', $direction == 'top' ? 'mirror' : 'main', 'tab_back">
|
Chris@76
|
279 <a href="', $link['href'], '">', $link['label'], '</a>
|
Chris@76
|
280 </td>';
|
Chris@76
|
281 }
|
Chris@76
|
282
|
Chris@76
|
283 echo '
|
Chris@76
|
284 <td class="', $direction == 'top' ? 'mirror' : 'main', 'tab_', $last, '"> </td>
|
Chris@76
|
285 </tr>
|
Chris@76
|
286 </table>
|
Chris@76
|
287 </td>', $list_menu['position'] == 'left' ? '
|
Chris@76
|
288 <td> </td>' : '', '
|
Chris@76
|
289 </tr>
|
Chris@76
|
290 </table>';
|
Chris@76
|
291 }
|
Chris@76
|
292 else
|
Chris@76
|
293 {
|
Chris@76
|
294 echo '
|
Chris@76
|
295 <tr class="titlebg">
|
Chris@76
|
296 <td colspan="', $context['colspan'], '">';
|
Chris@76
|
297
|
Chris@76
|
298 $links = array();
|
Chris@76
|
299 foreach ($list_menu['links'] as $link)
|
Chris@76
|
300 $links[] = ($link['is_selected'] ? '<img src="' . $settings['images_url'] . '/selected.gif" alt=">" /> ' : '') . '<a href="' . $link['href'] . '">' . $link['label'] . '</a>';
|
Chris@76
|
301
|
Chris@76
|
302 echo '
|
Chris@76
|
303 ', implode(' | ', $links), '
|
Chris@76
|
304 </td>
|
Chris@76
|
305 </tr>';
|
Chris@76
|
306 }
|
Chris@76
|
307 }
|
Chris@76
|
308 elseif (isset($list_menu['style']) && $list_menu['style'] == 'buttons')
|
Chris@76
|
309 {
|
Chris@76
|
310 $links = array();
|
Chris@76
|
311 foreach ($list_menu['links'] as $link)
|
Chris@76
|
312 $links[] = '<a href="' . $link['href'] . '">' . $link['label'] . '</a>';
|
Chris@76
|
313
|
Chris@76
|
314 echo '
|
Chris@76
|
315 <table cellpadding="0" cellspacing="0" style="margin-', $list_menu['position'], ': 10px; width: 100%;">
|
Chris@76
|
316 <tr>', $list_menu['position'] == 'right' ? '
|
Chris@76
|
317 <td> </td>' : '', '
|
Chris@76
|
318 <td align="', $list_menu['position'], '">
|
Chris@76
|
319 <table cellspacing="0" cellpadding="0">
|
Chris@76
|
320 <tr>
|
Chris@76
|
321 <td class="', $direction == 'top' ? 'mirror' : 'main', 'tab_', $first, '"> </td>
|
Chris@76
|
322 <td class="', $direction == 'top' ? 'mirror' : 'main', 'tab_back">', implode(' | ', $links), '</td>
|
Chris@76
|
323 <td class="', $direction == 'top' ? 'mirror' : 'main', 'tab_', $last, '"> </td>
|
Chris@76
|
324 </tr>
|
Chris@76
|
325 </table>
|
Chris@76
|
326 </td>', $list_menu['position'] == 'left' ? '
|
Chris@76
|
327 <td> </td>' : '', '
|
Chris@76
|
328 </tr>
|
Chris@76
|
329 </table>';
|
Chris@76
|
330 }
|
Chris@76
|
331 }
|
Chris@76
|
332
|
Chris@76
|
333 ?> |