メイン

ethna アーカイブ

2010年07月08日

検索条件の論理積に相当するアイデア

あらかじめビット判定した列をVIEWで追加定義・・・それより次のがスッキリ。

のような配列を定義して

と記述すれば次のように生成。

ethnaへ手を入れずに済みDB依存も少ない。

2010年07月07日

検索条件に論理積を使いたい訳

Ethna_AppSearchObjectで前回拡張した論理演算子の論理積を使わないと例えば次のように記述。

これは次のように生成。

2010年07月06日

検索条件に論理積を使いたい

Ethna_AppSearchObject の 検索条件(Ethna 2.5.0 の標準)
OBJECT_CONDITION_NE
OBJECT_CONDITION_EQ
OBJECT_CONDITION_LIKE
OBJECT_CONDITION_GT
OBJECT_CONDITION_LT
OBJECT_CONDITION_GE
OBJECT_CONDITION_LE
OBJECT_CONDITION_AND
OBJECT_CONDITION_OR
に加え論理演算子の論理積を使えるようにする(MySQL5.0依存)。
Ethna_AppSQL.php の getCondition()で検索条件を判定しSQLを組み立てているので Ethna_AppSQL::getCondition()をオーバーライド。
しかし Ethna_AppObject内でオーバーライドしなければならないメソッドが多数あり、今回急ぎの為 コアのソースを直接修正。

続きを読む "検索条件に論理積を使いたい" »

2010年03月04日

Ethna 2.3.x 以前でsmartyプラグイン

iモードのようなクッキーの使えない古い端末でセッションを実現するシチュエーション。
smartyプラグインとしておけばaction_formでhiddenパラメータとして定義しなくともよい。
手順は次のとおり

続きを読む "Ethna 2.3.x 以前でsmartyプラグイン" »

2009年12月07日

URLハンドラーを実現する必要最小限手順

ethna アプリケーションを
http://www.domain/index.php?action_F=0&p=0123
 ↓
http://www.domain/exe/F/0123

http://www.domain/index.php?action_A=0&e=456
 ↓
http://www.domain/exe/A/456

http://www.domain/index.php?action_E=0&e=789
 ↓
http://www.domain/exe/E/789

で動作させる。
●mod_rewite
●PHP5限定?PEARのNet_URL_Mapper
には依存しない。
●シェルを使えないレンタルサーバーを考慮しシンボリックリンクを張らない。
これを実現する必要最小限の方法は次のとおり。

続きを読む "URLハンドラーを実現する必要最小限手順" »

2009年12月03日

ローカル環境で Ethna_MailSender を使う その3

環境によって、Ethna_MailSender::send()する度に、

などと初期化するところを継承で

$mailSender =& new myMailSender( $this->backend );

だけにするには

続きを読む "ローカル環境で Ethna_MailSender を使う その3" »

2009年12月02日

ローカル環境で Ethna_MailSender を使う その2

その1のままでは、ユーザー「mymail」でログインしないと送信できない。
必ずのFrom:ヘッダーに Yahoo! JAPAN ID の登録メールアドレスを指定する必要がある為

mail myfriend@gmail.com -- -f "mymail@domain.com"

で送信可能。YahooBBのsmtpで、本題の php の mail() を使う Ethna_MailSender で使うには、Ethna_MailSender::send()する前に

$ethna_mailSender->setOption( '-f mymail@domain.com' . "\r\n" );

とすれば、php::mail() のadditional_parametersを渡すことがでで送信可能。
 -----------------------------------
 -f オプションを使って エンベロープの sender アドレスを設定
 http://php.net/manual/ja/function.mail.php
 × setOption( 'From: YahooAuctions@remix.gr.jp' . "\r\n" );
 http://ethna.jp/doc/__filesource/fsource_Ethna__classEthna_MailSender.php.html#a69
 -----------------------------------

この場合必要最小限の /etc/postfix/main.cf 設定内容は

続きを読む "ローカル環境で Ethna_MailSender を使う その2" »

2009年11月20日

Smarty から Ethna_AppObject を使う

 テーブル名:user
から
 キー列名:ucd
 検索コード:123
で引き当てた
 名前列名:name
をテンプレートで表示し空の場合
 ID列名:id
を表示する。
action や view で次のように記述。

続きを読む "Smarty から Ethna_AppObject を使う" »

2009年11月14日

ethna でモバイル版Google AdSense その2

全てのビューで広告を取得していた「ethna でモバイル版Googleアドセンス その1」を特定のビュー&テンプレートで広告を取得するよう改善。

続きを読む "ethna でモバイル版Google AdSense その2" »

2009年11月06日

ethna でモバイル版Googleアドセンス その1

サイト運営者IDの埋め込まれた「モバイル コンテンツ向け AdSense」ページで「AdSenseコード」を取得し、lib/googleAdsenseMobile.php として配置。
テンプレートに埋め込みたい為 101行目辺りからの

をコメントアウト。app/APPID_Controller.php に
require_once 'googleAdsenseMobile.php';
を追加し、さらにコメントアウトした部分に相当するコードを app/APPID_ViewClass.php へ追加。

続きを読む "ethna でモバイル版Googleアドセンス その1" »

2009年10月25日

1つのシステムで見栄えを切り替える その2

ethna の action・view は共通としテンプレートだけを切り替える。以前の
http://www.remix.gr.jp/service/blog/2009/09/post_186.html
を改良。
shopA は
APPID/template/ja/shopA/Index.tpl
shopB は
APPID/template/ja/shopB/Index.tpl
さらに、shopXを追加したときにテンプレートが無ければ自動的に標準の
APPID/template/ja/shop/Index.tpl
を使う。
'A','B','X' をデータベースなどから取得してテンプレートを動的に切り替え、'shop' を config値 から取得する。

続きを読む "1つのシステムで見栄えを切り替える その2" »

2009年10月18日

Ethna 2.5.0 リリース

http://ethna.jp/ethna.html

2009年10月12日

Ethna_Config と データベース その2

前回の構造の場合 $backend->config->get('GROUPS'); $backend->config->get('COLOR'); として使うところ

のようなネストした連想配列構造にすると

続きを読む "Ethna_Config と データベース その2" »

2009年10月11日

Ethna_Config と データベース

データベースから取得した値をconfig値として扱うシチュエーション。

続きを読む "Ethna_Config と データベース" »

2009年10月08日

Ethnaのセッション その2

セッションの動きを確認するサンプル
プロジェクト作成直後のテンプレート APPID/template/ja/index.tpl に

を追加。
プロジェクト作成直後のアクション APPID/app/action/Index.php に

続きを読む "Ethnaのセッション その2" »

2009年10月03日

Ethnaのセッション

$this->session->start(null);
→ ini_set('session.use_cookies', 0); クッキーを使わない

$this->session->start(0);
$this->session->start();
→ ini_set('session.use_cookies', 1); クッキーを使う
無期限のセッションではない。ブラウザを閉じるまで同一セッションとして扱う。

$this->session->start(600);
から最大10分以内であれば、ブラウザを閉じて再びアクセスすると ethna が自動復帰し同一セッションとして扱う。

期限切れのセッションファイルが残るので明示的に削除が必要。

2009年10月02日

ethna のフォーム デフォルト値 その2


'default'値はvalueにセットされない。フォームヘルパーで表示される。ここまでは前回。さらに

続きを読む "ethna のフォーム デフォルト値 その2" »

2009年10月01日

Ethna_Session のデータ構造

Ethna_Session のデータ構造は
$_SESSION['REMOTE_ADDR']
$_SESSION['__anonymous__']
$_SESSION['ethna_csrf'] ← Ethna_Util::setCsrfID() 使った場合
$_SESSION[★★★]

session->set(★★★,保持したい値)
session->get(★★★)
という具合に使用するので

続きを読む "Ethna_Session のデータ構造" »

2009年09月17日

ethnaのフォーム定義をDBから取得する 補足

mysql のカラムの型が char,varchar,text だった場合、ethna が 'string' として扱い
「ethnaのフォーム定義をDBから取得する」では
デフォルトで文字列長をフォーム定義の'max'値としているため
checkbox や radio では 明示的に max=>null などとします!

2009年09月16日

ethna のEthna_DB_PEAR:getMetaData()でNOTICE

テーブル定義情報を取得する為
$ethnadb =& $this->backend->getDB();
$a =& $ethnadb->getMetaData( $vv ); ←★
で、

メッセージが。
参照渡しの戻り値の問題。出ない環境もあったので調べると

続きを読む "ethna のEthna_DB_PEAR:getMetaData()でNOTICE" »

2009年09月15日

ethnaのフォーム定義をDBから取得する その3

前回のままではテーブルの列の数だけSQLが発行されてしまうので
の方法で連想配列からルックアップできるように改善。
class APPID_ColumnsManager extends Ethna_AppManager に
getResultArray() を作成しておき、
class APPID_ActionForm extends Ethna_ActionForm
の _setFormTemplate を次のように改造

続きを読む "ethnaのフォーム定義をDBから取得する その3" »

2009年09月14日

ethnaのフォーム定義をDBから取得する その2

前回はテーブルの列名をフォーム名とフォームの表示名にセット。
テーブルの列名には仕様書には日本語表記があるはずで、本当はこれをフォームの表示名にしたい。
データベース テーブル 列のコメントを利用するため、MySQL 5 に依存する。
まずは、テーブルの各列のコメントに表示名を設定。

このコメント(表示名)を ethna の Ethna_AppObject で使えるようにするには次のとおり。

続きを読む "ethnaのフォーム定義をDBから取得する その2" »

2009年09月13日

ethnaのフォーム定義をDBから取得する その1

アプリケーションの多くのフォーム定義はデータベース テーブルと密接。例えば

なら ↓

という具合に大量のフォーム定義をテーブルのメタ情報から取得する。
スケルトンで生成する他に、今回は下記のように動的にフォーム定義を生成する。

続きを読む "ethnaのフォーム定義をDBから取得する その1" »

2009年09月12日

ethnaでformの配列を個別にチェックしたい

formの配列長が可変長だったっ場合、普通に作ると

メアド入力欄
  • メアドを正しく入力してください。

    となるところを

    メアド入力欄
  • メアドを正しく入力してください。
  • メアドを正しく入力してください。

    のように、どの配列インデックスで間違いがあったか分かるようにする為、次のような応急処置。
  • 続きを読む "ethnaでformの配列を個別にチェックしたい" »

    2009年09月05日

    ethnaのスケルトン

    で生成された各ファイルの
    @author {$author}
    に自分の名前を展開させる。

    環境は、
    Vine Linux 4.2 (Lynch Bages)
    Ethna-2.3.7、Ethna-2.5.0-preview3、Ethna-2.5.0-preview5

    CentOS release 5.3 (Final)
    Ethna-2.5.0-preview3

    続きを読む "ethnaのスケルトン" »

    2009年09月03日

    1つのシステムで見栄えを切り替える

    ethna の action・view は共通でテンプレートだけを切り替える。
    shopA は
    APPID/template/ja/shopA/Index.tpl
    shopB は
    APPID/template/ja/shopB/Index.tpl
    さらに、shopXを追加したときにテンプレートが無ければ自動的に標準を使う。
    APPID/template/ja/standard/Index.tpl
    次のように実現する(実験的アプローチ)

    続きを読む "1つのシステムで見栄えを切り替える" »

    2009年08月13日

    Ethna-2.5.0-preview5 のバグ?

     WEBアプリケーションの開発中不思議な現象に遭遇。環境は
    Ethna-2.5.0-preview5
    Smarty Version 2.6.26
    PHP Version 5.1.6
    CentOS release 4.6 (Final)
    view の preforward() 内の先頭に、Ethna::raiseNotice() を記述すると次のメッセージが出力される。

    Ethna のコアである Ethna_Plugin_Logwriter のログ出力箇所情報取得 _getBacktrace() の debug_backtrace() で、"file"と"line" 要素が取得できていないらしい。
    問題を切り分けると、次のような結果に。

    続きを読む "Ethna-2.5.0-preview5 のバグ?" »

    2009年08月02日

    テンプレート機能を使ったファイルダウンロード

     PHPでCSVファイルやTSVファイルのダウンロードファイルを生成するシチュエーション。
     EthnaのSmartyテンプレートを利用する。このことを応用しているEthna_MailSenderで可能。
    APPID/ja_JP/Format/AddressCSV.tpl

     データ取得の仕様が変わらなければ、このテンプレートだけで簡単に書式を変更できる。
     このテンプレート形式でデータファイルをダウンロードするにはアクションなどで次のように使う。

    続きを読む "テンプレート機能を使ったファイルダウンロード" »

    2009年08月01日

    Ethna_MailSender 例

     PHPで定型文面をメール送信するシチュエーション。
     EthnaのSmartyテンプレートを利用したEthna_MailSenderを使う例。
    APPID/ja_JP/mail/Thankyou.tpl

    という具合にSmarty流に時刻やデータをはめ込む。あとはアクションなど次のように使う。.

    続きを読む "Ethna_MailSender 例" »

    2009年05月05日

    ethna のフォーム デフォルト値

    ethna のフォームパラメータ default はPOSTされたフォーム値のデフォルトではなく?フォームヘルパーに対するデフォルト

    ページャーで1頁当たりの表示件数が空だった場合のデフォルト値として扱うのであれば
    $formDef= $this->action_form->getDef( 'limit' );
    $limit = $formDef['default'];

    2009年03月22日

    ethnaでviewテーブルを扱う

    Ethna 2.5.0-preview3 +PHP 5.2.6 + MySQL Server 5.1.30
    では
    $object = $this->backend->getObject( 'viewname', 'cd', 123 );
    $object->isValid()
    の振る舞いがおかしい。引き当てていながら false となる。
    MySQL の view のつもりでgoogle検索しても ethna の view に関するドキュメントばかり・・・

    続きを読む "ethnaでviewテーブルを扱う" »

    2009年03月21日

    アップロード ファイル名のチェック その2

    なぜか
    「フォーム定義 」
    http://ethna.jp/ethna-document-dev_guide-form.html
    に「フォーム値の自動検証を行う(プラグイン編) 」
    http://ethna.jp/ethna-document-dev_guide-form-validate_with_plugin.html
    へのリンクがない。以前作成した file の拡張子チェックは、バリデータプラグインがセオリーのようです↓

    続きを読む "アップロード ファイル名のチェック その2" »

    2009年03月20日

    ethna の getObjectPropList その4

    実際にはたくさんのテーブルがあり、アドレッシングは複雑になるものの

    とすると、記述を統一できる。$row は、↓

    続きを読む "ethna の getObjectPropList その4" »

    2009年03月19日

    ethna の getObjectPropList その3

    マジックナンバー2はちょっと・・・という場合

    イメージは↓

    続きを読む "ethna の getObjectPropList その3" »

    2009年03月18日

    ethna の getObjectPropList その2

    データベース 商品テーブルから、主キーCDで価格を引き当てたい場合、
    キー
    aa\200
    bb\100
    cc\150
    のような連想配列 $price[] を新たに作り出すところ、前回のgetObjectPropListで取得したデータ構造を使ってメモリを節約する。

    とすると $row は↓

    続きを読む "ethna の getObjectPropList その2" »

    2009年03月17日

    ethna の getObjectPropList

    データベース 商品テーブル






    CD(primary key)NAMEPRICE
    aaapple\200
    bbgrape\100
    ccorange\150

    PEAR::DB の DB_FETCHMODE_ASSOCモードで取得すると













    0



    CDNAMEPRICE
    aaapple\200

    1



    CDNAMEPRICE
    bbgrape\100

    2



    CDNAMEPRICE
    ccorange\150


    ethna の class APPID_RanksManager extends Ethna_AppManager のメソッド getObjectPropList() で取得すると

    続きを読む "ethna の getObjectPropList" »

    2009年03月14日

    テーブル定義書の自動生成 その3

    仕様書が無くソースコードだけが残るのが最悪。せめて最終的なソースコードを元に仕様書のベースを生成したい。
    ethna にはない description 要素を追加。
    このままでは「プラグインがない」とワーニング。
    app/plugin/APPID_Plugin_Validator_Description.php を作成。
    例えば↓このように出力すればそのままエクセルに貼り付けて・・・

    続きを読む "テーブル定義書の自動生成 その3" »

    2009年03月13日

    テーブル定義書の自動生成 その2

    列名を日本語表記する。 WEBをデータベースのフロントエンドとすると、機械的に全部の列をフォーム定義することがほとんど。 列とフォーム要素は1対1として action の継承元で
    という具合。さらに、view の継承元で
    とすれば、template で↓

    続きを読む "テーブル定義書の自動生成 その2" »

    2009年03月12日

    テーブル定義書の自動生成

    MySQL の DESC 命令で、テーブル定義設計書を ethna で出力。当然MySQL依存。

    あとは、view で、

    とすれば、template で

    かなりベタ。

    2009年02月05日

    アップロード ファイル名のチェック

    ethna の regexp チェックは VAR_TYPE_FILE属性の時は効かないので custom で実装してみる。 あとは、各アクションで

    続きを読む "アップロード ファイル名のチェック" »

    2008年12月17日

    APPID-ini.php 内の設定値を参照

    Ethna の smarty テンプレートで、APPID/etc/APPID-ini.php 内の設定値を参照するには {$config.~}。
    ちなみに Ethna 2.1.2 時代には、

    続きを読む "APPID-ini.php 内の設定値を参照" »

    2008年12月05日

    OFFSET記述できない古いmysql

    今まで問題なく動作していた ethna の Ethna_AppObject::searchProp()、Ethna_AppManager::getObjectPropList() で別の環境で突然SQLのシンタックスエラーが。

    nativecode=1064 ** You have an error in your SQL syntax near 'OFFSET 0' at line 1

    未だに古い mysql server 3.23.58 を使っているサーバー。OFFSET句を記述できない?
    互換性の切り替えはあるのか・・・。時間がないので、Ethna_AppObject から継承されている APPID_TABLEID.php 内のメソッドを↓こんな感じでオーバーライド。

    続きを読む "OFFSET記述できない古いmysql" »

    2008年11月19日

    ethnaのビューとテンプレート

    注文を検索するアクションで一覧のビューへ遷移するような場合
    ethna add-action Order_Search
    ethna add-view Order_List
    ethna add-template Order_List
    とすると、それぞれ
    APPID/app/action/Order/Search.php
    APPID/app/view/Order/List.php
    APPID/template/ja/Order/List.tpl
    という具合に「Order」ディレクトリが作られるが

    続きを読む "ethnaのビューとテンプレート" »

    2008年11月17日

    ethna で mysql のテーブル JOIN

    正規化されたスキーマではテーブル結合は付きもの。
    mysql が5以降であれば、VIEW を CREATE し ethna コマンドで add-app-object。
    ただし、mysqlが4もしくは3の為 VIEW を作れない環境の場合アプリケーション側で結合。
    例えば注文明細一覧取得のようなシチュエーションならこうする。

    続きを読む "ethna で mysql のテーブル JOIN" »

    2008年11月12日

    フレームワーク

    最新LLフレームワークエクスプローラ最新LLフレームワークエクスプローラ
    Ruby on Rails,
    Maple/Ethna(PHP),
    Catalyst(Perl),
    TurboGears(Python)
    5大フレームワーク徹底攻略

    2008年10月01日

    ethna アクションの値に dummy を使うシチュエーション

    フォームの中にsubmitが2つ以上あるケース。

    テキスト入力ボックス内でエンターするとIE6ではアクション名が渡らない。

    解決方法は

    続きを読む "ethna アクションの値に dummy を使うシチュエーション" »

    2008年09月06日

    アクション配列でアクション切り替え

    ethna で、編集中のフォーム内に増減するアイテムなかから1つを処理するアクション。
    ポリシーとして、クライアント依存する javascript は使わない。
    他にフォームの入れ子はNG

    例えば、ショッピングサイトの買い物カゴ

    送付先 商品101 商品102 商品103

    同時に複数削除できるが、1つずつ削除する構成にするには

    続きを読む "アクション配列でアクション切り替え" »

    リンク

    About ethna

    ブログ「remix.gr.jp」のカテゴリ「ethna」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

    前のカテゴリはdatabaseです。

    次のカテゴリはjavaです。

    他にも多くのエントリーがあります。メインページアーカイブページも見てください。

    Powered by
    Movable Type 3.34