2008年3月25日 星期二

CakePHP 1.2 第一個程式,換掉CakePHP說明首頁。

前提:你已經做好相關設定,如果還沒有的話,請見:CakePHP 1.2 簡易安裝與設定

I. CakePHP 目錄說明:

在寫程式之前,先了解CakePHP是如果安排程式的目錄。基本上,1.1版和1.2版沒有什麼差別。

  • app
  • cake
  • docs
  • index.php
  • vendors

app: 主要是放你網站的程式與靜態的html網頁。

cake: CakePHP的核心程式,當有問題時,也可以到這邊來拆解CakePHP的程式;因為目前CakePHP的說明還不是非常的完整,有時會需要用拆解程式的方式來了解如何使用。

docs: 顧名思義,就是放一些CakePHP的說明文件。

vendors: 如果你有使用其他open source的套件,可以放在這個地方。

app內的目錄:

config: 放設定檔的目錄,可以參考 CakePHP 1.2 簡易安裝與設定
controllers: 放controller程式的目錄,不懂什麼是Controller? 請參考:CakePHP說明 - Controller
locale: 放多國語言的訊息設定檔,這個也是CakePHP 1.2 的新功能。
models: 放model 程式的目錄,不懂什麼是Model? 請參考:CakePHP說明 - Model
plugins: 放別人寫好的CakePHP程式。
tmp: 顧名思義,放一些暫存檔的目錄,有 log, cache 等。
vendors: 同上面的vendors。

views: 放網路程式版型的目錄。請參考:CakePHP說明 - View

webroot: 放靜態網頁的目錄滿,包含圖片, javascript, css等。

參考網頁: http://book.cakephp.org/view/19/cakephp-file-structure

II. 開始你的第一個程式:home_controller.php

首先在 your_cakephp1.2/app/controller 下產生一個檔名是 home_controller.php (為何是 程式_controller.php 方式命名?這是cakephp的規則,請照做!),內容如下:

<?php

class HomeController extends AppController {
public $name = 'Home';
public $uses = null;

// 首頁
public function index() {

}// end index

}

?>

在 your_cakephp1.2/app/views 下,產生一個目錄是 home,在 your_cakephp1.2/app/view/home/ 下,產生一個檔名是 index.ctp (註:1.1的副檔名是.thtml,1.2是 .ctp)。index.ctp內容如下:

<div>

<?php

echo 'hello world';

?>

</div>

程式完成後,請到 app/config下,修改 routes.php 把預設的 Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); 改成 Router::connect('/', array('controller' => 'home', 'action' => 'index', 'index')); 下面另外兩個設定,基本上也不需要了,可以把它們註解!

完成上面的步驟,再重新訪問你的網站,就可以看到你首頁的內容了。不過版型還是很奇怪,主要是因為現在的版型外框還是套用cakePHP的版型。請copy一份 your_cakephp1.2/cake/libs/layouts/default.ctp 到 your_cakephp1.2/app/views/layouts下。原本的 default.ctp 內容如下:

<?php

/* 一堆註解... (省略)*/
?>
<!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">
<head>
<title>
<?php __('CakePHP: the rapid development php framework:'); ?>
<?php echo $title_for_layout; ?>
</title>
<?php
echo $html->charset();
echo $html->meta('icon');

echo $html->css('cake.generic');

echo $scripts_for_layout;
?>
</head>
<body>
<div id="container">
<div id="header">
<h1><?php echo $html->link(__('CakePHP: the rapid development php framework', true), 'http://cakephp.org'); ?></h1>
</div>
<div id="content">
<?php
if ($session->check('Message.flash')):
$session->flash();
endif;
?>

<?php echo $content_for_layout; ?>

</div>
<div id="footer">
<?php echo $html->link(
$html->image('cake.power.gif', array('alt'=> __("CakePHP: the rapid development php framework", true), 'border'=>"0")),
'http://www.cakephp.org/',
array('target'=>'_new'), null, false
);
?>
</div>
</div>
<?php echo $cakeDebug; ?>
</body>
</html>

其實index.ctp,可以當成是.php程式,可以有html和php程式碼。

Header內的程式碼:

<?php __('CakePHP: the rapid development php framework:'); ?> 這一行可以刪除,網頁的title總不能顯示不是我們網站的訊息吧。

<?php echo $title_for_layout; ?> 建議保留,如此一來,每個Controller的action可以自行定義網頁的title。當然如果不需要的話,也可刪除,直接填上你的網站title。
echo $html->charset();
建議保留,會去讀取 core.php 的App.encoding設定(預設是UTF-8)。

echo $html->meta('icon'); favicon 設定,可以刪除,改成自己的

echo $html->css('cake.generic'); css 設定,可以刪除,改成自己的。

echo $scripts_for_layout; javascript 程式,可以刪除。


Body內的程式碼:

除了 <?php echo $content_for_layout; ?> 外,其他都可以替換成自己的內容。<?php echo $content_for_layout; ?>主要是CakePHP處理版型時會用到的,也就是顯示剛剛的index.ctp內容的地方。另外,<?php echo $cakeDebug; ?> 也建議保留,在開發模式(core.php中的 Configure::write('debug', 3))時,會顯示所有的變數內容,當改成release模式時(core.php中的 Configure::write('debug', 0)),這裏是不會顯示任何內容的!

如果完成上面的步驟,已經改寫首頁了!

參考內容:

我之前的文章(CakePHP 1.1版本)

CakePHP 說明 - 什麼是MVC架構

CakePHP說明 - Controller

CakePHP說明 - Model

CakePHP說明 - View

張貼留言