| 1 | 2 | Next»
Category: ethna超入門
Posted by: TanaT
はい、と言うわけで、ここまでやった内容は
・環境作り
・add-project
・add-actionとactionの振る舞い
・add-view -t とviewの振る舞い、テンプレート
・add-app-objectとapp-objectの振る舞い
と言うことでした。

今の状態でも、閲覧がメインのアプリケーションなら作れるはずですが、
重要な要素が足りていません。

・フォーム値の取得

です。
普通にPHPで書くと
$_POSTとか$_GETとか$_REQUEST
で取得できるやつですね。

Ethna公式だとこのへん

今日やること


・Ethnaでフォーム値を取得する
・フォーム値を使って、挨拶を挿入してみる。

今日やらないこと


・af->validate()の使い方
・フォームヘルパーの使い方

前提


その1 phpで$_GET,$_POST等のフォーム値にアクセスしたことがある
その2 mysql_query("SELECT * FROM `USER` WHERE `id` = $_POST['id'] AND `password` = $_POST['pw']");
というコード(*ヴァリデートしてないとする)のやばさが
・サニタイズの観点
・ヴァリデーションの観点
から理解出来ていること。

とりあえず、追加機能を作ってみる


とりあえず追加をしてみて、その解説を行ってから他の操作を作っていくことにしましょう。
本来であれば2つのアクションに分けるべきですが、フォーム値の取得の理解のため、一つのアクションで作ってみます


専用のactionとviewを作る


今までと同じく、既存のactionを修正するのもありですが、復習を兼ねてactionとviewを追加することにします。
・挨拶を追加するということをしたいので、greeting_registerというactionとviewを作ることにします。
作り方は、コマンドプロンプトを開いてプロジェクトのフォルダに移動して
ethna add-action greeting_register
ethna add-view -t greeting_register
です。
*action(がapp/action/Greeting_register.phpではなくapp/action/Greeting/Register.phpとして生成されていることを覚えて置いて下さい。(viewも))
*action名、view名にアンダーバーを使うと、アンダーバーでフォルダが区切られます
*現在はまだ意図的に出していませんが、greeting_register greeting_register_do などとアクションを分けて作る際に便利な機構です。

フォーム値を受け取る方法


Ethna では、フォーム値は必ずアクションフォームを通じて受け取ることになっています。
また、アクションフォームを触るのは、action(+view)からのみとするのが望ましいとされています。

具体的にはこんな感じでaf->get()を使います。
$this->af->get('フォームのname')

実際にフォーム値を受け取る


では実際にフォーム値を受け取ってみましょう。
とりあえず挨拶の追加が出来ればいいので、
文字列のwordというフォームを受け取ることにします。
フォーム作るのは面倒なので、getでword=helloと送ることにします。
http://localhost/helloethna/www/?action_greeting_register=true&word=hello
こんな感じですね。

で、フォーム値は$this->af->getで取得出来るらしいので、こんな感じ?
/app/action/Greeting/register.php

function perform()
{
echo $this->af->get('word');
return 'greeting_register';
}


うまくいってれば、
http://localhost/helloethna/www/?action_greeting_register=true&word=hello
にアクセスするとタイトルの上にhelloと地味に出るはすなんですが
これだとダメです

今度こそ実際にフォーム値を受け取る


上記コードで動かない理由は
・Ethnaでフォーム値を受け取るには、あらかじめどんなフォームがあるかを定義しておく必要がある。
からです。*主な理由はセキュリティ上の問題から

なので順番としては
・どんなフォームがあるか定義する

フォーム値を受け取る
と言った流れになります。

ではどんなフォームがあるかを定義してみましょう。
フォームの定義はactionクラスのプロパティ$formで定義されます。
/app/action/Greeting/register.php

こんな感じにすればとりあえず受け取れます。
その他にも色々機能があるんですが、それは次回以降で。

上記コードを入力してから再度
http://localhost/helloethna/www/?action_greeting_register=true&word=hello

にアクセスして、最上部にhelloと表示されれば受け取れてます。
もちろん
http://localhost/helloethna/www/?action_greeting_register=true&word=test
とすれば、helloの代わりにtestが表示されます。


フォーム値を受け取って、レコードの挿入をしてみる


前回行った、app-objectを使ったレコードの挿入方法は
1.空の(挿入するテーブルに対応した)app-objectを取得
2.必要なデータをsetする
3.app-object->add()
といった流れでした。

今回はフォーム値から挿入するデータを受け取るので、
2.必要なデータをsetする
の部分が変わりますね。
こんな感じ
app/action/Greeting/Register.php

http://localhost/helloethna/www/?action_greeting_register=true&word=test
にアクセスしたあとDBを確認して、wordがtestなレコードが出来てればOK
不安なら
http://localhost/helloethna/www/?action_greeting_register=true&word=test2
でtest2が挿入されるか確認してみて下さい。

フォーム値の取得の方法の流れはわかったでしょうか。

ただ、これだけだと、actionフォームを使う意味があんまり見えないと思います。
なので、次回はaf->validate()使い方あたりをやってみようと思います。

今回はこんなところでー。








実は、Ethnaでも普通に$_GET等でフォーム値を受け取ることが出来ま
す。が、決してしてはいけません
例えばこんな感じ
/app/action/Greeting/Register.php内で

function perform()
{
    //決してしてはいけない
print_r($_GET);
     return 'greeting_register';
}

のような感じにして、
http://localhost/helloethna/www/?action_greeting_register?id=test
にアクセスして、
Array ( [action_greeting_register] => true [id] => test )
表示されることで、確認できます。






Category: ethna超入門
Posted by: TanaT
app-managerについてはあとでやります

二回目なのに初めてとはこれいかに?

ということで、app-objectの二回目です。

今回やること
・actionでapp-objectを使ってデータの取得
・actionでapp-objectを使ってデータの挿入
・actionでapp-objectを使ってデータの更新
・actionでapp-objectを使ってデータの削除
今回やらないこと
フォームからの入力値を使ってデータの挿入・更新・削除をすること。


actionでapp-objectを使ってデータの取得


前回はviewでデータを取得したので、今回はactionでデータを取得してみましょう。
*viewでデータを取得するのとactionでデータを取得するのとどっちが正しいかは設計思想/規約次第です。とりあえずどっちでも取れるようにして置いて下さい。


では、復習なので、問題
前回のviewのソースを見ながら、書いてみて下さい。
1.actionでIDが2のレコードをapp-objectとして取得する
2.1で取得したオブジェクトのデータを配列で取得
3.2で取得したデータをafに 'greetingWordAction'というキーでsetAppする。
4.テンプレートファイルで表示する。

・ id:2
・ word:hello
と表示されればOK!

答えはこっち(*そのうち書きます)

actionでapp-objectを使ってデータの挿入


app-objectはO/Rマッパーだと前回説明しましたが、ここまでは
データベースのレコード→オブジェクト
R→O
のマッピングしかしていません。

次は、O→Rのマッピングを行ってみましょう。
要は、
・SQLを書かずにデータを挿入する
です。

順序としては
1.空のapp-objectを作る。
2.app-objectに必要なデータをセットする。
3.app-objectの機能を使ってDBにデータを挿入する。
です。

/app/action/Greeting.phpを
こんな感じにすればOK


で、
http://localhost/helloethna/helloethna/www/?action_greeting=true
に一度アクセスしたあと、phpmyadmin等からDBの内容を確認してレコードが増えてればOKです。

解説


1.空のapp-objectを取得する
$this->backend->getObjectの第二引数以降を渡さなければ空のapp-objectが取得出来る

2.app-objectに必要なデータをセットする。
app-objectのset()を使うと、必要なデータをセットできます。この場合
set('フィールド名','値');
の形で使えばOK

3.app-objectの機能を使ってDBにデータを挿入する。
add();
add()を使うと現在セットされている内容でinsert文が実行されます。

ということで、SQLを書かずにレコードを追加することが出来ました。

同じノリで更新と削除についてもやってしまいましょう。
http://ethna.jp/doc/Ethna/Ethna_AppObject.html
を見てそれっぽいメソッドを探してみます。

更新


http://ethna.jp/doc/Ethna/Ethna_AppObject.html#update
update()がそれっぽいですね。

ここの説明だけじゃよくわかんない人も居ると思いますが、
多分使い方としては、
1.空じゃないapp-objectを取得する。
2.変更したフィールドの値をセットする
3.update()で更新される。
だと予想できます。

やってみましょう
greetingActionを書き換えてきましたが、本来はactionを変えるべきです。でもここではapp-objectの理解を優先して/app/action/Greeting.phpを書き換えます


こんな感じにして、
http://localhost/helloethna/helloethna/www/?action_greeting=true
にアクセスしてデータが更新されればOK!
viewでidが1のデータを取得しているはずなので、表示されるデータが変わるはずです。


削除


http://ethna.jp/doc/Ethna/Ethna_AppObject.html
削除だからdelete()か?と思いつつ探してみるとdelete()というメソッドは無いようです。
その代わり,remove()がそれっぽい動作をしてくれそうです。
やってみましょう。
多分、こんな流れ
・空じゃないapp-objectを取得
・app-object->remove()でレコードが消えちゃう
ソースはこんな感じ


http://localhost/helloethna/helloethna/www/?action_greeting=true
にアクセスして、viewで取得したデータが表示されなければOK!
一応phpmyadminとかでレコードが消えてるかを確認して下さい。
Category: Ethna入門補助
Posted by: TanaT
っと言うわけで、ここではDBの設計について軽くやります。

DB設計といいますが、まずはアプリケーションの設計をしないといけません。

順番としては
アプリケーション外部設計(何をするか)

アプリケーション内部設計(どうやって実現するか)
です。

DB設計は内部設計に属するので、まずは外部設計を行います。

どんなアプリケーションを作るか


その1→・ソース内でIDを指定したらそのIDの挨拶が表示される。
その2→・フォームからIDを指定したらそのIDの挨拶が表示される。

どんなDBにしたら実現できるか?


IDを指定したら挨拶が出てくればいい

↓ので

・IDが一意の値であること
・挨拶本文が存在してること
を実現させて、
こんな感じのテーブルが1個あるテーブルにします。



次は
phpMyAdminでDBを作ってみます。


Category: ethna超入門
Posted by: TanaT
どうもー。
というわけで、今日はapp-objectについてやってみたいと思います。

前提やらなんやらは、第一回を参照して下さい。

今日のメニュー
・app-objectについて知る
・EthnaからMySQLを使う準備をする
・app-objectを使ってみる
とします。

app-objectについて知る


app-objectってなに?


・Ethnaが提供するO/Rマッパーです。
・端的に言うと、SQLを書かなくてもDBの操作を出来る様にしてくれるオブジェクトです。
詳細は
http://ethna.jp/ethna-document-dev_guide-appobj-overview.html
を見てください。

まずはDBの設定


app-objectはオブジェクトとリレーションテーブルのマッピングを行ってくれるオブジェクトなので、
データベースを使わないことには意味がありません。
なので、まずはEthnaでDBを使用する設定を行います。


DBの設定とは?


ここで言うDBの設定とは3種類あります。
・DBの設計と構築
・DBユーザの設定
・EthnaからDBに接続するための設定
です。
一つづつクリアしていきましょう。
RDBMSはMySQLです。

DBの設計と構築


詳細はこちら
phpMyAdminで作る時はこっちで
テーブルが1個だけあるテーブルを作ることにします。


設定だけしたい人は
ローカルのphpMyAdmin
から特権→SQLで下記のSQLを実行してください。



CREATE DATABASE `greeting` DEFAULT CHARACTER SET ujis COLLATE ujis_japanese_ci;
CREATE TABLE `greeting`.`greeting_word` (
`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'PKなIDです',
`word` VARCHAR( 255 ) CHARACTER SET ujis COLLATE ujis_japanese_ci NOT NULL COMMENT '挨拶の言葉を入れます',
PRIMARY KEY ( `id` ) ,
UNIQUE (
`word`
)
) ENGINE = MYISAM CHARACTER SET ujis COLLATE ujis_japanese_ci COMMENT = '挨拶の言葉が格納されるテーブルです。'
;
INSERT INTO `greeting`.`greeting_word` (
`id` ,
`word`
)
VALUES (
NULL , 'good morning'
), (
NULL , 'hello'
);

DBユーザの設定


http://www.dbonline.jp/phpmyadmin/tutorial/index3.html
を参考に。
ユーザ名 greeting_user
pw test
特権を与えるDB greeting
で設定して下さい。
詳細はこちら(*そのうち書きます)で。

からDBに接続するための設定


EthnaではDB接続に限らず、プロジェクト内で共通に設定する必要のある情報を
etc/{プロジェクト名}-ini.php の配列configに記載します。
ここでは
C:\xampp\htdocs\helloethna\etc\helloethna-ini.php
ですね。
DB接続はこの中のdsnという項目なので、ここを
'dsn' => 'mysql://greeting_user:test@localhost/greeting',
とします。
書式は 
'RDBMSの種類://DBユーザ:DBパスワード@ホスト名/DB名'
です。
//*phpから直接接続する場合は、$link = mysql_connect('ホスト名', 'DBユーザ', 'DBパスワード');とするのはご存知の前提ですので、それぞれ適合するものを入力して下さい。



はじめてのadd app-object


コマンドプロンプトを立ち上げて、プロジェクトのディレクトリに移動します。

cd c:\xampp\htdocs\helloethna

次に
ethna add-app-object greeting_word
でgreeting_wordテーブルに対応したapp-objectが作成されました。
app/Helloethna_GreetingWord.phpがapp-objectクラスが記述されているファイルです(app-managerクラスも記述されてますが、それは次回以降)

app-objectを使ってみる


さて、ではapp-objectを使ってみましょう。
viewで表示用にDBからデータを取得してみたいと思います。

フォームから選べると便利ですが、まず最初はソースの中で指定してみましょう。
app/view/Greeting.php
を開き、preforward()の中で
  $greetingWordObj=$this->backend->getObject('greeting_word','id','1');
$greetingWord = $greetingWordObj->getNameObject();
$this->af->setApp('greetingWord',$greetingWord );

とすれば、
greeting_wordテーブルのidが1のレコードの内容を含んだapp-objectが生成
生成されたapp-objctのgetNameObject()を使用してデータを配列に格納
配列をafにsetApp()する
が完了しました。
*SQLを書いてないのにデータを取得出来たところに注目


これだけじゃまだ当然表示されないので
template/ja/greeting.tpl
を開き、適当な場所に
<h2>app-object練習</h2>
<ul>
{foreach from=$app.greetingWord item=item key=key}
<li>
{$key}:{$item}
</li>
{/foreach}
</ul>
を追加しましょう。

こんな感じ


んで、
http://localhost/helloethna/www/?action_greeting=true

id : 1
word : good_morning
が表示されればOK!




Category: ethna超入門
Posted by: TanaT
はい、と言うわけでやっとadd-viewです。

どうも入門書とかにある
add-action→add-view→add-app-object
まで一気にやるの苦手なんですよね。覚えること多くて。
*真面目な性格の人は一気にやっちゃって平気だと思います。

この企画はソースを段々と作っていくので、途中からだと訳わかんなくなります。
環境が整ってない人はその0.5から、
環境が整ってる人はその1から順に見て下さい。


今日やること



  • add-view -t を使ってみる

  • afを使ってaction-view間でデータを受けわたす

  • 受け取ったデータを表示用に整形する


*MVC的な設計思想はこの際おいておくことにします。

具体的には、
actionで現在時刻を取得する

afに渡す

viewに遷移

viewでaf経由で現在時間を取得

時間によって表示する挨拶を決定してafに渡す

表示!
みたいな感じを目指します。

add-viewってなに?


ビュー(view)クラスを追加するコマンドです。

add-view -tの「-t」ってなに?


viewクラスと一緒にテンプレートファイルも一緒に生成するオプションです。

ビュー(view)って何?


とりあえずここでは

  • 表示するためのデータを用意してassign(ぽいことを)する($this->af->setApp()する)

  • 使用するテンプレートを決定する

  • ものとします。

    はじめてのadd-view -t



    コマンドプロンプトを開いて、helloethnaのディレクトリに移動して

    ethna add-view -t greeting

    これで、viewクラスとtemplateファイルが生成されました
    viewクラス(の記述されてるファイル)
    app/view/Greeting.php
    テンプレートファイル
    tamplate/ja/greeting.tpl

    viewクラスとテンプレートファイルを使う


    さて、じゃあこのviewとtemplateを表示させてみましょう。
    まず、最初にしないといけないことは、
    ・このビューを呼ぶアクションを用意する。
    (このビューに遷移するアクションを用意する)
    です。

    通常は、add-actionで指定したらデフォルトで同じ名前のviewを指定するのですが、
    前回、Index_viewを指定するように変更してしまったので、これを元に戻しましょう。

    ・actionのperformの戻り値がviewの指定
    なので
    return "index";

    return 'greeting';
    に戻してあげて下さい。
    で、

    http://localhost/helloethna/www/?action_greeting=true
    にアクセスして
    Helloethna
    とだけ表示されればOKです。



    actionでデータを用意する→afに渡す


    afを使ってaction-view間でデータを受けわたす
    ために、まずはactionでデータを準備します
    *この辺は設計上おかしい部分もあると思いますが、今回の目的はaction-view間のデータの受け渡しなので、設計については目を瞑っています。エレガントかつ単純でわかりやすい例があれば教えて下さい

    app/action/Greeting.php の perform()
    の中に

    $hour = date("H");
    $this->af->setApp('hour',$hour);

    を追加します。

    こんな感じ。



    viewでafからデータを取得して表示用に整形する


    次はviewでデータを受け取って整形してafにまた渡すです。
    app/view/Greeting.php のpreforward()の中に
    $hour = $this->af->getApp('hour');

    if($hour > 5 && $hour < 12){
    $greeting = "good morning";
    }else if($hour > 11 && $hour < 18){
    $greeting = "hello!";
    }else{
    $greeting = "good evening・・・";
    }

    $this->af->setApp('greeting',$greeting);

    return "greeting";
    と記述します。



    こんな感じですね。


    templateで表示する


    現在afのappに
    hour(現在の時間)とgreeting(現在の挨拶)が格納されているので、これらを表示するには、
    {$app.hour}と{$app.greeting}を
    template/ja/greeting.tpl
    に仕込めばOKです。

    こんな感じ



    http://localhost/helloethna/www/?action_greeting=true
    にアクセスして、現在の時刻と挨拶が表示されればOKです。
    システムの時間変更して、挨拶が変更されるか確かめてください

    ここまで終わってれば
    ethna公式のチュートリアル
    (1)http://ethna.jp/ethna-document-tutorial-practice1.html
    (2)http://ethna.jp/ethna-document-tutorial-practice2.html
    まで理解できるはずです。
    この二つを読んでサンプルを作ってから次回に進みましょう。
Category: ethna超入門
Posted by: TanaT
はい、というわけで、今回はadd-actionを使ってみようと思います。

*この企画の内容は間違ってる・厳密には正しくない部分が含まれている可能性が多分にあります。
気づいたらそっと教えてください。


前提
その1まで終わってること。
まだの人はその1から見て下さい。

    今回やること
  • アクション(action)を作ってみる。

  • ビューを指定してみる。

  • アクションクラスからアクションフォームを使って値を設定してみる。



前回の課題の答えは、「続き」へ

add-actionって何?


アクションを作るためのコマンドです。
*アクション=webサーバにリクエストを送って→なんか処理をして→htmlが表示される のまとまり
*詳細は→ethna公式アプリケーション構築手順(2)

ここでは、時間に応じて挨拶を返してくれるごく簡単なアクションを作ってみようと思います。

はじめてのadd-action



とりあえず、コマンドプロンプトを起動させて、

cd c:\xampp\htdocs\helloethna
でプロジェクトのディレクトリに移動します。

ethna add-action greeting
とすると、greetingというアクションとそれに必要なファイルが生成されます。
app/action/Greeting.php
*今後、c:\~はじまらないファイル及びディレクトリについては、プロジェクトのフォルダからの相対パスとします。
がそのファイルです。
このファイルに記述されているクラスをアクションクラスと呼びます。

この段階で、一度このアクションを使ってみましょう。

http://localhost/helloethna/www/?action_greeting=true
にアクセスしてみて下さい。

すると
Helloethna[3528](WARNING): Ethna_Renderer_Smarty.perform(\class\Ethna_ViewClass.php:132): template not found greeting.tpl [ERROR CODE(1)]
と怒られるはずです。
このエラーは
「表示しようとしているビューが無いよ!」
と言うエラーです。
まだビュー作ってないので当然と言えば当然です。

ビューの指定


ここでadd-viewに入ってもいいのですが、一回で覚えることは出来るだけ減らしたいので、
ここでは

既にあるビューをアクションクラスで指定する
ことにします。
既にあるビューとは、add-projectした時に一緒に作成して、
前回ちょっといじった

app/view/Index.php
のことです。これは実はIndexビューなんです。
なので

app/action/Greeting.php
のperform()の中に
return 'greeting';
とあるところ(ここでビュークラスを指定しています)
return 'index';
と編集して下さい。

こんな感じです。

で、再度
http://localhost/helloethna/www/?action_greeting=true
にアクセスしてみると・・・
http://localhost/helloethna/www/
と同じ画面が表示されました。

アクションでアクションフォーム($this->af)にデータを渡してやる


前回は、ビュークラス(app/view/Index.php)で$this->af->setAppでアクションフォームに値を渡していましたが、今回はアクションクラスから$this->af->setApp()を使ってみましょう。
IndexPageとなっていた部分を変更することにします。
具体的には
perform()の中で

return 'index.php'
より以前に
$this->af->setApp('title','greeting');
と記述します。

こんな感じですね。

前回と同じで、このままだとテンプレートには反映されないので、
template/ja/index.tpl
を開いて、

Index Pageを
{$app.title}

に変更しましょう。

こんな感じです。

http://localhost/helloethna/www/?action_greeting=true
にアクセスするとIndexPageと表示されていたところが
greeting
になってればOKです。

*MVCな設計思考に基づくと、ここで記述しているコードはダメダメだと思われます。あくまで、設計思考以前のEthnaの使い方の入門ということでここはひとつ。

今日の課題


今日の内容はここまでとしますが、このままだと、
http://localhost/helloethna/www/
からアクセスした場合に、IndexPageの部分が表示されなくなってしまいます。このままでは困るので、
http://localhost/helloethna/www/からアクセスした場合"Indexですよ"と該当部分に表示されるように修正して下さい。
*当然、http://localhost/helloethna/www/?action_greeting=trueからアクセスした場合はgreetingと表示されていること。

ではまた次回。



Category: ethna超入門
Posted by: TanaT
はい、というわけで。
今回は初めてのEthnaということです。
*Ethnaのインストール、環境作りは前回までを参照して下さい。

目的


Ethnaに関しては初心者である社長が自分の理解を深めるために、
自分の理解に基づいて解説っぽいものをしてみる企画です。
この企画が終わった後に、Ethna公式なり、Ethna関連書籍をスムーズに読めるようになるのが目的です。


環境


・OSはwindowsXP proSP2
・XAMPP1.6.6でApacheとMySQL
・PHP 5.2.5
・MySQL 5.0.51a
・Ethna2.3.2

想定している読者のレベル



  • php+MySQLで何か作ったことがある。

  • smartyを使ったことがある

  • MVCという言葉と概念は知っている

  • オブジェクト指向プログラミングについてなんとなく知っている

  • Ethna公式のチュートリアルだけだとちょっと理解出来ない



今回やること


    hello ethna を作ってみる
     
  • プロジェクト作成

  • アクションフォームを使ってみる





プロジェクトを作ってみる


前回でもちょこっとやりましたが、まずはプロジェクトを作ります。
*プロジェクト=Ethnaを利用して作られてるwebアプリケーションとします。

Ethnaでは、ある程度ソースを自動生成してくれる機能があるので、
その機能を使います。コア部分を自分で書かなくて良いわけです。

まずコマンドプロンプトを起動させて
cd c:\xampp\htdocs
と打ち込んで、Apacheのドキュメントルートに移動します。


次に
ethna add-project helloethna
と打ち込みます。
ディレクトリ作っていい?と聞かれたら
y
でOKを出しましょう。
こんな感じでなんかいっぱいファイルが生成されればOK


http://localhost/helloethna/www/
にアクセスしてhello worldと表示されればOK!
と、ここまでは前回と同じですね。
ここのhello worldをhello ethnaに変えることを今回の目標とします。

hello ethnaその1 力ずくで変える!


まず最初に、ethnaを意識しない方法でhello worldをhello ethnaに変えてみます。
C:\xampp\htdocs\helloethna\template\ja\index.tpl
を適当なエディタで開き、

赤枠の部分をhello ethnaに書き換える!

で、
http://localhost/helloethna/www/
にアクセスすると、hello ethnaに変わってます。
よかったよかった。

C:\xampp\htdocs\helloethna\template\ja\index.tpl
がテンプレートファイルなので、これを編集すれば、
当然表示されるHTMLも変わりますが、これはEthnaというより、
smartyの特徴
ですね。
なもんで、次はEthnaの内部を意識してみましょう。



hello ethnaその2 hello world部分を可変にして変える


今度は
Ethnaの中で文字列を指定→smartyにassign
という形でやってみます。
*さっきの変更は元に戻しておいてください。

さっきの変更を元に戻したら、まず、
Ethnaの中で表示する文字列("hello ethna")を指定することにします。
「Ethnaの中」と言っても、文字列を指定するポイントが実は二つあるんですが、とりあえず

view

と呼ばれる場所で指定してみることにします。
viewとは表示に必要なデータを用意して、テンプレートを指定する場所くらいに思っておいて下さい。

C:\xampp\htdocs\helloethna\app\view\Index.php
を開いて、
function preforward()の中に

$this->af->setApp('greeting','hello ethna!');

を追加してやりましょう。

これでテンプレート変数{$app.greeting}に'hello ethna'がassignされます。

さて、いきなり出てきた
$this->af (アクションフォーム)
ですが、ここではテンプレートにデータを渡してくれるオブジェクト(とメソッドsetApp())として使います。

これでテンプレートにデータが渡ったはずなので、テンプレート側で受け取って表示させてみましょう。

ここで使ってるテンプレートファイルはさっきと同じ
C:\xampp\htdocs\helloethna\template\ja\index.tpl
なので、
helloworldの部分をsmarty変数
{$app.greeting}
に書き換えればOKなはずです。*ここの意味がわかんない人は、smartyの仕組みを先に勉強してみてね。

こんな感じ


無事、hello ethna! と表示されてればOK。

今回はここまで。
お疲れ様でした。

今回の課題
今回のviewを編集したのと同じ方法でタイトル(Index Page)を変えて見て下さい。出来れば今回の内容はOK。







Category: ethna超入門
Posted by: TanaT
第三回目にしてやっとEthnaのインストールに辿り着きました。

前回と同じ方法で環境を作っていれば、あっというまに終わります。

環境のおさらい
・XAMPP 1.6.6a でApacheとMySQLをインストール
・magic_quotes_gpc = Off
・Smartyのインストール
・;C:\xampp\php を環境変数Pathに追加

今回すること
・Ethnaをインストールする。
*2008 5/10追記 Smartyを同時にインストールする方法を追加
・プロジェクトを作ってみる(だけ)。

Ethnaインストール
http://ethna.jp/ethna-download.html
を読めば終わる!じゃ、あれなので、少し丁寧に。

まず、今回は
・PEARチャンネルを利用してインストールする
という方法を使います。
色々便利なので、普通はこの方法で間違い無いと思います。
ここで、前回設定したpearコマンドが生きてきます。
スタート→全てのプログラム→コマンドプロンプト
でコマンドプロンプトを起動させて

pear channel-discover pear.ethna.jp

と入力してenter。
Adding Channel "pear.ethna.jp" succeeded
Discovery of channel "pear.ethna.jp" succeeded
と出れば次に。出なかった場合は、
・ネットがつながってるか、
・ノートン先生とかに邪魔されてないか、
・pear.ethna.jpが落ちてないか
あたりをチェックすると幸せになれるかもしれません。

次に
pear update-channels
でenterの後

pear install ethna/ethna
でenterで、
「Ethnaダウンロードしてますよ」的なメッセージが出ればインストール完了です。

ethna2.3.5で、 pear install -a ethna/ethna と-aオプションをつけるとSmarty,simpletestが同時にインストールされるようになりました。

本当に入ったかどうか試してみる
そのままコマンドプロンプトから

cd c:\xampp\htdocs
で、apacheのドキュメントルートに移動して

mkdir ethnasample
で、サンプル用のディレクトリを作成

cd ethnasample
で、今作ったディレクトリに移動します。
win XPはtab補完が効くので、ちょっと楽ですね。
*ここまではethnaとは関係ない普通のDOS的操作

ethna add-project sample
とすると、
「ディレクトリ作っていい?」
みたいな事を聞かれるので
y
と押してあげましょう。

こんな感じ。

そのあと、ずらずらーっとファイルが作られるんですが、こいつらが
Ethna
です。*正確にはEthnaによって作られるスケルトン?

ここまで一行たりともPHPのソースを書いていないわけですが、
とりあえず
http://localhost/ethnasample/sample/www/
にアクセスしてみましょう。

hello, world!

と表示されればOK!

うまいこと出ずに怒られた人は何か作業が足りてないので、
前回
の作業を最初からやり直してください。
違う方法で環境作ってる人は、自力でなんとかしてね。

Category: ethna超入門
Posted by: TanaT
はい。ということで、早速Ethna入門と行きたい所ですが、
まずは環境作りから行ってみましょう。

*この企画の内容は間違ってる・厳密には正しくない部分が含まれている可能性が多分にあります。
気づいたらそっと教えてください。
*Ethnaな環境が既に整ってるって人は無視して次にいってね。
*あくまでローカルでの開発環境です。
*間違っても運用環境には乗せないでね。

今回やること

  • Apacheインストール

  • MySQLインストール

  • Smartyインストール*ethna2.3.5からethnaと同時にインストール出来るようになりました!

  • PEARインストール


Ethnaのインストールについては、
Ethna公式にもしっかり載ってるわけですが(実際、相当わかり易いです)、
linux前提なあたり、少し敷居が高そうです。

せっかくなので、
・windows XP

・apache
・MySQL
のサーバ類と
・Smarty
・PEAR
のライブラリ類
をインストールするところから始めて、
Ethnaをインストールする準備を整えるところまでやってみましょう。

ではまず
・Apache+MySQL
ApacheはPHPを動かすために必要なモノです。(普通は)

EthnaはPHPのライブラリなので、PHPが動かないことにはどうにもなりません。
PHPを動かすために、Apache入れちゃいましょう。MySQLはついでに入っちゃいます。

詳しい人はApacheを単体で入れればいいのですが、
今回はとりあえず最短でEthnaが動く環境を作りたいので、
統合パッケージを使います。
統合パッケージのデメリットがわかってきたら、まとめて消せるしね。

XAMPP
http://www.apachefriends.org/jp/xampp-windows.html#2671
から、適当なバージョンのwindows用インストーラをダウンロード、
今回は
XAMPP Windows版 1.6.6a
をダウンロードしてみました。
あとはクリックして適当に進めていけばOK。
サービスとしてインストールしますか?とか聞かれましたが、
とりあえずチェックしなくてOK。

*Norton先生とかZoneAlarmとかセキュリティ系のソフトを入れていると、
警告が出るかもしれませんが、その時は許可リストとかに入れてあげて下さい。

一通りインストールが終わったら

こんなコンソールが出てくるので(「起動」は出ていない状態で)、
Apache
MySQL
の横のボタンをぽちぽちっと押して起動させてあげて下さい。
問題なく画像と同じような状態になればOKです。

この状態で
http://localhost/
にアクセスしてXAMPPな画面が出ればOK。
とりあえずPHPが動くようになりました。

ついでに、
http://localhost/phpmyadmin/
にアクセスして、phpMyAdiminが動いてることを確認しましょう。
それっぽい画面が出てればOK
*下の方に警告文が出ているようにこの状態は危険です。このDB(というかPCに)重要なデータは入れておかないほうがいいですね。

さらについでに
C:\xampp\apache\bin\php.ini
をメモ帳かなんかで開いて
magic_quotes_gpc = On
とある行を見つけ出して
magic_quotes_gpc = Off
にしておいてください。
理由は
magic_quotes_gpc 脆弱性
とか
magic_quotes_gpc Ethna
あたりでgoogle先生に聞いてください。

Smartyインストール
Smartyをインストールします。
Ethnaで標準で使ってるテンプレートエンジンです。
http://www.smarty.net/download.php
から、stableなバージョンのsmartyをダウンロード
*windows環境ならzipで落とすのが解凍が楽ですね。

解凍するといくつかフォルダが出来るので
libsフォルダの中身ををC:\xampp\php\libs\Smarty\にコピー(libs,Smartyというフォルダは無いと思うのでそれぞれ作ってください。)
こんな感じ


C:\xampp\apache\bin\php.ini
をもう一度開いて

include_path = ".;C:\xampp\php\pear\"
と書いてあるところを(\は¥(半角円マーク)に置き換えてね)
include_path = ".;C:\xampp\php\pear\;C:\xampp\php\libs\"
に書き換えます。


で、apacheをXAMPPコントロールパネルから、再起動(停止→起動)

PEAR
Ethna公式でさも当然の様に使われているこの4文字ですが、
XAMPPを使えば既にインストールされています。
ただ、このままだと便利な便利なpearコマンドが使えない(使いにくい)
ので、使いやすくします。

俗に言う
パスを通す
とかいうやつです。

windows左下の「スタート」→コントロールパネル→システム→詳細設定→環境変数
でこんな画面が出てくるので
null
下側の「システム環境変数(S)」の、
Pathを選んで、「編集」を押します。

んで、出てくるウィンドウの「変数値(V)」の最後に
;C:\xampp\php
追加します。
;(セミコロン)を忘れないように。

*既存の値を消しちゃうとだるいことになるので、消さないようにしてね。

スタート→すべてのプログラム→アクセサリ→コマンドプロンプトで
コマンドプロンプトを開き、
pear
と打ち込んで、enterで
Commands: ~~
と1.5ページ分くらいコマンドが羅列されればOK!。
とりあえずEthnaを使う環境がそろいました。

次はEthnaのインストールでしょうか。





Category: ethna超入門
Posted by: TanaT
社長です。
ブログが出来てから、随分経ってからのエントリーです。

*この企画の内容は間違ってる・厳密には正しくない部分が含まれている可能性が多分にあります。
気づいたらそっと教えてください。


自分は基本的にはソースは書かない人なんですが、
・全くわからないとチェックも出来ない
・新人に教えられる人(教えるのが得意でちゃんと内容がわかってる人)が居ない
ので、必要に駆られてethnaを最初から勉強しなおす事にしました。

んで、入門書を読んでる訳ですが、どうにもわかりにくい。

わかりやすいと噂のethna公式のチュートリアルも、どうも理解出来ない。

・・・原因を考えてみた。
1.読者がまじめorまじめにならざるを得ない状況にあることが前提
1-b.読者が中級以上であることが前提
2.一つの項目について説明が長い&多い(丁寧すぎる)
ことが原因のような気がしてきた。

・・・結論
結果が出るまでが長いと、まじめじゃない人は挫折しちゃう

個人的には、どんなことでも入門レベルでは
・ごく大まかな概念を知る
・こうしたら→こうなる をごく短いスパンで繰り返す 
・ちょっと細かい理屈を知る
・こうしたら→こうなるんじゃない?→こうなった!(ならなかった) を繰り返す
・さらに細かい理屈を知る
をちょっとずつ繰り返して覚えるのがベストだと思ってるので、
これに沿って、ちょっとずつ資料作っていこうかと思います。

乞うご期待。
| 1 | 2 | Next»