block.module 6.95 KB
Newer Older
Dries's avatar
 
Dries committed
1
2
<?

Dries's avatar
   
Dries committed
3
$module = array("page" => "block_page",
Dries's avatar
   
Dries committed
4
                "help" => "block_help",
Dries's avatar
   
Dries committed
5
6
                "admin" => "block_admin");

Dries's avatar
   
Dries committed
7
8
function block_help() {
 ?>
Dries's avatar
   
Dries committed
9
10
11
12
  <P>Blocks are the boxes visible in the side bars on the left- and right-hand side of the website.  They are either exported by the engine or by any of the active modules.  To really get your teeth into a drupal website, you are going to have to deal with blocks and administering blocks in a fairly sophisticated fashion.  This means you will need to understand how the block placement strategy works.</P>
  <P>The placement of blocks is delegated to the administrator. In most cases (i.e., the "custom" blocks), the user has complete control -- using preferences -- over whether or not they are enabled.</P>
  <P>An administrator can lay out and arrange the available blocks to fit in two regions: "left" and "right".  Regions simply contain blocks.  In addition, an administrator can assign each block (within a region) a weight to sort them vertically.  The heavier blocks will sink and the lighter blocks will be positioned nearer the top.</P>
  <P>As mentioned, blocks may be arranged to fit in two regions: left and right.  For theme builders, each region is identified by a corresponding constant: "left" and "right".</P>
Dries's avatar
   
Dries committed
13
14
15
 <?
}

Dries's avatar
   
Dries committed
16
17
18
19
function block_page() {
  global $theme;

  $result = db_query("SELECT * FROM blocks WHERE status = 1 ORDER BY module");
Dries's avatar
   
Dries committed
20

Dries's avatar
   
Dries committed
21
22
23
24
  $theme->header();
  print "<TABLE BORDER=\"0\">\n";
  while ($block = db_fetch_object($result)) {
    if ($state % 3 == 0) print " <TR>\n";
Dries's avatar
   
Dries committed
25
    print "  <TD ALIGN=\"center\" VALIGN=\"top\" WIDTH=\"33%\">\n";
Dries's avatar
   
Dries committed
26
27
28
29
30
    $blocks = module_execute($block->module, "block");
    $theme->box($blocks[$block->offset]["subject"], $blocks[$block->offset]["content"]);
    print " </TD>\n";
    if ($state % 3 == 2) print " </TR>\n";
    $state += 1;
Dries's avatar
   
Dries committed
31
  }
Dries's avatar
   
Dries committed
32
33
34
  print "</TABLE>\n";
  $theme->footer();
}
Dries's avatar
 
Dries committed
35
36
37

function block_admin_save($edit) {
  foreach ($edit as $key=>$value) {
Dries's avatar
   
Dries committed
38
    db_query("UPDATE blocks SET region = '". check_input($value[region]) ."', status = '". check_input($value[status]) ."', weight = '". check_input($value[weight]) ."' WHERE name = '". check_input($key) ."'");
Dries's avatar
 
Dries committed
39
40
41
42
43
44
  }
}

function block_admin_display() {
  global $repository;

Dries's avatar
   
Dries committed
45
  $result = db_query("SELECT * FROM blocks ORDER BY module");
Dries's avatar
   
Dries committed
46

Dries's avatar
 
Dries committed
47
48
49
  // Generate output:
  $output .= "<FORM ACTION=\"admin.php?mod=block\" METHOD=\"post\">\n";
  $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
Dries's avatar
   
Dries committed
50
  $output .= " <TR><TH>block</TH><TH>module</TH><TH>status</TH><TH>weight</TH><TH>region</TH></TR>\n";
Dries's avatar
   
Dries committed
51

Dries's avatar
 
Dries committed
52
53
54
  while ($block = db_fetch_object($result)) {
    $module = ($repository[$block->module]["admin"]) ? "<A HREF=\"admin.php?mod=$block->module\">$block->module</A>" : $block->module;

Dries's avatar
   
Dries committed
55
    $status .= "<SELECT NAME=\"edit[$block->name][status]\">\n";
Dries's avatar
   
Dries committed
56
57
    $status .= " <OPTION VALUE=\"2\"". (($block->status == 2) ? " SELECTED" : "") .">enabled: always</OPTION>\n";
    $status .= " <OPTION VALUE=\"1\"". (($block->status == 1) ? " SELECTED" : "") .">enabled: custom</OPTION>\n";
Dries's avatar
 
Dries committed
58
59
60
    $status .= " <OPTION VALUE=\"0\"". (($block->status == 0) ? " SELECTED" : "") .">disabled</OPTION>\n";
    $status .= "</SELECT>\n";

Dries's avatar
   
Dries committed
61
62
63
64
65
66
67
68
69
70
71
72
    $weight .= "<SELECT NAME=\"edit[$block->name][weight]\">\n";
    for ($count = 0; $count < 10; $count++) {
      $weight .= "<OPTION VALUE=\"$count\"". (($block->weight == $count) ? " SELECTED" : "") .">$count</OPTION>\n";
    }
    $weight .= "</SELECT>\n";

    $region .= "<SELECT NAME=\"edit[$block->name][region]\">\n";
    $region .= " <OPTION VALUE=\"0\"". (($block->region == 0) ? " SELECTED" : "") .">left</OPTION>\n";
    $region .= " <OPTION VALUE=\"1\"". (($block->region == 1) ? " SELECTED" : "") .">right</OPTION>\n";
    $region .= "</SELECT>\n";

    $output .= " <TR><TD>". $block->name ."</TD><TD ALIGN=\"center\">$module</TD><TD>$status</TD><TD>$weight</TD><TD>$region</TD></TR>\n";
Dries's avatar
   
Dries committed
73

Dries's avatar
 
Dries committed
74
    unset($status);
Dries's avatar
   
Dries committed
75
76
    unset($weight);
    unset($region);
Dries's avatar
 
Dries committed
77
  }
Dries's avatar
   
Dries committed
78

Dries's avatar
 
Dries committed
79
80
81
82
83
84
85
  $output .= "</TABLE>\n";
  $output .= "<INPUT NAME=\"op\" TYPE=\"submit\" VALUE=\"Save blocks\">\n";
  $output .= "</FORM>\n";

  print $output;
}

Dries's avatar
   
Dries committed
86
87
88
89
90
91
92
93
94
95
96
97
function block_admin_overview() {
  global $site_name;

  $result = db_query("SELECT * FROM blocks WHERE status > 0 AND region = 0 ORDER BY weight");
  $lblocks .= "<TABLE BORDER=\"0\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
  while ($block = db_fetch_object($result)) $lblocks .= " <TR><TD NOWRAP>". ($block->status == 2 ? "<B>$block->name</B>" : $block->name) ."</TD><TD>$block->weight</TD></TR>\n";
  $lblocks .= "</TABLE>\n";

  $result = db_query("SELECT * FROM blocks WHERE status > 0 AND region = 1 ORDER BY weight");
  $rblocks .= "<TABLE BORDER=\"0\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
  while ($block = db_fetch_object($result)) $rblocks .= " <TR><TD NOWRAP>". ($block->status == 2 ? "<B>$block->name</B>" : $block->name) ."</TD><TD>$block->weight</TD></TR>\n";
  $rblocks .= "</TABLE>\n";
Dries's avatar
   
Dries committed
98

Dries's avatar
   
Dries committed
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
  $output .= "<P><B>layout 1:</B></P>\n";
  $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
  $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"3\">$site_name header</TD></TR>\n";
  $output .= " <TR><TD>\n". ($lblocks ? $lblocks : "&nbsp;") ."</TD><TD WIDTH=\"300\">&nbsp;</TD><TD>\n". ($rblocks ? $rblocks : "&nbsp;") ."</TD></TR>\n";
  $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"3\">$site_name footer</TD></TR>\n";
  $output .= "</TABLE>\n";

  $result = db_query("SELECT * FROM blocks WHERE status > 0 ORDER BY weight");
  $blocks .= "<TABLE BORDER=\"0\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
  while ($block = db_fetch_object($result)) $blocks .= " <TR><TD NOWRAP>". ($block->status == 2 ? "<B>$block->name</B>" : $block->name) ."</TD><TD>$block->weight</TD></TR>\n";
  $blocks .= "</TABLE>\n";

  $output .= "<P><B>layout 2:</B></P>\n";
  $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
  $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"2\">$site_name header</TD></TR>\n";
  $output .= " <TR><TD WIDTH=\"400\">&nbsp;</TD><TD>\n". ($blocks ? $blocks : "&nbsp;") ."</TD></TR>\n";
  $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"2\">$site_name footer</TD></TR>\n";
  $output .= "</TABLE>\n";

  $output .= "<P><B>layout 3:</B></P>\n";
  $output .= "<TABLE BORDER=\"1\" CELLPADDING=\"2\" CELLSPACING=\"2\">\n";
  $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"2\">$site_name header</TD></TR>\n";
  $output .= " <TR><TD>\n". ($blocks ? $blocks : "&nbsp;") ."</TD><TD WIDTH=\"400\">&nbsp;</TD></TR>\n";
  $output .= " <TR><TD ALIGN=\"center\" COLSPAN=\"2\">$site_name footer</TD></TR>\n";
  $output .= "</TABLE>\n";

  print $output;
}

Dries's avatar
 
Dries committed
128
129
function block_admin() {
  global $op, $edit;
Dries's avatar
   
Dries committed
130

Dries's avatar
   
Dries committed
131
  print "<SMALL><A HREF=\"admin.php?mod=block\">configure</A> | <A HREF=\"admin.php?mod=block&op=overview\">overview</A> | <A HREF=\"admin.php?mod=block&op=help\">help</A></SMALL><HR>\n";
Dries's avatar
 
Dries committed
132
133

  switch ($op) {
Dries's avatar
   
Dries committed
134
135
136
137
138
139
    case "help":
      block_help();
      break;
    case "overview":
      block_admin_overview();
      break;
Dries's avatar
 
Dries committed
140
141
    case "Save blocks":
      block_admin_save($edit);
Dries's avatar
   
Dries committed
142
143
144
      // fall through
    default:
      block_admin_display();
Dries's avatar
 
Dries committed
145
  }
Dries's avatar
   
Dries committed
146

Dries's avatar
 
Dries committed
147
148
149
}

?>