大部分官網提供的 themes 都是比較標準的版型,特別是 block 擺放的位置,很多都是在側邊欄裡頭,有時要突破這個僵局,想把 block 放在版面中的任意位置,於是有 region 的產生。
例如想在 content 的上方和下方各置一個 block, Drupal theme 該如何寫呢?
Step 1: 在 template.php 中定義各個 block 名稱
在 template 中插入下列的 code
function ThemeName_regions() {
return array(
'header' => t('header'),
'right' => t('right sidebar'),
'left' => t('left sidebar'),
'content' => t('content'),
'footer' => t('footer'),
'inlineTop' => t('inline top'),
'inlineBottom' => t('inline bottom'),
);
}
其中 ThemeName 是你 theme 的名稱,inlineTop, inlineBottom 是我們要在 content 的上、下方定義的區塊。
Step 2: 在 page.tpl.php 中,加入自定的 block 區段
例如在 content 的上、下方加入剛才的定義...
<?php if ($tabs): ?><?php print $tabs ?><?php endif; ?>
<?php print $help ?>
<?php print $messages ?>
<?php print $content ?>
<?php print $inlineBottom; ?>
Step 3: 適需要再潤飾自定 region 的 CSS
基本上這樣已經大功告成,恭喜你~
要特別注意的是,template.php 中的 region 定義,必須不厭其煩把各個 block region 一一寫出,不然在 admin 的區塊控制中,會缺東漏西。
Re: Region 如何使用?
上文是指各個預設的 region 是嗎? 我有點搞混中 :p
我目前的認知是,region 一種用來裝 block 的 container。
Re: Region 如何使用?
我想應該是指region :P
Re: Region 如何使用?
DrakeGuan 說「region 一種用來裝 block 的 container」,這樣解釋得比較清楚,在 region 裡頭是可以裝很多 blocks。
那我應該把「必須不厭其煩把各個 block 一一寫出」修改成「必須不厭其煩把各個 region 一一寫出」,這樣就澄清了。
Re: Region 如何使用?
使用panels模組和自訂region的差別
1. panels擁有設定介面,region無
2. panels有views bonus pack支援,region需要靠基本的程式,以及views產生block的熟稔程度
3. panels只能定義content這個region裡頭的版面(也就是頁首、頁尾等都不能動到),region本身就可以有各種彈性
4. panels需要安裝額外的模組,管理block時需要熟悉兩種設定環境
以上,是我的認知,不知道有沒有問題
Re: Region 如何使用?
panels 裡除了block/views 之外,還可以裝node,直接塞文章(全文或摘要)進去。
我覺得最重要的差別在於:
region 做好,可以適用於使用此版型的所有頁面/全網站,而 panels 就只有那一頁 :)
Re: Region 如何使用?
不能有多個panels嗎?這真是讓我太驚訝了
Re: Region 如何使用?
噗,不是拉,是說 panels 是一頁頁新增,template region 卻是全站馬上適用。
Re: Region 如何使用?
的確好用!
這讓panels 沒有存在義意了
Joetsui's blog