
並不是每個版型都會上、下、左、右及頭和尾等區域 ( 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 是會把它暫存到資料庫去的,所以不會即時更新,要到「管理」>「網站設定」>「效能」裡,去按下面的「清除快取資料」 之後,再去區塊的管理畫面,才會看的到新增的區域的哩 !
- 增加新的回應
- 瀏覽次數: 6288

阿舍兄真是个认真的人啊。。。非常佩服…… 现在我的问题已经解决了,使用的办法就是自定义regions 然后根据JOC(http://www.joetsuihk.com/node/101)的办法重新布置首页的版面使用了page-front.tpl.php(drupal6)这个作为首页的布局。上次出现的问题是我没有加入$content 这个regions 导致不会出现block放置选项。
然后现在的问题就是对各个regions的css了。。。还得研究下,希望一起讨论。。。