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的版型架構來看看有什麼新玩意。

drupal 7 版型架構
drupal 7 版型架構 (pingv.com)

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的資訊可參考:

註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預設設定共有七個區域,分別是:

  1. header
  2. help (drupal 6放在page.tpl.php內的$help變數已被置換成這個區域)
  3. highlight (drupal 6的$mission變數已被置換成這個區域)
  4. content
  5. sidebar_first
  6. sidebar_second
  7. 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


標籤:, , ,

分類:, ,

本文作者是Audi Lu

1 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*

*

*

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料