Drupal 7版型開發(theming)與Drupal 6的不同(上)
| 2010/05/06 | 1 則迴響
Drupal 7預計將在今年中發佈正式版,在版型開發上有什麼不同之處需要注意的呢?
版型(Theme)無法向下相容
一直以來新版的Drupal發佈後,舊版的模組(module) 都無法向下相容於舊版的Drupal (指主要版號發佈),這樣的情況也同樣發生在版型上,即是指舊的版型要經過修正才能套用至新版Drupal。針對此情況,Drupal.org提出了一份「Drupal 6轉換到Drupal 7的變更清單」,這份清單目前有49個項目,但實際上這些項目存在著一些待修正的部份,另外也有尚未列入清單的項目正在討論中 (講白一點就是這份清單有一點點過時XD)。但無論如何,這份清單還是能給Drupal 6的版型師(Themer)很不錯的參考,並決定思考如何升級版型去支援Drupal 7。
有一點可以確定的是,比起 Drupal 6,Drupal 7的模型開發比較複雜一點點,但這不表示比較難學習。我想合理的複雜化,是為了更容易理解及擴充。複雜的原因可能在於,Drupal 7 想盡辦法的將版型解構成合理的項目,並且另方面還要維持概念上的一致性,如此Drupal 6的版型師在轉換上才不會太痛苦。
我們先從Drupal 7的版型架構來看看有什麼新玩意。
html.tpl.php
若從版型的新架構來看,首先最外圍的包裹檔案已經從page.tpl.php變成 html.tpl.php了,不過 html.tpl.php只是把一些內容從page.tpl.php裡抽出來而已。您可以參考 modules/system/html.tpl.php (註1) 來了解它的詳細內容。大體來說,html.tpl.php主要存放 DOCTYPE描述、Html標籤、Head資訊與Body標籤,然後在Body標籤內傳入 page.tpl.php 的內容。
html.tpl.php的內容直覺且單純,因此多數版型師不太需要覆寫(override)它去作客製化。
更多關於 html.tpl.php的資訊可參考:
- api文件 – http://api.drupal.org/api/drupal/modules–system–html.tpl.php/7
- 實作與變更 –http://drupal.org/node/579698
註1. modules/system目錄下可以找到許多以 tpl.php 為後置字的檔案,這些都是Drupal核心各部份的基底樣版檔,是很好的參考資料。而無論是核心或第三方模組的目錄下,有些也附有屬於該模組的*.tpl.php樣版檔。
region.tpl.php
區域(Region)樣版包括了內容區域、側邊欄、頁尾等設定。這份樣版檔是Drupal 7新增的,可以參考modules/system/region.tpl.php,實際內容就只有三行:
[code]
<div>
<?php print $content; ?>
</div>
[/code]
通常要在版型的.info檔內宣告要使用的區域,如果沒宣告就會用預設的設定,Drupal 7預設設定共有七個區域,分別是:
- header
- help (drupal 6放在page.tpl.php內的$help變數已被置換成這個區域)
- highlight (drupal 6的$mission變數已被置換成這個區域)
- content
- sidebar_first
- sidebar_second
- footer
所有的區域都會在page.tpl.php被呼叫並且繪出,語法就像:
[code]
<?php print render($page[‘help’]); ?>
<?php print render($page[‘sidebar_first’]); ?>
<?php print render($page[‘sidebar_second’]); ?>
[/code]
不過一般我們會附加個條件,就是區域內有東西才輸出,所以語法就變成:
[code]
<?php if ($page[‘highlight’]): ?>
<div id=”highlight”>
<?php print render($page[‘highlight’]); ?>
</div>
<?php endif; ?>
[/code]
更多資訊可參考:
隱藏的區域 (Hidden Regions)
您可以在模版的.info檔內定義隱藏的區域:
regions[content] = Content
regions[help] = Help
regions[page_top] = Page top
regions[page_bottom] = Page bottom
regions[indicators] = Indicators
regions_hidden[] = indicators
最後一行的indicators就是隱藏的區域。某些情況下,這是一個很棒的技巧。定義隱藏的區域,可以不讓使用者透過區塊(blocks)管理頁面去使用它,但可以利用模組在這些隱藏的區域放置一些資訊。
兩個透過CSS隱藏內容的方法
說到隱藏東西,Drupal 7 提供了兩個標準的CSS類別來隱藏內容:
1. .element-hidden
把一個元素藏起來,不給任何人看到,就像drupal內隨處可見的可收納欄位區塊(collapsible fieldset),按一下展開,再按一下就隱藏起來。
2. .element-invisible
在視覺上把一個元素藏起來,但保持它能被螢幕朗讀軟體(screen readers,視障者使用的瀏覽器)讀取。
兩種方法都是很便利的預設類別,特別是網站愈來愈像互動的應用程式介面時,版型師應該考量更多使用性上的議題,而不只是把它當成一個頁面來設計。
未完待續…
參考資料:
http://pingv.com/blog/a-peek-at-drupal-7-theme-system-changes
http://drupal.org/update/theme/6/7
標籤:Drupal, Drupal 7, 版型開發, 網站設計
本文作者是Audi Lu
1 則留言
[…] This post was mentioned on Twitter by mrmu. mrmu said: 分享 http://tinyurl.com/26wl8oj (Drupal 7版型開發(theming)與Drupal 6的不同(上) @ mr.mu設計工作室),心血來潮又發文了~ http://plurk.com/p/51wn3s […]