在drupal中新增区域(Region)


本文转载自阿舍的drupal架站经验,使用自定义的区块便能轻易架设易于改动的drupal网站界面
查找相关文章:drupal Region

本文转载自阿舍的drupal架站经验

http://drupal.soa.tw/custom_regions_setting

并不是每个版型都会上、下、左、右及头和尾等区域( Region )可以拿来放区块( Block )的,像阿舍现在用的这个版型,就没有"Content Top"这个区域,这个区域就是在内容( Content )这一块的上面那里,所以,阿舍就自己去把它加上去,呵呵,还好不会太复杂,不过要对page.tpl.php这个档有点概念就是了.....。


新增自定的区域主要是分成下列两个大步骤:

1.定义新的区域

要 新增新的区域,首先就是要先定义它,不然Drupal桑怎么会知道有多了一个区域呢?是啊!所以就要先定义出来才行,要怎么定义呢?很不幸的, Drupal 5和Druapl 6的作法不同,阿舍就得多打不少字哩....=____=!!,不过,应该说是变简单,可是,阿舍是觉得变奇怪了哩..... 。

先 来讲Drupal 5的作法,不过要先说,这个是只适用PHPtemplate引擎的作法的,其它引擎可不一定适用,但是,怎么知道是不是用PHPtemplate引擎的 哩?这个不难,请各位大德看一下所有使用的版型资料夹下,有没有page.tpl.php这个档,如果有的话,那就是了,大概不会错的。

在 PHPtemplate 引擎的架構裡,有個檔案叫做 "templae.php",這個,是用來撰寫覆蓋 Drupal 版型相關函數( Function ) 的檔案,也就是在 includes/theme.inc 及 includes/menu.inc 裡的函數可以經由 template.php 來撰寫取代的相關函數,這樣可以讓各位大德進一步的控制 Drupal 丟出來的東西,然後可控制版型的形成..。

不過,今天沒有要詳細的介紹 template.php 這個檔,只是借用一下而已....呵呵,請各位大德到使用中的版型的資料夾裡,用文字編輯器去打開 templat.php 這個檔,如果沒有,就自己建一個,沒關係的。

打開之後,請各位大德先找找看有沒有 xxxxx__regions() 這個 function,前面的 xxxxx 是指各位大所使用的版型名稱,以阿舍的版型為例,就是叫做 copyblogger_regions(),如果也是沒有,那就請大德們參考下面的程式碼,自己建一個,OK 的啦...呵呵。

function xxxxx_regions() {
return array(
'right_bar' => t('right sidebar'),
'left_bar' => t('left sidebar'),
'content' => t('content'),
'header' => t('header'),
'footer' => t('footer')
);
}

這個就是用來重新定義版型所有的區域的函數,在 return array 的下面, 每一行定義一個區域,=> 的右邊,在 t() 裡是定義區域的顯示名稱,就是在 「管理」>「網站建置」>「區塊」( /admin/build/block ) 裡,用來標示區域所在位置的文字。

而在 => 左邊的,就是這個區域的變數名稱,是用在 page.tpl.php 裡的,一般在沒有使用這個函數下,就會使用預設的名稱,例如 $sidebar_right、$sidebar_left ( 以 Drupal 5 為例 ) 等,而當使用了這個 xxxxx_regions() 定義過之後,那就會變成在 page.tpl.php 裡,要用 $right_bar 和 $left_bar 來取代。

這樣講,不知各位大德是不是已經能夠有所理解哩 !? 呵呵,沒錯,要新增新的區域就是在這裡加上去的,以阿舍要新增的 content_top 區為例,就會是下面的樣子

function xxxxx_regions() {
return array(
'right_bar' => t('right sidebar'),
'left_bar' => t('left sidebar'),
'content' => t('content'),
'header' => t('header'),
'footer' => t('footer'),
'conetnt_top' => t('Content Top') <<< 這裡就是阿舍新增的,要注恴 "," 的位置...
);
}

加上去之後存檔,就算完成第一個步驟了,再來要再說一下 Drupal 6 的作法,Drupal 6 應該是變簡單了,只要在所使用的版型資料夾裡,找到 .info 檔來編輯,然後加入下列宣告就可以了。

regions[left] = Left
regions[right] = Right
regions[content] = Content
regions[header] = Header
regions[footer] = Footer

這個和前面在 Drupal 介紹的方式差不多,等號右邊是顯示名稱,左邊的 [ ] 大括弧裡則是放區域的變數名稱,以阿舍為例,就會變成,

regions[left] = Left
regions[right] = Right
regions[content] = Content
regions[header] = Header
regions[footer] = Footer
regions[contenttop] = Content top <<<

請大德們要全部的區域都要有放進來,不可以只放要新增的部分,不然的話,其它沒放在這的區域,就會在 Drupal 裡消失哩....。

另外,各位大德有沒有注意到,在 Drupal 6 裡的變數名稱怎麼都沒有用底線 "_" 或減號 "-" 呢 ? 這可不是巧合的,這是故意的,阿舍有試過,給它的變數名稱取成 content_top,結果在 Druapl 6 裡,這個區域就會變的怪怪的,看的到,可是卻用不到,這就是阿舍覺得怪的地方哩 !!....=____=!!。

2. 加入新區域到 page.tpl.php

定義完區域之後,再來就是要來喬這個新區域的位置了,首先,要先在所使用的版型的資料夾裡打開 page.tpl.php 檔,然後找到適當的位置把這個 < ?php print $區域變數;?> 放上去,然後存檔,就搞定了。

以阿舍為例,阿舍就把 < ?php print $content_top;?> 放到 <?php print $content; ?> 的上面,這樣這個新增的區域就會出現在「內容 (Contnt )」的上面了。

完成上面二個步驟之後,就可以到 「管理」>「網站建置」>「區塊」( /admin/build/block ) 去看,應該就會有看到新增的區域,接著就可以放個區塊 ( Block) 進去,來試試是不是會在指定的位置顯示出來囉 !!

不過,使用 Druapl 6 的大德們,應該是沒有這麼 Happy 的,因為 Drupal 6 對這是 .info 是會把它暫存到資料庫去的,所以不會即時更新,要到「管理」>「網站設定」>「效能」裡,去按下面的「清除快取資料」 之後,再去區塊的管理畫面,才會看的到新增的區域的哩 !