'; // The ?alp21 part of this link is just here to make sure browsers don't cache it wrongly. echo ' '; // The most efficient way of writing multi themes is to use a master index.css plus variant.css files. if (!empty($context['theme_variant'])) echo ' '; // RTL languages require an additional stylesheet. if ($context['right_to_left']) { echo ' '; if (!empty($context['theme_variant'])) echo ' '; } // Save some database hits, if a width for multiple wrappers is set in admin. if(!empty($settings['forum_width'])) echo ' '; // Quick and dirty testing of RTL horrors. Remove before production build. //echo ' //'; // load in any css from mods or themes so they can overwrite if wanted template_css(); // load in any javascript files from mods and themes template_javascript(); echo ' ', !empty($context['meta_keywords']) ? ' ' : '', ' ', $context['page_title_html_safe'], ''; // Please don't index these Mr Robot. if (!empty($context['robot_no_index'])) echo ' '; // Present a canonical url for search engines to prevent duplicate content in their indices. if (!empty($context['canonical_url'])) echo ' '; // Show all the relative links, such as help, search, contents, and the like. echo ' ', ($context['allow_search'] ? ' ' : ''); // If RSS feeds are enabled, advertise the presence of one. if (!empty($modSettings['xmlnews_enable']) && (!empty($modSettings['allow_guestAccess']) || $context['user']['is_logged'])) echo ' '; // If we're viewing a topic, these should be the previous and next topics, respectively. if (!empty($context['links']['next'])) echo ''; else if (!empty($context['current_topic'])) echo ''; if (!empty($context['links']['prev'])) echo ''; else if (!empty($context['current_topic'])) echo ''; // If we're in a board, or a topic for that matter, the index will be the board's index. if (!empty($context['current_board'])) echo ' '; // Output any remaining HTML headers. (from mods, maybe?) echo $context['html_headers']; echo ' '; } function template_body_above() { global $context, $settings, $options, $scripturl, $txt, $modSettings; // Wrapper div now echoes permanently for better layout options. h1 a is now target for "Go up" links. echo '
'; if ($context['allow_search']) { echo '
 '; // Using the quick search dropdown? if (!empty($modSettings['search_dropdown'])) { $selected = !empty($context['current_topic']) ? 'current_topic' : (!empty($context['current_board']) ? 'current_board' : 'all'); echo ' '; } // Search within current topic? if (!empty($context['current_topic'])) echo ' '; // If we're on a certain board, limit it to this board ;). elseif (!empty($context['current_board'])) echo ' '; echo '
'; } echo '
'; echo '
'; // Show the menu here, according to the menu sub template, followed by the navigation tree. template_menu(); theme_linktree(); echo '
'; // The main content should go here. echo '
'; } function template_body_below() { global $context, $settings, $options, $scripturl, $txt, $modSettings; echo '
'; // Show the "Powered by" and "Valid" logos, as well as the copyright. Remember, the copyright must be somewhere! // Footer is now full-width by default. Frame inside it will match theme wrapper width automatically. echo ' '; } function template_html_below() { global $context, $settings, $options, $scripturl, $txt, $modSettings; // load in any javascipt that could be defered to the end of the page template_javascript(true); echo ' '; } /** * Show a linktree. This is that thing that shows "My Community | General Category | General Discussion".. * @param bool $force_show = false */ function theme_linktree($force_show = false) { global $context, $settings, $options, $shown_linktree, $scripturl, $txt; // If linktree is empty, just return - also allow an override. if (empty($context['linktree']) || (!empty($context['dont_default_linktree']) && !$force_show)) return; echo ' '; $shown_linktree = true; } /** * Show the menu up top. Something like [home] [help] [profile] [logout]... */ function template_menu() { global $context, $settings, $options, $scripturl, $txt; echo ' '; // Define the upper_section toggle in JavaScript. // Note that this definition had to be shifted for the js to work with the new markup. echo ' '; } /** * Generate a strip of buttons. * @param array $button_strip * @param string $direction = '' * @param array $strip_options = array() */ function template_button_strip($button_strip, $direction = '', $strip_options = array()) { global $settings, $context, $txt, $scripturl; if (!is_array($strip_options)) $strip_options = array(); // List the buttons in reverse order for RTL languages. if ($context['right_to_left']) $button_strip = array_reverse($button_strip, true); // Create the buttons... $buttons = array(); foreach ($button_strip as $key => $value) { if (!isset($value['test']) || !empty($context[$value['test']])) $buttons[] = '
  • ' . $txt[$value['text']] . '
  • '; } // No buttons? No button strip either. if (empty($buttons)) return; echo ' '; }