drupal/includes/theme.inc

192 lines
4.6 KiB
PHP
Raw Normal View History

<?php
// $Id$
/**
* Basic theme
*
* @package theme system
*/
class BaseTheme {
var $background = "#ffffff";
var $foreground = "#000000";
2001-10-20 13:35:12 +00:00
function system($field) {
$system["name"] = "Basic theme";
$system["author"] = "Drupal";
$system["description"] = "Basic theme. Lynx friendly";
return $system[$field];
}
function header($title = "") {
$output = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"DTD/xhtml1-transitional.dtd\">\n";
$output .= "<html><head><title>". variable_get(site_name, "drupal") ."</title>";
$output .= theme_head($main);
$output .= "</head><body bgcolor=\"$this->background\" text=\"$this->foreground\">";
2001-10-20 13:35:12 +00:00
$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\">";
2001-10-20 13:35:12 +00:00
}
function links($links, $delimiter = " | ") {
return implode($delimiter, $links);
This a rather large commit that needs a lot of fine-tuning. If you update, you'll break your site as you need switching from structure to index.module: so this can be considered an intermediate commit. If you upgrade, and you are welcome to, just create a collection called "section" (for now) and assign your nodes some attributes in the described format. Feedback and bugreports are welcomed. Questions will be answered. CHANGES: - comment system: + when replying to a node (rather then to a comment), that node is displayed above the reply form. + when replying to a comment (rather then to a node), that comment is displayd above the reply form. - removed structure.inc, removed structure.module. - node.inc: + added 2 new node functions called 'node_attribute_edit()' and 'node_attribute_save()' used to 'hook in' any indexing system including your home-brewed stuff if you'd want to. Currently, index.module is the facto default index system. See story.module for usage. - book.module, story.module, poll.module, page.module, forum.module: + added preview functionality to administration section (via node module). + removed all references to structure.inc (category, topic). - moderate.module: + removed all references to structure.inc (category, topic). - book.module, story.module, page.module, forum.module: + increased the sizes of some textareas. - submit.php: + removed all references to structure.inc (category, topic). - marvin.theme: + removed dead code: function story() was depricated. - unconed.theme: + removed hardcoded references to drop.org. - marvin.theme, unconed.theme, jeroen.theme, yaroon.theme, example.theme: + removed all references to structure.inc (category, topic). TODO: - file.module, trip_link.module: + update preview functionality: see story.module for example. + remove references to 'cid' and 'tid', use 'attribute' instead: see story.module for example. - extend and build upon index.module as well as making it configurable
2001-06-10 15:01:20 +00:00
}
function image($name) {
return "misc/$name";
}
2001-10-20 13:35:12 +00:00
function node($node, $main) {
if (module_exist("taxonomy")) {
$terms = taxonomy_link("taxonomy terms", $node);
2002-05-20 18:00:59 +00:00
}
$output = "<b>$node->title</b> by ". format_name($node) ."<br />";
2002-05-20 18:00:59 +00:00
if (count($terms)) {
$output .= "<small>(". $this->links($terms) .")</small><br />";
}
2001-10-20 13:35:12 +00:00
if ($main && $node->teaser) {
$output .= check_output($node->teaser);
2001-10-20 13:35:12 +00:00
}
else {
$output .= check_output($node->body);
}
if ($links = link_node($node, $main)) {
$output .= "<br />[ ". $this->links($links) ." ]";
2001-10-20 13:35:12 +00:00
}
$output .= "<hr />";
print $output;
}
2001-10-20 13:35:12 +00:00
function box($subject, $content, $region = "main") {
2003-01-21 22:57:43 +00:00
$output = "<p><b>$subject</b><br />$content</p>";
2001-10-20 13:35:12 +00:00
print $output;
}
function block($subject, $content, $region = "main") {
global $theme;
$theme->box($subject, $content, $region);
}
2001-10-20 13:35:12 +00:00
function footer() {
$output = "</td></tr></table>";
2001-10-20 13:35:12 +00:00
$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>";
}
2002-11-09 20:50:50 +00:00
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() {
static $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");
}
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);
2002-04-15 15:10:06 +00:00
$theme_class = "Theme_$name";
@$obj =& new $theme_class();
$obj->path = dirname($themes[$name]->filename);
return $obj;
}
@$obj =& new BaseTheme;
return $obj;
}
/**
* Render blocks available for $user and $region calling $theme->block($region).
*
* @param string $region main|left|right
*/
function theme_blocks($region) {
global $user, $REQUEST_URI;
2001-01-26 13:38:46 +00:00
$result = db_query("SELECT * FROM blocks WHERE (status = '1' OR custom = '1') ". ($region != "all" ? "AND region = '%s' " : "") ."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);
}
}
?>