こめんと

コメントってどうやって付けるんだろう。っと
日記モード?にしてみたらコメント書く欄ができたーーー!!
っとDBのゲームで、2コンで某コマンド入れると
悟空ができたーーー!!っと叫ぶ勢いで感動。
けしてカカロットって連呼するのとは違うよ(マニア

っと今頃分かって感動しました(笑

PHP Ethna 0.2.1 インストール Windowsやらレンタルサーバやら色々?

監視している人がいたのね。A様凄すぎ(笑
ということで、A様より電話で「インストール方法を適当に書いてくれ」と電話があったので
適当に書いてみます。適当です。適度に当ってるという意味か?
というか本家に素晴らしいドキュメントあるんだから見た?って話かい?(ぉぃ

で、Ethnaインストール後にlibにDBやSmartyを入れとくとレンタルサーバーでも使えちゃったり
するところが殆どなので(ini_set('include_path'・・・OKなところ)、PEARインストール権限なんて無いよ。
っていうA様みたいな方対象を前提。

あと、どんな環境でもとりあえずコピーすれば動いちゃったりしてくれると嬉しいな
みたいな事を考えてる自分みたいな物ぐさな方を対象(ぉぃ
既にEthnaでハッピーライフな生活を送っている方は対象外でございます(笑
まぁ既にハッピーライフな生活を送っている方は自分のブログ記事は全て対象外ですが(ぉ

とりえあえず、EthnaをGETせにゃ始まらん。
ということでGETしちゃって下さい。

http://ethna.jp/
ダウンロードより開発版をGET(このBlogの日付の時点でのお話よ)
で、あと必要なものをスコココン!っとGET

DB
http://pear.php.net/package/DB/download
Smarty
http://smarty.php.net/download.php
PEAR.php
PEARインストールしてコピーしとく。

あと自分で使いたいPEAR等・・・
自分はPEAR DB使わないので動作確認してません。悪しからず(ぉぃ

環境
Windows 2000
PHP 4.4.2
Apache 1.3.34
Ethna 2.0.1-dev
Smarty 2.6.13
DB 1.7.6
PHPとApacheが動作している事が前提です。

とりあえずPHPがインストールしてあるディレクトリにPathを通してないと
cmdで面倒なので、php.exeがあるディレクトリにPathを通す。
Path通してる方は飛ばしてOK。

マイコンピュータ -> プロパティ -> 詳細 -> 環境変数
行末にphp.exeがあるディレクトリを指定
例)
〜〜;C:\php4\

で、Ethnaを解凍。というか全部解凍。チン!(古

とりあえずC:Ethna_Install_Filesとディレクトリを掘って解凍したファイルを入れてみる。
ディレクトリ構成はこんな感じ。

C:Ethna_Install_Files
  |+DB
  |+Smarty
  |+Ethna
  |-PEAR.php

で新規プロジェクト作成。

プロジェクト名
hoge
プロジェクトが作成されるディレクトリ名
C:\TEST

プロジェクトが作成されるディレクトリを掘っておく。(C:\TEST)
cmd.exeを実行してコマンドプロンプトを開く。
で下記の様に実行する。

php C:\Ethna_Install_File\Ethna\bin\ethna_handle.php add-project hoge C:\TEST
creating directory (C:TEST\hoge) [y/n]:y

ethna_handle.php オプション プロジェクト名 プロジェクトを作成するディレクトリパス
で作成OK。

C:\TEST\hoge以下にプロジェクトが展開されてるか確認。

そしたら、インストールファイルにあるDBやらSmartyやらPEAR.phpやらEthnaをlibに入れる。
でDB.phpないよ言われたら、DBの中のDB.phpをlibに入れる(笑

で、C:\TEST\hoge\www\index.phpを下記の様に変更

include_once('C:\Test\hoge/app/Hoge_Controller.php');
↓
include_once('../app/Hoge_Controller.php');

で動作確認
とりあえずApacheのドキュメントルートにTESTをコピーして
http://localhost/hoge/www
でページが表示されるか確認。

localhost/hoge/をindexにしたい場合は
C:\TEST\hoge\www\index.phpをC:\TEST\hoge\にコピーして

include_once('C:\Test\hoge/app/Hoge_Controller.php');
↓
include_once('./app/Hoge_Controller.php');

でOK。

っとざっとこんな感じ。
.ethna?スケルトン弄りまくってるので、自分必要なさそう?
あとActionの追加等は

C:TEST\hoge\lib\Ethna\bin\ethna_handle.php add-action hogeConfirm

みたいな感じでOK。オプションみとくれ。

以上インストールよ。
むりくりっぽい(笑

generate・・・.phpが無くなっていて焦ったのはナイショ(笑

4/30 追記
Pearインストールしないとプロジェクトとか作れないっぽ。
すまそ(死
動作はlibにぶちこんどけばOKね。

PHP Ethna Action_Form

Ethnaを使い始めて1週間くらい立ちました。
いや〜〜すっばらしい。メロメロにハマッテシマッタヨ。

とりあえずActionFormの基底クラス作ってみましたよ。
STEP1-STEP2-STEP3-STEP4・・・
と画面遷移していく中でフォーム定義の追加を簡単にできればなぁ〜っと。

下記のクラスを継承したActionFormクラスで

    var $add_form = array(
            'test' => array(
            'name'       =>  'テストだよ',
            'form_type' =>  FORM_TYPE_SUBMIT,
            'type'       =>  VAR_TYPE_STRING,
         ),
            /*
            'test2' =>array(
             //追加したいフォーム沢山いれてあげて・・・
         ),*/
    );

っと定義するだけで、勝手にActionForm::formに追加してくれます。


で追加するだけだと画面遷移で戻った時に追加したフォームが邪魔になる事も
想定されるので、指定した名前のフォームを削除するメソッドも作ってみましたよ。

Ethna_Actionクラス内から使ってやってください。

$this->af->removeForm('削除対象フォームの要素名');

複数個一気に削除する場合は配列で渡すと楽ちん

function prepare()
{
    // 削除対象要素名
    $delformArray('test' , 'tset2');

    if ($this->af->validate() > 0 ){
        $this->af->removeForm($delformArray);
        return '遷移先';
    }
    return null;
}

しっかし、メソッド名とプロパティ名決めるセンスがまったくない・・・
困りものだ・・・

稚拙なソースだけど、こんなんでも少しは役にたつかなぁ〜・・・
っと自問自答してみる(笑

はてなの使い方覚えないとなぁ〜。。。よく分からん。。。

class Sample_ActionForm extends Ethna_ActionForm{

    function Sample_ActionForm(&$controller){
        Sample_ActionForm::_setAddForm();
        parent::Ethna_ActionForm(&$controller);
        return null;
    }

    /**
     *  $this->add_formに設定されたフォーム値を追加する
     *
     *   @access private
     *  @param
     *  @return null
     */

    function _setAddForm(){
        if(isset($this->add_form) && is_array($this->add_form)){
            foreach ($this->add_form as $name => $value) {
                // 省略値を補正($this->add_formの初期化)
                foreach ($this->def as $defvalue) {
                    if (!isset($value[$defvalue])) {
                        $this->add_form[$name][$defvalue] = null;
                    }
                }
            }
            // 初期化したフォーム値を$this->formへセット
            foreach($this->add_form as $key => $value){
                $this->setDef($key , $value);
            }
        }
        unset($this->add_form);
        return null;
    }

    /**
     * フォーム値を削除する
     * $_removelistで指定されたフォームを削除する
     *
     *   @access public
     *  @param  array   $_removelist    削除したいフォームを列挙した配列。stringでも可。
     *  @return null
     */
    function removeForm($removelist){
        if ($removelist){
            foreach*1{
                    unset($this->form[$value]);
                }
            }
        }
        return null;
    }
}

*1:array)$_removelist as $key => $value){ if(isset($this->form[$value]