レイアウトの作り方で「カット」しておいた、くり抜いた中身を、app/views/pages/home.ctpに貼り付けます。

これで完成です

いや、ホンマに。


あとは、トップページに必要な正しいリンクとか、ビューとしての作法に置き換えていきます。

正しいリンク、というのは、例えばフォームのpost先やプログラムへのリンクを書き換えるということになります。

ビューの作法というのは、代表的なのは画像パスですね。レイアウトでやったcss同様に、パスが変わっていってしまうので、htmlヘルパーを使います。ヘルパーでいえば、フォームもフォームヘルパーを使う方がよい場合もあります。(使わない方がハンドリングが楽ということも...)

また、他のページで流用するようなパーツは、エレメントとしてまとめた方がメンテナンス性が上がるのは前回のエントリーで触れたとおりです。

このへんは、まだ書いてませんが、後にビューについて触れていこうと思います。


ちなみに、こうして(自分としては)丁寧に書いているのは、しばらく触れないといると簡単に忘れてしまうので、自分用に書いているだけです。

初心者の初心者による初心者のためのエントリーです。初心者とは私のことですが。


追記

書くつもりですっかり忘れていました。

この方法でトップページを置いた場合に、はまりやすいのが、PageTitleの設定です。
普通はアクションがあるので、そこで指定するのですが、このトップページはデフォルトページなので、この時点で何のアクションも発生していません。

いや、厳密には /cake/libs/controller/pages_controller.php が呼ばれていますが、ページタイトルを入れるためだけに、わざわざコントローラを作るのはスマートではありません。

もちろん、トップページでいきなり処理が必要な場合は、先のpages_controller.phpをコントローラにコピーして(どちらかを読むので、内包している必要あり)、必要な記述を加えればよいです。


ページタイトルだけなら、簡単に入れられます。

home.ctpの冒頭で

<? $this->pageTitle = 'ページタイトルです'; ?>

と宣言して下さい。これだけで、大丈夫です。

えっと、この辺からは他のサイトでも色々載っているので、間違いだらけの私が書いていくことはないんですが、過去、方方をググり続けて疲弊してしまった経験から、もしこのサイトにたどり着いた初心者の人が、少しでも楽になれば、ということで書いていきます。

なので、間違ってるかもしれんから、心して読みたもーれ。
(というか、間違いを見つけたら、コメントで指摘して下さい。お願いです。)


前回、トップページをカスタマイズするのに、home.ctpをいじるけど、そのまんまhtmlをつっこんだらアカンという話をしました。

これは、どんなページでも「レイアウト」というファイルを通じて表示をするからです。
このレイアウトというのは、俗にいうテンプレートです。DreamWeaver(以下DW)のテンプレートみたいなもの。表示するのに必要なベースとなるhtmlを記述します。そして、その中に「ここはシステムが書き出すところだよ」という情報を入れてあげることで、システムは常にそのテンプレート...もといレイアウトをベースにhtmlを生成します。

普通はレイアウトを作らないと、CakePHPデフォルトのレイアウトが使われる羽目になるので、作るのは作らないといけません。
レイアウトを使わない出力というのもできると思いますが、レイアウトは自由に切り替えができますから、とりあえずはレイアウトは使うものだと思っておいた方が、無駄な頭は使わずに済みます。


とりあえず、レイアウトの作り方。

views/layoutsにdefault.ctpというファイルを作ります。
まず、これにデザイナーに作らせたトップページを全部つっこんでしまいましょう。

これで完了です  あぅ( ̄▽ ̄*)☆α==(・・#)


このままでは、全てが決め打ちになってしまい、システムで更新できるところがありません。そこで、システムで更新する部分を置き換えていきます。

では、メタから触れていきましょう。

<?php echo $html->charset(); ?>
<title>
    <?php echo $title_for_layout; ?>
</title>
<?php
    echo $html->css('sample');
    echo $html->meta('icon');
    echo $html->meta('keywords','すごいサイトです。');
?>

上記のように記述すると、出力は次のようになります。

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Home</title>
<link href="/(webroot)/favicon.ico" type="image/x-icon" rel="icon"/>
<link href="/(webroot)/favicon.ico" type="image/x-icon" rel="shortcut icon"/>
<link rel="stylesheet" type="text/css" href="/(webroot)/css/sample.css" />
<meta name="keywords" content="すごいサイトです。"/>


$html->charset();

これで、文字コードを指定することができます。
もし、EUC-JPだったら、charset('euc-jp')となります。
というか、囲ってある文字をそのまま出すっぽいので、気にせずに、JISならcharset('ISO-2022-JP')、SJISなら、charset('Shift_JIS')とか、HTMLに出したいものをそのまま書いちゃえばいいです。


$html->css('sample');

ファイル名(拡張子なし)を入れると、webroot/cssの中のcssファイルを読みに行きます。
はい。ここで、webrootの存在価値がグッと上がるわけです。

「ビューを使って表示するのに、なんでwebrootがいるの?」と薄々思っていた人は、これですっきりして下さい。

webrootは、そこにhtmlを置くことで、スタティックなページを表示するのにも役立ちますが、cakeはどんどんパスが変わってしまうので、「絶対パスで書きたいけど、それもなぁ...」的なデータを集約することができます。

そのために、webrootのディレクトリには、cssとかimgとかのフォルダがデフォルトで入っているんですね。おまけで入っているわけではないので、うぜーって削除した人は戻して下さい。

さて、cssのディレクトリにあれば、パスが変わっても大丈夫というお話なのですが、はて、cssの中でimportしている場合はどうなるのでしょう。

答え。全部webroot/cssディレクトリに入れて下さい。
元々、cssはそうなってます。

@import "init.css";

などと書いておけば、読んだcssと同じディレクトリにあるinit.cssを読みに行きます。


では、既存のサイト上のcssを利用するにはどうしたらよいか。

そりゃ、直書きしかないんじゃないでしょうか。

$html->css('/sample')と書いても、/webroot/sample.cssにしかならないので、無理矢理書くなら、$html->css('/../sample')ですかね。この場合、マジメに/webroot/../sample.cssとなりますので、美しくないです。

やりかたはあるのかも知れませんが、今、私の置かれている状況では重要ではないので、ひとまず置いときます。


あとは、マニュアルのこのへんを見て下さい。詳しく書いてあります。



さて、システムが処理した結果を出力する部分は、次のようにコーディングします。

<body>
    <?php echo $content_for_layout; ?>
</body>

bodyには、普通グローバルナビゲーションとか、ヘッダフッタ、諸々関係先があると思いますので、システムによって可変にならない部分を決め打ちにします。

そして、「ここはシステムで可変になるぞ」というところを、カットして、他のファイル(とりあえず、どっかのテキストエディタ)に書き出しておきます。捨てずにそのまま置いておいて下さい。
そして、カットした跡地にそっと上記のようなタグを入れておくのです。

これで、レイアウトとしては、ここが可変領域だよ、ということになります。


DWと違って、可変領域(DWでいう編集可能領域)は、たぶん1つです。
そうなると、「共通パーツがあれも、これもあるのに、それはそれぞれのビューで書かないといけないのかー」というと、そうでもありません。

DWで「ライブラリー」というものがありますけど、これに近いもので、Cakeにはエレメントというものがあります。
エレメントに書いたコードは、ビューの中で何度も再利用ができます。当然、元を直せば全てが一括更新されますので、ビューに直書きするよりも効率的です。

美しいコード書きを目指すのなら、HTMLにも効率性を求めるべきです。


とりあえず、トップページをいじっている現段階では、エレメントは放置しますw

ええと、開発環境のこととかを書きたいのですが、ちょうとCakeで作る仕事があって、それをたどりつつ、今まで書きためたものを加えつつ書いていこうかと思うので、順不同です。

どうせ、それが揃うころまで誰も見に来ねーよ¬( ̄。 ̄¬)



さて、まずはトップページからいじってみる。
コントローラもモデルも書かないうちにトップページってww

いや、コントローラとかモデルとかは、散々他のトコで書かれていて、資料に事欠かないわけです。

ところがです。

例えばwwwrootsampleというディレクトリで、URLが
http://hogehoge.com/sample/だったとして、
http://hogehoge.com/sample/testctr/testfunc/paramというURLなら、
testctlというコントローラを呼び出して、その中のtestfuncにparamを引き渡す。
というのは、百も承知です。分からない人は、まずググれ。本を買え!


ところが、URLをいろいろ変えてみると、
http://hogehoge.com/sample/
のときだけ、CakePHPのページが表示されて都合が悪い。
http://hogehoge.com/sample/testctr/
なら、testctrの中のindexアクションを読みに行きますから、function index()って用意してあげれば問題ない。

これに詰まってしまうわけです。
最初僕がこれをやりたいと思ったときには、それなりにググりました。

私が最初に買った、某オレンジの本にも全く出てきません。(見落としてなければ)
それどころか優良書である、某ガイドブックにも出てきません。


これの解決策としては、
1)app/config/routes.phpの設定を変えて、wwwrootへのアクセスを強制的にどこぞやのアクションにつなぐ。
2)表示されるトップページを変更する。

まず、1の場合は、app/config/routes.phpを開くと次のような記述があるはずです。
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
これは、簡単に説明すると '/'(wwwroot)へアクセスしてきたものは、'pages'というコントローラの'display'アクションに引き渡します、ということですね。'home'というのは、たぶんパラメータとして渡しているんだったんじゃないかな、たぶん(爆

さらに訳すと、/でアクセスしてきた場合は、app/views/pagesの中のhome.ctpを開くようになっています。

なので、どこぞやのアクションを実行することで叶えられるなら、これが手間がかからず、ラクチンです。詳しくはidea*ideaの田口さんところのこちらでも参照して下さい。


2の方法ですが、1の解説で察しはついたでしょう。
そっか、app/views/pages/home.ctpを直せばええんやな。と。
ところが、

「開いたけど、そんなファイルないやん」
「ファイルがないのに、なんで、CakePHPのページは表示されとるんや」

という感じで(゚Д゚≡゚Д゚)?となってしまうと思います。


えっと、ここにCake(他は知らんw)の大きな特徴があります。

appにないコントローラとかビューは、コアに探しに行きます。

コアとは、appと同じ階層にあるcakeのフォルダに入っている、フレームワークのエンジン部で、通常は一切触らずに、アプリケーションごとのフォルダであるappの中を触ります。

で、cake/libs/view/pagesを開いてみてください。ありましたね?home.ctpが。
これを表示していたのです。

しかし、ここはコア。「このファイルを直せばええんやな」とは思ってはいけません。ダメ、ぜったいw

さっきいったように、app側になければ発動します。だから、app側にあればいいのです。
なので、一から(あんまりコアのhome.ctpをコピーする意味はないので)app/views/pages/home.ctpを作ればよいです。


しかし、これにそのまんまトップページのhtmlを入れてはいけません。
「レイアウト」というものが絡んできます。このあたりの仕組みは次の機会に。

ちなみに、さっきのroutes.phpで、「'pages'というコントローラの'display'アクション」につなげていましたが、app/controllerの方にはpagesというコントローラは影も形もありません。こちらも同様に cake/libs/controller にpages_controller.phpがあって、function display() というのが確かにありますね。

繰り返しますが、コアは触らない(更新しない)のが原則です。注意してください。

まぁ、僕に注意を促されても、説得力に欠けると思いますけどw
今まで(といっても2エントリーやん)、ある程度まとめた文章を書いてきましたけれども、本来は、圧倒的に「嘆き」が多いです。というか、そのはけ口と、解決策が見つかったときの備忘録、というのがこのブログの主旨です。


というわけで、


デプロイってどうすんねん。


分かった振りして書いているので、「phpでデプロイって( ´,_ゝ`)プッ」って感じかも知れませんがw

僕がやりたいのはですね、ローカルにプロジェクトを作りました。
さて、サーバで動かしてみましょうっていうときに、アップデートしたファイルをアップロードして、ブラウザで表示したい、ってことです。


そりゃ、FTPの設定してやんねん。

という事なかれ。


えっと、今僕のマシンにはローカルにはapacheを入れていません。
そしてアップしたいのは「隣に置いてある」開発用のWindowsサーバです。

このサーバでテストしたいねんけど、
FTPが入ってないねん。


デバッグ環境はどうあるべきか、というのが、やり方がよく分からない課題で、ローカルにあんまり常駐をいれたくないとか、やっぱり本番環境に近いテスト環境でやりたいとか、そういうことに対して、ローカルにxamppで入れて環境ばっちりっていうのは、なんか違う感じがする。


まぁ、デバッグという点では、ローカルにphpが必要であったり、結局はapacheがあった方がいいとか、結果論としては、賛成できます。だけど、これでしかできないというのは納得がいかない。

Cakeなので、基本的に「実行」してみるときって、そのphpを実行ではなくて、とりあえずトップページとか表示してくれたらいいと思うのね。なので、「実行」ってやったら、サーバへデプロイして、指定のトップページを表示してほしいんだが。(まぁ開かなくてもいいけど)



結局、時間オーバーで断念。

PDTと設定が違う上に、aptanaでのPHPプロジェクトの作成からデプロイまでの流れを説明したサイトが見つからなかった。

SMBでwwwrootが共有状態にあるので、仕方がなく、該当フォルダをプロジェクトとして割り当てることにした。(インポートでなく、サーバ上にプロジェクトを置く。)


参考、というかサーバ上に直接プロジェクトを置く、という発想がなかったので、そのヒントにさせていただいたのが、Aptana StudioをインストールしてPHP開発環境を作るです。


でも、これスマートじゃないっていうと怒られそう、というかMAMPだからとかそういうことかもしれないんですけど、やっぱりローカルにソースがあって、然るべきタイミングでデプロイっていうのが自然な流れのような気がするんですけど、みんなどうしてるんでしょうか。

デプロイのところは、エクスプローラ操作とか(FTPならaptanaでいいといえばいいので、FTP以外の場合)でやってるんでしょうか。

こちら(PHPサーバーの設定)を見ると、いかにも、URLと公開ディレクトリの設定があるように見えるんですが、Aptanaには見あたらない。。。


ううむ。。。


※Aptanaはスタンドアローン版をインストールしております。
1ヶ月の沈黙を経て、帰ってきたYO!

この間にメキメキ上達していたか、というとそれはナイ

はっきりいって、全く別の仕事をしてました。

よって、CakePHPなんて、

すっかり忘れました(´ー`)y-~~


いや、ホント、記憶力がないんですって。


そのまま触れなくて済めばいいんですが、やっぱり仕事はやってくるわけで。
というか、放置していたわけで。。。


ふぅ。



PHP開発をAccessと比較せざるをえないイタイ経歴はさておいても、開発環境は結構悩ましい問題だと思います。

ましてや、Accessから移行だと、辛くて仕方ないかと(;´д⊂

基本的には、エディタとFTPとサーバがあればできちゃうわけなので、話題としては実質的なプログラミングの情報が中心のことが多いです。
開発環境は、個人の好みがモロに出るので、「これを入れて下さい」という標準がありません。

単一のIDEしかない環境で開発した者としては、(゚Д゚≡゚Д゚)?となるわけです。


そもそもが、オブジェクトを配置してグリグリ動かして、コードを載せる、というスタイルではないので、プログラミングとは、全く違うことをしているような気になります。
もともとのコンパイル型の言語を扱ってくれば、実はそんなに違いはないと思うんですけど、なんせこっちはBASICマンセーでs(ry

僕の場合は、下地としてスタティックなサイト制作の経験がありまして、いわゆるWeb標準で、cssレイアウトとかもやりまして、画面を作るところには苦はありませんが、そのへんかたスタートだったら、もう大変でしょうね。

うちも、以前契約した派遣エンジニア(新人)も、phpは書けるのに、HTMLがよく分かりませんっていわれて( ゚Д゚)ポカーン としたことがありますもの。

が、このブログはAccessディベロッパーがphpに移住するためのガイドではナイので、そのへんは、各自、身につけて下さい。(<誰にいってんの)


で、僕のようなウェブ制作をやってる人は、環境として一番手っ取り早いのは

DreamWeaver

ktkr!<使うとこ違うやろ

やっぱり慣れたツールだし、サイトの定義だけしておけば、ctrl+shift+Uのショートカットですぐにアップロードできちゃうし、楽勝!


しかし、ある日「面倒くさい」と思うようになりました。



だって、
DreamWeaverの面倒くさい画面使わないフォルダばっかりでてくる
んですもの。

フォルダを行ったり来たり、面倒w


そこで、
UltraExplorer

なんといっても、ウルトラですよ。

進めているプロジェクトのフォルダをお気に入りに並べれば、なんとスマート!(≧∇≦)

UltraExplorer



しかし、待てよですよ



こうして、テキストエディタに戻るのが、本当に正しいのだろうかと。


だって、ググったらEclipseとかPDTとか騒がれてるじゃん。


やっぱり(・∀・)イイ!!とか書いてあるじゃん。


というわけで、乗り換えてみることにしました。



aptanaに。



つづく(うだうだだーだ¬( ̄。 ̄¬))

プロローグ

| | コメント(0) | トラックバック(0) |
サブタイトルにあるように、私が今まで触れてきたのはAccess VBAです。
Mac使いなので、REALbasicでデータベースアプリも作ってきたんですが、「それって何?」から始まるので割愛しますw

とにかく、重要なことは

Webではない

これ、大きな違いです。
私のように、Web以外から入ってくる人は、全員肝に銘じなければならないのは、「セキュリティ」の問題です。

いかんせん、Accessだ、Rbだといっても、所詮はローカル環境。温室ですから、違う意味の負荷テストはあっても、耐性テストなんぞ、全くしていません。
ですから、相当にセキュリティについては、気に掛けないと、とんでもないことになってしまいます。

もちろん、Webシステムにおいては、サーバのセキュリティというのも課題でして、私もLinuxやらWindowsやらOSX ServerやらSolarisやら、それなりに色々なサーバのセットアップなりメンテナンスなりやって、ファイアウォールから光ファイバーのネットワーク設計までしたりしましたが、とりあえず、そんなことはほっときます(←何で書いたの)


どっかに書いてありました

「初心者がフレームワークを使おうとは思わない」

いやいや、初心者だからこそ、フレームワークを使おうと思ったわけです。

機械語(古)でプログラムをミスると、コンピュータが停止します。
BASICなら(笑)、エラー表示して止まるだけです。回避策を講じれば止まりもしません。

例えが悪いか(´Д`;)

つまり、一から書くとセキュリティーホールが発生しやすいのではないかと思い、なるべくフレームワークを使えば、少しでも耐性が上がるのではないかと。


もちろん、フレームワークを使えば、セキュリティは万全(≧∇≦)
なんて思っていたら、あっという間に涙することになるでしょう。

BASICだっt(ry


まぁ、この考え方が正しいのかどうかすら、今のスキルでは分からないのですが、むしろ素でPHPに取り組むよりも、相当にうなされておりますw

ただ、当然フレームワークのメリットである、ラピッドな(古い?)開発というのも目的として入ってますから、習得した日には、一粒で二度も三度もおいしい思いができるだろう、ということだけ信じて取り組んでおります。

いや、信じさせてヽ(´ー`)ノ


というわけで、この文章はプロローグとして、文章らしいエントリーになっていますが、これからは、文章の体(てい)すらしているかどうか。


なんせ、私、記憶力が悪いんですよ。

困って、調べて、試して、やっとできたどー、と思っても、数日で忘れてしまいます。それの備忘録としてアップして、それが、もしかして誰かの役に立てば、なんてそんな思いです。

いや、相当に「なんでもいいから情報くれぇ」という状態をさまよってますから。きっと同じ気持ちの人がいるはずw


ちなみに、「それは違うぞ」とか「セキュリティが」というときは、ぜひコメントを残していって頂けると嬉しいです。ググレカスでも結構です(せめてキーワードきぼん)


というわけで、私の苦痛の叫びをお楽しみ下さい<無理
ブログ立ち上げた最初のエントリーがイベント紹介というのも、実効性に疑問ですけれども、とりあえず、「おぉ」って感じなので、書いております。

来る10月25日に、国内初のCakePHPカンファレンス東京が日本PHPユーザ会主催で行われます。

近年、注目の高まっているWEBアプリケーション開発フレームワーク『CakePHP』を題材とした国内初のカンファレンスを2008/10/25に東京 にて開催致します。CakePHP開発マネージャ Garrett J. Woodworth氏をアメリカよりお招きし、最新の動向についてご講演頂きます。CakePHPによるWEBアプリケーション開発の最先端の動向を知る またとない機会としてみなさんのご参加をお待ちしております。
ってことらしいのですが、Woodworthさんとやらも知らないぐらいのレベルなので、果たして自分が参加できるレベルなのだろうかと(汗

でも、知らないからこそ、CakePHPに乗っかって大丈夫なんだろうかとw

演題に
国内でのCakePHPの利用状況について
を見つけた瞬間に、コレだとw

日頃Webコーディングやディレクションのセミナーとかにはよく参加しますが、プログラム開発系にはほとんど参加したことがありません。
CakePHPを安心して乗っかれるように、不安を解消できるカンファレンスだといいなぁと思っています。

ちなみに、本日10/7の13時から70名、明日10/8のの19時から70名の計140名の募集になりますが、本日の分はわずか10分で完売(売ってないけど)

僕も画面の前に待機して、open後、即参加申込しましたが、それでも5番目。
いったい誰のコンサート?状態ですね。

たぶん、僕レベルの人はあんまり参加してない気もしますが、申込が間に合わなかったギークの方々の分まで、しっかり聞いて参ります。


いやいや、明日も申込受け付けています
申込はこちら(http://events.php.gr.jp/events/show/55)のページからになります。

もしかしたら、今日より激しいかもしれませんなー。
とりあえず、高みの見物盛況ぶりをこの目で確かめてみたいと思います。