block.module 6.91 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 9 10 11 12 13 14 15
function block_help() {
 ?>
  <P>Blocks are the boxes visible in the side bars on the left and the right-hand side of the website.  They are either exported by the engine or by any of the available modules.  To really get your teeth in a drupal website, you are going to have to deal with blocks and administrating blocks in a fairly sophisticated fashion.  This means you are going to have to be sensitive to the way the block placement strategy works.</P>
  <P>The placement of blocks is delegated to the administrator but for most blocks, i.e. those called "custom blocks", the sole force behind enabling and disabling them is the user itself.</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 heavy blocks will sink down whereas the light blocks will be positioned at the top.</P>
  <P>As mentioned above, blocks can 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
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
function block_page() {
  global $theme;

  $result = db_query("SELECT * FROM blocks WHERE status = 1 ORDER BY module");
  
  $theme->header();
  print "<TABLE BORDER=\"0\">\n";
  while ($block = db_fetch_object($result)) {
    if ($state % 3 == 0) print " <TR>\n";
    print "  <TD ALIGN=\"center\" VALIGN=\"top\" WIDTH=\"33%\">\n"; 
    $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;
  }  
  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 = '$value[region]', status = '$value[status]', weight = '$value[weight]' WHERE name = '$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 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 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 74
    
    unset($status);
Dries's avatar
 
Dries committed
75 76
    unset($weight);
    unset($region);
Dries's avatar
 
Dries committed
77 78 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 98 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
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";
  
  $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 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 146 147 148 149
  }
 
}

?>