Index: database/database.mysql =================================================================== RCS file: /cvs/drupal/drupal/database/database.mysql,v retrieving revision 1.193 diff -u -r1.193 database.mysql --- database/database.mysql 8 Aug 2005 18:51:48 -0000 1.193 +++ database/database.mysql 12 Aug 2005 14:44:18 -0000 @@ -121,9 +121,10 @@ CREATE TABLE blocks ( module varchar(64) DEFAULT '' NOT NULL, delta varchar(32) NOT NULL default '0', + theme varchar(255) NOT NULL default '', status tinyint(2) DEFAULT '0' NOT NULL, weight tinyint(1) DEFAULT '0' NOT NULL, - region tinyint(1) DEFAULT '0' NOT NULL, + region varchar(64) DEFAULT 'left' NOT NULL, custom tinyint(2) DEFAULT '0' NOT NULL, throttle tinyint(1) DEFAULT '0' NOT NULL, visibility tinyint(1) DEFAULT '0' NOT NULL, @@ -805,8 +806,8 @@ REPLACE variable SET name='theme_default', value='s:10:"bluemarine";'; -REPLACE blocks SET module = 'user', delta = '0', status = '1'; -REPLACE blocks SET module = 'user', delta = '1', status = '1'; +REPLACE blocks SET module = 'user', delta = '0', theme = 'bluemarine', status = '1'; +REPLACE blocks SET module = 'user', delta = '1', theme = 'bluemarine', status = '1'; INSERT INTO sequences (name, id) VALUES ('menu_mid', 1); Index: database/database.pgsql =================================================================== RCS file: /cvs/drupal/drupal/database/database.pgsql,v retrieving revision 1.132 diff -u -r1.132 database.pgsql --- database/database.pgsql 8 Aug 2005 18:51:48 -0000 1.132 +++ database/database.pgsql 12 Aug 2005 14:44:22 -0000 @@ -116,9 +116,10 @@ CREATE TABLE blocks ( module varchar(64) NOT NULL default '', delta varchar(32) NOT NULL default '0', + theme varchar(255) NOT NULL default '', status smallint NOT NULL default '0', weight smallint NOT NULL default '0', - region smallint NOT NULL default '0', + region varchar(64) DEFAULT 'left' NOT NULL, custom smallint NOT NULL default '0', throttle smallint NOT NULL default '0', visibility smallint NOT NULL default '0', @@ -798,8 +799,8 @@ INSERT INTO role (name) VALUES ('authenticated user'); INSERT INTO permission VALUES (2,'access comments, access content, post comments, post comments without approval',0); -INSERT INTO blocks(module,delta,status) VALUES('user', 0, 1); -INSERT INTO blocks(module,delta,status) VALUES('user', 1, 1); +INSERT INTO blocks(module,delta,theme,status) VALUES('user', 0, 'bluemarine', 1); +INSERT INTO blocks(module,delta,theme,status) VALUES('user', 1, 'bluemarine', 1); INSERT INTO node_access VALUES (0, 0, 'all', 1, 0, 0); Index: database/updates.inc =================================================================== RCS file: /cvs/drupal/drupal/database/updates.inc,v retrieving revision 1.125 diff -u -r1.125 updates.inc --- database/updates.inc 11 Aug 2005 12:57:41 -0000 1.125 +++ database/updates.inc 15 Aug 2005 15:47:25 -0000 @@ -120,7 +120,8 @@ "2005-05-22" => "update_141", "2005-07-29" => "update_142", "2005-07-30" => "update_143", - "2005-08-08" => "update_144" + "2005-08-08" => "update_144", + "2005-08-15" => "update_145" ); function update_32() { @@ -2550,6 +2551,28 @@ return $ret; } +function update_145() { + $default_theme = variable_get('theme_default', 'bluemarine'); + $ret = array(); + $ret[] = update_sql("ALTER TABLE {blocks} CHANGE region region varchar(64) default 'left' NOT NULL"); + $ret[] = update_sql("ALTER TABLE {blocks} ADD theme varchar(255) NOT NULL default ''"); + + // Intialize block data for default theme + $ret[] = update_sql("UPDATE {blocks} SET region = 'left' WHERE region = '0'"); + $ret[] = update_sql("UPDATE {blocks} SET region = 'right' WHERE region = '1'"); + db_query("UPDATE {blocks} SET theme = '%s'", $default_theme); + + // Initialze block data for other enabled themes. + $themes = list_themes(); + foreach (array_keys($themes) as $theme) { + if (($theme != $default_theme) && $themes[$theme]->status == 1) { + system_initialize_theme_blocks($theme); + } + } + + return $ret; +} + function update_sql($sql) { $edit = $_POST["edit"]; $result = db_query($sql); Index: includes/common.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/common.inc,v retrieving revision 1.466 diff -u -r1.466 common.inc --- includes/common.inc 11 Aug 2005 12:57:41 -0000 1.466 +++ includes/common.inc 15 Aug 2005 16:48:10 -0000 @@ -25,6 +25,48 @@ define('SAVED_DELETED', 3); /** + * Set content for a specified region. + * + * @param $region + * Page region the content is assigned to. + * + * @param $data + * Content to be set. + */ +function drupal_set_content($region = null, $data = null) { + static $content = array(); + + if (!is_null($region) && !is_null($data)) { + $content[$region][] = $data; + } + return $content; +} + +/** + * Get assigned content. + * + * @param $region + * A specified region to fetch content for. If null, all regions will be returned. + * + * @param $delimiter + * Content to be inserted between exploded array elements. + */ +function drupal_get_content($region = null, $delimiter = ' ') { + $content = drupal_set_content(); + if (isset($region)) { + return is_array($content[$region]) ? implode ($delimiter, $content[$region]) : ''; + } + else { + foreach (array_keys($content) as $region) { + if (is_array($content[$region])) { + $content[$region] = implode ($delimiter, $content[$region]); + } + } + return $content; + } +} + +/** * Set the breadcrumb trail for the current page. * * @param $breadcrumb @@ -1829,4 +1871,4 @@ // Initialize the localization system. $locale = locale_initialize(); } -?> +?> \ No newline at end of file Index: includes/theme.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/theme.inc,v retrieving revision 1.252 diff -u -r1.252 theme.inc --- includes/theme.inc 11 Aug 2005 12:57:41 -0000 1.252 +++ includes/theme.inc 15 Aug 2005 05:10:29 -0000 @@ -798,7 +798,7 @@ * * @param $block * An object populated with fields from the "blocks" database table - * ($block->module, $block->delta, $block->region, ...) and fields returned by + * ($block->module, $block->delta ...) and fields returned by * module_block('view') ($block->subject, $block->content, ...). * @return * A string containing the block output. @@ -945,6 +945,9 @@ $output .= theme('block', $block); } } + + // Add any content assigned to this region through drupal_set_content() calls. + $output .= drupal_get_content($region); return $output; } Index: misc/drupal.css =================================================================== RCS file: /cvs/drupal/drupal/misc/drupal.css,v retrieving revision 1.111 diff -u -r1.111 drupal.css --- misc/drupal.css 29 Jul 2005 06:59:29 -0000 1.111 +++ misc/drupal.css 31 Jul 2005 18:45:08 -0000 @@ -87,6 +87,12 @@ .breadcrumb { padding-bottom: .5em } +.block-region { + background-color: #ffff66; + margin-top: 4px; + margin-bottom: 4px; + padding: 3px; +} .block ul { margin: 0; padding: 0 0 0.25em 1em; @@ -343,7 +349,6 @@ font-style: normal; text-decoration: line-through; } - #node-admin-filter ul { list-style-type: none; padding: 0px; @@ -618,3 +623,4 @@ html.js fieldset.collapsed legend a { background-image: url('menu-collapsed.png'); } + Index: modules/block.module =================================================================== RCS file: /cvs/drupal/drupal/modules/block.module,v retrieving revision 1.176 diff -u -r1.176 block.module --- modules/block.module 7 Aug 2005 15:30:03 -0000 1.176 +++ modules/block.module 15 Aug 2005 17:11:32 -0000 @@ -13,8 +13,8 @@ switch ($section) { case 'admin/help#block': return t(' -

Blocks are the boxes visible in the sidebar(s) of your web site. These are usually generated automatically by modules (e.g. recent forum topics), but you can also create your own blocks.

-

The sidebar each block appears in depends on both which theme you are using (some are left-only, some right, some both), and on the settings in block management.

+

Blocks are the boxes visible in the sidebar(s) of your web site and other regions. These are usually generated automatically by modules (e.g. recent forum topics), but you can also create your own blocks.

+

The region each block appears in depends on both which theme you are using (some are left-only, some right, some both, and some may offer other regions), and on the settings in block management.

The block management screen lets you specify the vertical sort-order of the blocks within a sidebar. You do this by assigning a weight to each block. Lighter blocks (smaller weight) "float up" towards the top of the sidebar. Heavier ones "sink down" towards the bottom of it.

A block\'s visibility depends on: