Joomla秘笈

關於開源CMS-Joomla的技術或相關資訊分享

在Template中使用頁面類別 ( Page Class Suffix )

目的:

  在版型(tempalte)中使用選單設定中的頁面類別(Page Class Suffix),為什麼要加上這個呢?如果你對CSS有一些基礎的認識的話,你一定知道,只要透過不同的CSS選擇器(css selector),就可以指定不同的元素,來指定不同的樣式,達到修改頁面的目的,不過由於Joomla是一套CMS,當你的佈景主題選項沒有特別指定不同的選單要套用不同的版型(template)的話,他基本上都會套用同一個設定,那麼當我想要A頁面和B頁面的樣式有些不同的話該怎麼辦呢?當然你可以透過佈景主題管理,把A頁面指定到A版型,而B頁面指定到B版型,不過這樣的話就得要安裝很多不同的版型,如果只是稍稍有些不同,例如,A頁面和B頁面的底色不同一點點小差異而已,卻要動用到兩個版型,其實很不划算,畢竟版型的檔案不同要下載的CSS、圖片也就都不同,今天就透過以下的教學來讓同一個版型可以加上不同的class,這樣的話就可以透過不同的選擇器來修改樣式了,而不用另外指定一個版型了。

適用版本:

  Joomla 2.5.x

作法:

  找到版型目錄中的index.php,通常會在網站目錄底下的templates/版型名稱/,在index.php中加上以下php code

<?php
$menus = &JSite::getMenu();
$menu = $menus->getActive();
$pageclass = "";

if (is_object( $menu )) :
$params = new JParameter( $menu->params );
$pageclass = $params->get( 'pageclass_sfx' );
endif;
?>

  這樣的話就會把$pageclass變數設定為選單設定裡面中這個選單的頁面類別(Page Class Suffix),然後找到<body>標籤,如果本來只有單純的<body>可以修改成下面的樣子。

<body id="<?php echo $pageclass ? htmlspecialchars($pageclass) : 'default'; ?>">

  這樣的話body這個標籤就會被加上對應的id,如果你在選單設定那邊沒有填寫的話,則body會被加上default的id。

這樣的話,在寫CSS的時候就可以透過

#pagea div

#pageb div

來區分頁面A和頁面B不同的樣式。

當然你也可以用以下的方法來載入不同的CSS檔,直接把頁面a和頁面b的css檔給分開管理,不過這樣的話就要多載入一個檔就是了。

<link rel="stylesheet" href="/templates/<?php echo $this->template ?>/css/<?php echo htmlspecialchars($pageclass) ?>.css" type="text/css"/>

總結

  如果是只有一些小地方的樣式要改變的話,就很適合用這個方法來做小幅度的變化,如果兩個選單的html結構根本就不一樣的話,建議還是直接套用不同的版型會比較省事,沒有哪個方法是一定好的,都得要是當時的情況做決定。

資料參考:Using the Page Class Suffix in Template Code