Theme system * @see themeable */ /** * Hook Help - returns theme specific help and information. * * @param section defines the @a section of the help to be returned. * * @return a string containing the help output. */ function theme_help($section) { $output = ''; switch ($section) { case 'admin/system/themes#description': $output = t("The base theme"); break; } return $output; } /** * Initialize the theme system by loading the theme. * * @return the name of the currently selected theme. */ function init_theme() { global $user; $themes = list_themes(); /* ** Only select the user selected theme if it is availible in the ** list of enabled themes. */ $theme = $themes[$user->theme] ? $user->theme : variable_get("theme_default", 0); include_once($themes[$theme]->filename); return $theme; } /** * Provides a list of currently available themes. * * @param $refresh * * @return an array of the currently available themes. */ function list_themes($refresh = 0) { static $list; if ($refresh) { unset($list); } if (!$list) { $list = array(); $result = db_query("SELECT * FROM {system} where type = 'theme' AND status = '1' ORDER BY name"); while ($theme = db_fetch_object($result)) { if (file_exists($theme->filename)) { $list[$theme->name] = $theme; } } } return $list; } /** * External interface of the theme system to all other modules, and core files. * * All requests for themed functions must go through this function. It examines * the request and routes it to the appropriate theme function. If the current * theme does not implement the requested function, then the base theme function * is called. Example: @verbatim $header_text = theme("header"); @endverbatim * * @return themed output. */ function theme() { global $theme; $args = func_get_args(); $function = array_shift($args); if (($theme != '') && (function_exists($theme ."_". $function))) { return call_user_func_array($theme ."_". $function, $args); } elseif (function_exists("theme_". $function)){ return call_user_func_array("theme_". $function, $args); } } /** * Returns the path to the currently selected theme. * * @return the path to the the currently selected theme. */ function path_to_theme() { global $theme; $themes = list_themes(); return dirname($themes[$theme]->filename); } /** * @defgroup themeable Themeable functions * @{ * * Themeable functions - functions that can be styled differently in themes. * * @see theme * @see theme.inc */ /** * Returns an entire Drupal page displaying the supplied content. * * @param $content a string containing the content to display * @param $title (optional) page title (\\) * @param $breadcrumb (optional) page breadcrumb * * @see drupal_breadcrumb * * @return a string containing the @a page output. */ function theme_page($content, $title = NULL, $breadcrumb = NULL) { if (isset($title)) { drupal_set_title($title); } if (isset($breadcrumb)) { drupal_set_breadcrumb($breadcrumb); } $output = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"; $output .= "<html xmlns=\"http://www.w3.org/1999/xhtml\">"; $output .= "<head>"; $output .= " <title>". (drupal_get_title() ? drupal_get_title() : variable_get('site_name', "drupal")) .""; $output .= drupal_get_html_head(); $output .= " "; $output .= " "; $output .= "
"; $output .= theme("box", t("Navigation"), @implode("
", link_page())); $output .= theme("blocks", "all"); $output .= "
"; $output .= theme("breadcrumb", drupal_get_breadcrumb()); $output .= "

" . drupal_get_title() . "

"; if ($help = menu_get_active_help()) { $output .= "$help
"; } $output .= "\n\n"; $output .= $content; $output .= "\n\n"; $output .= "
"; $output .= theme_closure(); $output .= ""; return $output; } /** * Returns themed set of links. * * @param $links an array of @a links to be themed. * @param $delimiter (optional) @a delimiter used to separate the links. * * @return a string containing the @a links output. */ function theme_links($links, $delimiter = " | ") { return implode($delimiter, $links); } /** * Returns themed image. * * @param $name the @a name of the image file. * * @return a string containing the @a image output. */ function theme_image($name) { return "misc/$name"; } /** * Returns a themed breadcrumb menu. * * @param $breadcrumb an array containing the breadcrumb links. * * @return a string containing the @a breadcrumb output. */ function theme_breadcrumb($breadcrumb) { return "
". implode($breadcrumb, ' » ') ."
"; } /** * Returns themed node. * * The passed $node object provides a all relevant information for displaying a * node: * @li @c $node->nid * @li @c $node->type i.e. story, blog, forum. * @li @c $node->title * @li @c $node->created a unix timestamp. * @li @c $node->teaser * @li @c $node->body * @li @c $node->changed a unix timestamp. * @li @c $node->uid the id of the poster. * @li @c $node->username the username of the poster. * * @param $node the @a node to be themed. * @param $main Display teaser only, as on main page? * @param $page Display node as standalone page (no title)? * * @return a string containing the @a node output. */ function theme_node($node, $main = 0, $page = 0) { if (module_exist("taxonomy")) { $terms = taxonomy_link("taxonomy terms", $node); } if ($page == 0) { $output = "

$node->title

by ". format_name($node); } else { $output = "by ". format_name($node); } if (count($terms)) { $output .= " (". theme('links', $terms) .")
"; } if ($main && $node->teaser) { $output .= $node->teaser; } else { $output .= $node->body; } if ($links = link_node($node, $main)) { $output .= "
". theme('links', $links) ."
"; } return $output; } /** * Returns themed form element. * * @param $title the form element's title * @param $value the form element's data * @param $description the form element's description or explanation * @param $id the form element's ID used by the <label> tag * * @return a string representing the form element */ function theme_form_element($title, $value, $description = NULL, $id = NULL) { if ($title) { if ($id) { $title = "
"; } else { $title = "
"; } } else { if ($id) { $title = "