2006年07月11日

$this->Set()命令のミステリー

CakePHP はMVC(モデル、ビュー、コントローラ)を分離させる(つまり別々のファイルに分ける)システムです。ですから当然、モデル⇒コントローラ⇒ビューと、データを渡していく必要があります。

仕事を3人で分けたら、必ずそこにコミュニケーションが発生するのと同じです。この3者をつなぐ電話のようなものは何でしょうか。

1)モデルからコントローラへは?

  チュートリアルなどにもかかれていますが、コントローラがモデルの情報を知りたい場合には、
  
class PostsController extends AppController
{
    この中で、
    $result = $this->Post->findAll();
    などのようにして、Postモデルの情報を受け取ることができます。
}

2)コントローラからビューには?

 ここで登場するのは、
 $this->set('変数名', データ); という構文です。コントローラでこれを設定すると、ビューの中でデータが取り出せます。

 注意してほしいのは、

 $this->set('nanika', "これはデータです。"); などのようにすると、

 ビューからは、

echo $nanika;

 として取れるということです。つまり、「set命令でデータをセットすると、ビューの中では変数の名前になる」ということです。また、変数でも配列でも何でも渡すことができます。

Cやその他の言語では、この「データが変数に化ける」という使い方はあまりしないと思うので、最初、戸惑うところかもしれません。また、PHPらしいところをうまく使っていると言っていいかもしれません。CakePHPにはキャッシュの機能もありますので、これと組み合わせると、Smarty などの外部のテンプレートシステムを使用する必要がないほどです。

内部的にはどうやって実現しているかというと、view.php の中に、

extract($___dataForView, EXTR_SKIP);

という文があります。ここでデータを変数に展開しています。

そういえば Ruby には extract に似た関数があるのかな、と思い調査したところ、そんなに簡単ではなさそう?でした。
http://www.html.com/forums/ruby/48892-extract-hash-into-local-variables.html

Ruby の方、Rails では、このあたりがどんな具合になっているんでしょうか……?

*追記*

3)ビュー(送信フォーム)からコントローラには?
これはちょっとヒントだけ書いておきます。考えてみてください。
マニュアルのブログ・チュートリアルを見ると、

function add()
{
  if (!empty($this->data))
  {
    if ($this->Post->save($this->data))
    {
      $this->flash('Your post has been saved.','/posts');
    }
  }
}

とあります。 $this->data の中にデータが入っている場合には、データベースに登録する、ということは……。また、フォーム(ビュー)のほうでは、
<?php echo $html->input('Post/title', array('size' => '40'))?>
と書いてありますね……。

また今度、この辺を詳しく解説してみます。




    
posted by SDozono at 13:11| ロサンゼルス 🌁| Comment(3) | TrackBack(0) | CakePHP Controller | このブログの読者になる | 更新情報をチェックする

CakePHP用ビジネス向け無料テンプレート10種類

やはり、開発をはじめる最初の画面は大切です。先日、Contented Designs のオープンソース・デザインを使用した CakePHP のテンプレートを公開したところ、大きな反響がありました。やはり、PHPフレームワークに求められていることは、次の段階に達しているのかな、と思います。つまり、機能やエンジン部分だけでなく、そこにのっかるデザイン・外観の情報も、フレームワークの選定に大きな影響を与えるようです。

CakePHPを利用したビジネスサイトの構築用に、ビジネスっぽいオープンソースのテーマをCakePHP の default.thtml としてポートしてみました。CakePHPでのビジネスサイト構築を検討なさっている方はたたき台としてご利用ください。
もちろん、MVC分離システムなので、後からの変更も非常に簡単です。
simplyBusiness.PNG

閲覧・ダウンロードはこちらからどうぞ。
http://cakephp.seesaa.net/article/20603204.html

インストールは非常に簡単で、
1)CakePHP をダウンロード、サーバに解凍
2)
  default.thtml    は、 app/views/layouts に置く。
  *****.css      は、 app/webroot/css  に置く。 
  css_images の中のファイルは、 app/webroot/css/images にコピー。
  webroot_imgの中のファイルは、 app/webroot/img にコピー。

CakePHP のURLを見ると、そのテーマに変わっているはずです。
*そうそう、初期状態では UTF-8 になっていますので、お使いのコードに変更してください。default.thtml の中にあります。*

(なお、PHPによるビジネスサイト構築のお問い合わせは、
http://www.cba-japan.com までどうぞ。多言語展開コンサルティング[特に英語、ロシア語、タイ語がメインです。中国語などもOK]やローカライゼーション、システム開発などを行なっています。)




posted by SDozono at 12:42| ロサンゼルス 🌁| Comment(0) | TrackBack(1) | CakePHP template | このブログの読者になる | 更新情報をチェックする

10 Free Business Templates for CakePHP

These template designs are from http://www.oswd.org, Open Source Web Designs.
I picked up some designs especially looks suitable for business use, and changed to default.thtml of CakePHP. You can start your WEB development with business-style designs at once!

Usage:

1) Unpack the zip.
2) put the files:
default.thtml -> app/views/layouts
*****.css -> app/webroot/css
files in css_images -> app/webroot/css/images
files in webroot_img -> app/webroot/img

3) go to your cake URL. You will have new theme!

(Thanks all the designers who released their designs as open-sourced!)

*from 2006/12******************************
from new version of CakePHP (1.1.11.4064),
you need to change one line:

if ($this->controller->Session->check('Message.flash')) $this->controller->Session->flash();

to

if ($session->check('Message.flash')) $session->flash();
*******************************************

andreas02.PNG
andreas02.zip

bermuda_01.PNG
bermuda_01.zip

doctors_office.PNG
doctors_office.zip

internet_services.PNG
Internet_Services.zip

internet_jobs.PNG
Internet_Jobs.zip

nautica01.PNG
Nautica01.zip

nautica02.PNG
Nautica02Liquid.zip

plain.PNG
plain.zip

lazydays.PNG
lazydays.zip

simplyBusiness.PNG
simplyBusiness.zip
posted by SDozono at 04:58| ロサンゼルス 🌁| Comment(2) | TrackBack(0) | CakePHP template | このブログの読者になる | 更新情報をチェックする
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。