あらかじめビット判定した列をVIEWで追加定義・・・それより次のがスッキリ。
のような配列を定義して
と記述すれば次のように生成。
ethnaへ手を入れずに済みDB依存も少ない。
Ethna_AppSearchObjectで前回拡張した論理演算子の論理積を使わないと例えば次のように記述。
これは次のように生成。
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内でオーバーライドしなければならないメソッドが多数あり、今回急ぎの為 コアのソースを直接修正。
続きを読む "検索条件に論理積を使いたい" »
iモードのようなクッキーの使えない古い端末でセッションを実現するシチュエーション。
smartyプラグインとしておけばaction_formでhiddenパラメータとして定義しなくともよい。
手順は次のとおり
続きを読む "Ethna 2.3.x 以前でsmartyプラグイン" »
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ハンドラーを実現する必要最小限手順" »
環境によって、Ethna_MailSender::send()する度に、
などと初期化するところを継承で
$mailSender =& new myMailSender( $this->backend );
だけにするには
続きを読む "ローカル環境で Ethna_MailSender を使う その3" »
その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" »
テーブル名:user
から
キー列名:ucd
検索コード:123
で引き当てた
名前列名:name
をテンプレートで表示し空の場合
ID列名:id
を表示する。
action や view で次のように記述。
続きを読む "Smarty から Ethna_AppObject を使う" »
全てのビューで広告を取得していた「ethna でモバイル版Googleアドセンス その1」を特定のビュー&テンプレートで広告を取得するよう改善。
続きを読む "ethna でモバイル版Google AdSense その2" »
サイト運営者IDの埋め込まれた「モバイル コンテンツ向け AdSense」ページで「AdSenseコード」を取得し、lib/googleAdsenseMobile.php として配置。
テンプレートに埋め込みたい為 101行目辺りからの
をコメントアウト。app/APPID_Controller.php に
require_once 'googleAdsenseMobile.php';
を追加し、さらにコメントアウトした部分に相当するコードを app/APPID_ViewClass.php へ追加。
続きを読む "ethna でモバイル版Googleアドセンス その1" »
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" »
前回の構造の場合
$backend->config->get('GROUPS');
$backend->config->get('COLOR');
として使うところ
のようなネストした連想配列構造にすると
続きを読む "Ethna_Config と データベース その2" »
データベースから取得した値をconfig値として扱うシチュエーション。
続きを読む "Ethna_Config と データベース" »
セッションの動きを確認するサンプル
プロジェクト作成直後のテンプレート APPID/template/ja/index.tpl に
を追加。
プロジェクト作成直後のアクション APPID/app/action/Index.php に
続きを読む "Ethnaのセッション その2" »
'default'値はvalueにセットされない。フォームヘルパーで表示される。ここまでは前回。さらに
続きを読む "ethna のフォーム デフォルト値 その2" »
Ethna_Session のデータ構造は
$_SESSION['REMOTE_ADDR']
$_SESSION['__anonymous__']
$_SESSION['ethna_csrf'] ← Ethna_Util::setCsrfID() 使った場合
$_SESSION[★★★]
で
session->set(★★★,保持したい値)
session->get(★★★)
という具合に使用するので
続きを読む "Ethna_Session のデータ構造" »
テーブル定義情報を取得する為
$ethnadb =& $this->backend->getDB();
$a =& $ethnadb->getMetaData( $vv ); ←★
で、
メッセージが。
参照渡しの戻り値の問題。出ない環境もあったので調べると
続きを読む "ethna のEthna_DB_PEAR:getMetaData()でNOTICE" »
前回のままではテーブルの列の数だけSQLが発行されてしまうので
の方法で連想配列からルックアップできるように改善。
class APPID_ColumnsManager extends Ethna_AppManager に
getResultArray() を作成しておき、
class APPID_ActionForm extends Ethna_ActionForm
の _setFormTemplate を次のように改造
続きを読む "ethnaのフォーム定義をDBから取得する その3" »
前回はテーブルの列名をフォーム名とフォームの表示名にセット。
テーブルの列名には仕様書には日本語表記があるはずで、本当はこれをフォームの表示名にしたい。
データベース テーブル 列のコメントを利用するため、MySQL 5 に依存する。
まずは、テーブルの各列のコメントに表示名を設定。
このコメント(表示名)を ethna の Ethna_AppObject で使えるようにするには次のとおり。
続きを読む "ethnaのフォーム定義をDBから取得する その2" »
アプリケーションの多くのフォーム定義はデータベース テーブルと密接。例えば
なら ↓
という具合に大量のフォーム定義をテーブルのメタ情報から取得する。
スケルトンで生成する他に、今回は下記のように動的にフォーム定義を生成する。
続きを読む "ethnaのフォーム定義をDBから取得する その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つのシステムで見栄えを切り替える" »
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 のバグ?" »
PHPでCSVファイルやTSVファイルのダウンロードファイルを生成するシチュエーション。
EthnaのSmartyテンプレートを利用する。このことを応用しているEthna_MailSenderで可能。
APPID/ja_JP/Format/AddressCSV.tpl
データ取得の仕様が変わらなければ、このテンプレートだけで簡単に書式を変更できる。
このテンプレート形式でデータファイルをダウンロードするにはアクションなどで次のように使う。
続きを読む "テンプレート機能を使ったファイルダウンロード" »
PHPで定型文面をメール送信するシチュエーション。
EthnaのSmartyテンプレートを利用したEthna_MailSenderを使う例。
APPID/ja_JP/mail/Thankyou.tpl
という具合にSmarty流に時刻やデータをはめ込む。あとはアクションなど次のように使う。.
続きを読む "Ethna_MailSender 例" »
ethna のフォームパラメータ default はPOSTされたフォーム値のデフォルトではなく?フォームヘルパーに対するデフォルト
ページャーで1頁当たりの表示件数が空だった場合のデフォルト値として扱うのであれば
$formDef= $this->action_form->getDef( 'limit' );
$limit = $formDef['default'];
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テーブルを扱う" »
なぜか
「フォーム定義 」
http://ethna.jp/ethna-document-dev_guide-form.html
に「フォーム値の自動検証を行う(プラグイン編) 」
http://ethna.jp/ethna-document-dev_guide-form-validate_with_plugin.html
へのリンクがない。以前作成した file の拡張子チェックは、バリデータプラグインがセオリーのようです↓
続きを読む "アップロード ファイル名のチェック その2" »
実際にはたくさんのテーブルがあり、アドレッシングは複雑になるものの
とすると、記述を統一できる。$row は、↓
続きを読む "ethna の getObjectPropList その4" »
データベース 商品テーブルから、主キーCDで価格を引き当てたい場合、
のような連想配列 $price[] を新たに作り出すところ、
前回のgetObjectPropListで取得したデータ構造を使ってメモリを節約する。
とすると $row は↓
続きを読む "ethna の getObjectPropList その2" »
データベース 商品テーブル
| CD(primary key) | NAME | PRICE |
| aa | apple | \200 |
| bb | grape | \100 |
| cc | orange | \150 |
PEAR::DB の DB_FETCHMODE_ASSOCモードで取得すると
ethna の class APPID_RanksManager extends Ethna_AppManager のメソッド getObjectPropList() で取得すると
続きを読む "ethna の getObjectPropList" »
仕様書が無くソースコードだけが残るのが最悪。せめて最終的なソースコードを元に仕様書のベースを生成したい。
ethna にはない description 要素を追加。
このままでは「プラグインがない」とワーニング。
app/plugin/APPID_Plugin_Validator_Description.php を作成。
例えば↓このように出力すればそのままエクセルに貼り付けて・・・
続きを読む "テーブル定義書の自動生成 その3" »
列名を日本語表記する。
WEBをデータベースのフロントエンドとすると、機械的に全部の列をフォーム定義することがほとんど。
列とフォーム要素は1対1として action の継承元で
という具合。さらに、view の継承元で
とすれば、template で↓
続きを読む "テーブル定義書の自動生成 その2" »