PHP開發架構Yii Framework教程(47) 主題 Theme 樣本

來源:互聯網
上載者:User

Theming是一個在Web應用程式裡定製網頁外觀的系統方式。通過採用一個新的主題,可以非常方便的改變應用的外觀。

在Yii,每個主題由一個目錄代表,包含view檔案,layout檔案和相關的資源檔,如圖片, CSS檔案, JavaScript文 件等。主題的名字就是他的目錄名字。全部主題都放在在同一目錄WebRoot/themes下 。在任何時候,只有一個主題可以被啟用 。

提示:預設的主題根目錄WebRoot/themes可被配置成其他的。只需要配置themeManager應用組件的屬性basePath和baseUrl為 你所要的值。

要啟用一個主題,設定Web應用程式的屬性theme為你所要的名字。可以在application configuration中配置或者在執行過程 中在控制器的動作裡面修改。

註:主題名稱是區分大小寫。如果您嘗試啟動一個不存在的主題, yii: :app()->theme將返回null 。

主題目錄裡面內容的組織方式和application base path目錄下的組織方式一樣。例如,所有的view檔案必須位於views下 , 布局view檔案在views/layouts下 ,和系統view檔案在views/system下。例如,如果我們要替換PostController的create view 檔案為classic主題下,我們將儲存新的view檔案為WebRoot/themes/classic/views/post/create.php。

對於在module裡 面的控制器view檔案,相應主題view檔案將被放在views目錄下。例如,如果上述的PostController是在一個命名為forum的模組 裡 ,我們應該儲存create view 檔案為WebRoot/themes/classic/views/forum/post/create.php 。如果 forum模組嵌套在另一 個名為support模組裡 ,那麼view檔案應為WebRoot/themes/classic/views/support/forum/post/create.php 。

本例通 過修改Yii Framework 開發教程(11) UI 組件 ActiveForm樣本 ,為它添加兩個主提,為簡單起見,兩個主題名字分別為 cyan,grey, 以其背景顏色命名。

首先在應用目錄結構下建立themes 目錄,然後建立cyan,grey 兩個子目錄,然後將缺 省的protected/views分別複製到兩個子目錄下,作為Theme的初始版本。

並使用Yii預設的Css定義,也分別拷貝到兩個 主題子目錄下,作為CSS的初始檔案。

下面分別對兩個主題下的CSS檔案稍微做些修改,以示區別,修改css/main.css 修 改body的背景色

body      {    margin: 0;    padding: 0;    color: #555;    font: normal 10pt Arial,Helvetica,sans-serif;    background: #00FFFF;}

分別該為Cyan和Grey的顏色。

然後修改layout/main.php 引用主題下的CSS檔案,在一個主題的視圖,我們經 常需要連結其他佈景主題資源檔案。例如,我們可能要顯示一個在主題下images目錄裡的影像檔。使用當前啟用主題的baseurl屬 性,我們就可以為此影像檔產生如下url

yii: :app()->theme->baseUrl . '/images/FileName.gif'

修改後的布局檔案如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <meta name="language" content="en" />    <!-- blueprint CSS framework -->     <link rel="stylesheet" type="text/css"         href="<?php echo Yii::app()->theme->baseUrl; ?>/css/screen.css"        media="screen, projection" />    <link rel="stylesheet" type="text/css"         href="<?php echo Yii::app()->theme->baseUrl; ?>/css/print.css"        media="print" />    <!--[if lt IE 8]>    <link rel="stylesheet" type="text/css"        href="<?php echo Yii::app()->theme->baseUrl; ?>/css/ie.css"        media="screen, projection" />    <![endif]-->     <link rel="stylesheet" type="text/css"         href="<?php echo Yii::app()->theme->baseUrl; ?>/css/main.css" />    <link rel="stylesheet" type="text/css"         href="<?php echo Yii::app()->theme->baseUrl; ?>/css/form.css" />    <title><?php echo  Yii::app()->name . ' ' . Yii::app()->theme->name;    ?></title></head><body><h1>Theme Name:<?php echo Yii::app()->theme->name;?></h1><?php echo $content; ?></body></html>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.