SourceForge.jp

チュートリアル

  ブログを作成する例を見ながら、以下を参考にちいたんフレームワークの何を、どのように使用するかを決定しましょう。

データベースを使う

  現在ちいたんフレームワークはmysql, postgresql, textsqlに対応しています(その他にも柔軟に対応可能)。 チュートリアルではmysqlでの説明をします。データベースの初期化は、フレームワークによって呼ばれる関数config_databaseによって設定します。 以下に例を示します。どのファイルからも参照できるようにconfig.phpというコンフィグファイルを作成してそこに関数を書きます。

config.php
<?php
function config_database( &$db )
{
    $db->add( "", "localhost", "user", "password", "dbname" );
}
?>

モデルを使う

モデルはテーブルを扱うクラスです。これを用意するだけでソースを書く必要が無くなります。試してみましょう。 まずブログ用に以下の様なテーブルを作成します。

CREATE TABLE `blog_data` (
  `id` int(11) NOT NULL auto_increment,
  `title` text NOT NULL,
  `body` text NOT NULL,
  `modified` timestamp NOT NULL
  default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  PRIMARY KEY  (`id`)
);

次にモデルを作成します。わかりやすいようにmodelsフォルダ内にでも入れておきましょう。

models/blog_data.php
<?php
class CBlog_data extends CModel
{
}
?>

あれ、何も書いてない…そうなんです。これだけでデータベースの読み書きが出来てしまいます。 どのように行うかは後のお楽しみ。びっくりするほど簡単です。では、このモデルを使用するために、config.php内にフレームワークから呼ばれる関数を追加しましょう。

config.php追加分
function config_models( &$controller )
{
    $controller->AddModel( dirname(__FILE__) . "/models/blog_data.php" );
}

ビューを使う

ビューは表示部分です。実際のHTMLを書きます。 HTMLを書くにはなんとこれだけの方法が用意されています。

  • PHPファイルに直接書く
  • smartyの用にPHPファイルとテンプレートを分ける(構文解析が無い分恐らく高速)
  • 全ファイル共通のテンプレートを用意し、コンテンツ部分をPHPファイルに直接書く
  • 全ファイル共通のテンプレートを用意し、PHPファイルとテンプレートを分ける

詳しくはマニュアルのビューにて解説しています。今回は4番目の全ファイル共通のテンプレートを用意し、 PHPファイルとテンプレートを分ける方法を使用します。

まず全ファイル共通テンプレートを用意しましょう。

template.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>ちいたんブログ</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body>
<?php print $this->content(); ?>
</body>
</html>

とまあ、こんなものでしょうか。DreamWeaverそのままですが。 今回の場合$this->content();のところに各ページのコンテンツが表示されます。

続いてブログを書き込むページを用意します。共通テンプレートを使用しているので中身だけです。

add.html
<form method="post" action="add.php">
タイトル<br>
<input type="text" name="blog/title"><br>
内容<br>
<textarea cols=40 rows=8 name="blog/body"></textarea><br>
<input type="submit" value="書き込み">
</form>

コントローラーを使う

コントローラーにより今まで作成したモデル、ビュー全てを連結し、動作させます。 ファイルは何の指定もなければビューの拡張子をphpに変えたものです。 まずは先ほどビューで作成したフォームにより、データを保存するプログラムがどれだけ少ないかご覧下さい。

add.php
<?php
    require_once( "config.php" );
    require_once( "cheetan.php" );

function action( &$c )
{
    if( count( $_POST ) )
    {
        $c->blog_data->insert( $c->data["blog"] );
    }
}
?>

blog_dataというモデルがここで使用されているのがおわかりでしょうか。 ビューでインプットの名前にblog/title等という変な名前を指定していたのは、 blog/で指定されているデータをコントローラ側で$data["blog"]の配列に 自動的に挿入するためでした。

こうやって必要なデータだけを配列に集め、insertします。

一覧表示

では書き込んだデータを一覧表示してみましょう。

view.php
<?php
    require_once( "config.php" );
    require_once( "cheetan.php" );

function action( &$c )
{
    $c->set( "datas", $c->blog_data->find() );
}
?>
view.html
<?php foreach( $data["datas"] as $data ){ ?>
<table>
  <tr>
    <td><?php print $data["title"]; ?></td>
    <td><?php print str_replace( "\n", "<br>", $data["body"] ); ?></td>
    <td><?php print $data["modified"]; ?></td>
  </tr>
</table>
<?php } ?>

このようにset関数によりビュー内で値を$dataとして参照することが出来ます。

データの編集

ではデータを編集してみましょう。

edit.php
<?php
    require_once( "config.php" );
    require_once( "cheetan.php" );

function action( &$c )
{
    if( count( $_POST ) )
    {
        $c->blog_data->update( $c->data["blog"] );
    }
    $c->set( "data", $c->blog_data->find( "id=" . $_GET["id"] ) );
}
?>
edit.html
<form method="post" action="edit.php">
タイトル<br>
<input type="text" name="blog/title"
 value="<?php print $data["data"]["title"]; ?>"><br>
内容<br>
<textarea cols=40 rows=6 name="blog/body">
<?php print $data["data"]["body"]; ?></textarea><br>
<input type="hidden" name="blog/id"
 value="<?php print $data["data"]["id"]; ?>">
<input type="submit" value="更新">
</form>

データの削除

ではデータを削除してみましょう。もうある程度予想がつきますね。

del.php
<?php
    require_once( "config.php" );
    require_once( "cheetan.php" );

function action( &$c )
{
    if( count( $_POST ) )
    {
        $c->blog_data->del( "id=" . $_POST["id"] );
    }
    $c->set( "data", $c->blog_data->find( "id=" . $_GET["id"] ) );
}
?>
del.html
<form method="post" action="edit.php">
削除してもよろしいですか?<br>
タイトル<br>
<?php print $data["data"]["title"]; ?><br>
内容<br>
<?php print $data["data"]["body"]; ?><br>
<input type="hidden" name="id" value="<?php print $data["data"]["id"]; ?>">
<input type="submit" value="削除">
</form>

まとめ

これで一通りブログっぽくなりました。このように非常に簡単にアプリケーションを作成することが出来ます。 もうフレームワークを使わないプログラムややモデルのないフレームワークなんて使う気になれませんよね?

大きなプログラムを作る時はCakePHP、小さなプログラムを作る時はちいたん。これが世界標準になるでしょう。(僕の)

 

ちいたんフレームワークにはもうちょっと便利な機能が用意されています。是非マニュアルを参考に色々と試してみてください。

サンプル

今回のチュートリアルを形にしたものはこちら