228 lines
5.6 KiB
PHP
228 lines
5.6 KiB
PHP
<?php
|
|
// $Id$
|
|
|
|
/**
|
|
* Basic theme
|
|
*
|
|
* @package theme system
|
|
*/
|
|
class BaseTheme {
|
|
var $background = "#ffffff";
|
|
var $foreground = "#000000";
|
|
|
|
function system($field) {
|
|
$system["name"] = "Basic theme";
|
|
$system["author"] = "Drupal";
|
|
$system["description"] = "Basic theme. Lynx friendly";
|
|
|
|
return $system[$field];
|
|
}
|
|
|
|
function header($title = "") {
|
|
global $base_url;
|
|
|
|
$output = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"DTD/xhtml1-transitional.dtd\">\n";
|
|
$output .= "<html><head><title>". $title ? $title : variable_get(site_name, "drupal") ."</title>";
|
|
$output .= "<base href=\"$base_url/\" />";
|
|
$output .= theme_head($main);
|
|
$output .= "</head><body bgcolor=\"$this->background\" text=\"$this->foreground". theme_onload_attribute(). "\">";
|
|
$output .= "<table border=\"0\" cellspacing=\"4\" cellpadding=\"4\"><tr><td valign=\"top\" width=\"170\">";
|
|
|
|
print $output;
|
|
$this->box(t("Navigation"), @implode("<br />", link_page())); theme_blocks("all", $this);
|
|
print "</td><td valign=\"top\">";
|
|
|
|
}
|
|
|
|
function links($links, $delimiter = " | ") {
|
|
return implode($delimiter, $links);
|
|
}
|
|
|
|
function image($name) {
|
|
return "misc/$name";
|
|
}
|
|
|
|
function node($node, $main) {
|
|
if (module_exist("taxonomy")) {
|
|
$terms = taxonomy_link("taxonomy terms", $node);
|
|
}
|
|
|
|
$output = "<b>$node->title</b> by ". format_name($node) ."<br />";
|
|
|
|
if (count($terms)) {
|
|
$output .= "<small>(". $this->links($terms) .")</small><br />";
|
|
}
|
|
|
|
if ($main && $node->teaser) {
|
|
$output .= check_output($node->teaser);
|
|
}
|
|
else {
|
|
$output .= check_output($node->body);
|
|
}
|
|
if ($links = link_node($node, $main)) {
|
|
$output .= "<br />[ ". $this->links($links) ." ]";
|
|
}
|
|
$output .= "<hr />";
|
|
|
|
print $output;
|
|
}
|
|
|
|
function box($subject, $content, $region = "main") {
|
|
$output = "<p><b>$subject</b><br />$content</p>";
|
|
print $output;
|
|
}
|
|
|
|
function block($subject, $content, $region = "main") {
|
|
global $theme;
|
|
|
|
$theme->box($subject, $content, $region);
|
|
}
|
|
|
|
function footer() {
|
|
$output = "</td></tr></table>";
|
|
$output .= theme_footer();
|
|
$output .= "</body></html>";
|
|
print $output;
|
|
}
|
|
|
|
}
|
|
|
|
function theme_mark() {
|
|
/*
|
|
** Return a marker. Used to indicate new comments or required form
|
|
** fields.
|
|
*/
|
|
return "<span style=\"color: red;\">*</span>";
|
|
}
|
|
|
|
function theme_item_list($items = array(), $title = NULL) {
|
|
/*
|
|
** Return a formatted array of items.
|
|
*/
|
|
|
|
if (isset($title)) {
|
|
$output .= "<b>$title</b><br />";
|
|
}
|
|
|
|
if (isset($items)) {
|
|
foreach ($items as $item) {
|
|
$output .= "- $item<br />";
|
|
}
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
function theme_error($message) {
|
|
/*
|
|
** Return an error message.
|
|
*/
|
|
return "<div style=\"color: red;\">$message</div>";
|
|
}
|
|
|
|
function theme_list($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;
|
|
}
|
|
|
|
function theme_head($main = 0) {
|
|
$head = module_invoke_all("head", $main);
|
|
return implode($head, "\n");
|
|
}
|
|
|
|
/*
|
|
* Execute hook _footer() which is run at the end of the page right before
|
|
* the </body> tag
|
|
*/
|
|
function theme_footer($main = 0) {
|
|
$footer = module_invoke_all("footer", $main);
|
|
return implode($footer, "\n");
|
|
}
|
|
|
|
function theme_init() {
|
|
global $user;
|
|
|
|
$themes = theme_list();
|
|
$name = $user->theme ? $user->theme : variable_get("theme_default", 0);
|
|
|
|
if (is_object($themes[$name])) {
|
|
include_once($themes[$name]->filename);
|
|
$class = "Theme_$name";
|
|
$instance =& new $class();
|
|
$instance->path = dirname($themes[$name]->filename);
|
|
}
|
|
else {
|
|
$instance =& new BaseTheme;
|
|
}
|
|
|
|
return $instance;
|
|
}
|
|
|
|
/**
|
|
* Render blocks available for $user and $region calling $theme->block($region).
|
|
*
|
|
* @param string $region main|left|right
|
|
*/
|
|
function theme_blocks($region) {
|
|
global $user;
|
|
|
|
$result = db_query("SELECT * FROM blocks WHERE (status = '1' OR custom = '1') ". ($region != "all" ? "AND region = %d " : "") ."ORDER BY weight, module", $region == "left" ? 0 : 1);
|
|
|
|
while ($result && ($block = db_fetch_object($result))) {
|
|
if ((($block->status && (!$user->uid || !$block->custom)) || ($block->custom && $user->block[$block->module][$block->delta])) && (!$block->path || preg_match('/'. str_replace('/', '\/', $block->path) .'/', request_uri()))) {
|
|
$block_data = module_invoke($block->module, "block", "view", $block->delta);
|
|
if ($block_data["content"]) {
|
|
theme("block", $block_data["subject"], $block_data["content"], $region);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function theme() {
|
|
global $theme;
|
|
$args = func_get_args();
|
|
|
|
$function = array_shift($args);
|
|
|
|
if (method_exists($theme, $function)) {
|
|
return call_user_method_array($function, $theme, $args);
|
|
}
|
|
else {
|
|
return call_user_func_array($function, $args);
|
|
}
|
|
}
|
|
|
|
/*
|
|
* Call _onload hook in all modules to enable modules to insert javascript
|
|
* that will get run once the page has been loaded by the browser
|
|
*/
|
|
function theme_onload_attribute($theme_onloads = array()) {
|
|
if (!is_array($theme_onloads)) {
|
|
$theme_onloads = array($theme_onloads);
|
|
}
|
|
// Merge theme onloads (javascript rollovers, image preloads, etc.)
|
|
// with module onloads (htmlarea, etc.)
|
|
$onloads = array_merge(module_invoke_all("onload"), $theme_onloads);
|
|
if (count($onloads)) {
|
|
return " onload=\"" . implode("; ", $onloads) . "\"";
|
|
}
|
|
return;
|
|
}
|
|
|
|
?>
|