前回はテーブルの列名をフォーム名とフォームの表示名にセット。
テーブルの列名には仕様書には日本語表記があるはずで、本当はこれをフォームの表示名にしたい。
データベース テーブル 列のコメントを利用するため、MySQL 5 に依存する。
まずは、テーブルの各列のコメントに表示名を設定。
テーブルの列名には仕様書には日本語表記があるはずで、本当はこれをフォームの表示名にしたい。
データベース テーブル 列のコメントを利用するため、MySQL 5 に依存する。
まずは、テーブルの各列のコメントに表示名を設定。
CREATE TABLE tableA( acd INT COMMENT '番号' ,aid VARCHAR(10) COMMENT 'ID' ,acreate DATETIME COMMENT '作成日時' ,amemo TEXT COMMENT 'メモ' )ENGINE = INNODB CHARACTER SET utf8 COLLATE utf8_general_ci;このコメント(表示名)を ethna の Ethna_AppObject で使えるようにするには次のとおり。
VIEW を利用するため、MySQL 5 に依存する。
DROP VIEW IF EXISTS `columns`;
CREATE VIEW columns AS SELECT table_name,column_name,column_comment FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='databasename';
ethna コマンドで
ethna add-app-object columns
しておき、前回のコードをさらに改造
続く
DROP VIEW IF EXISTS `columns`;
CREATE VIEW columns AS SELECT table_name,column_name,column_comment FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='databasename';
ethna コマンドで
ethna add-app-object columns
しておき、前回のコードをさらに改造
function _setFormTemplate($form_template){ $map = array( /// ここでマッピングを調整 'form_type' => array( 'int' => FORM_TYPE_TEXT, 'string' => FORM_TYPE_TEXT, 'datetime'=> FORM_TYPE_TEXT, 'boolean' => FORM_TYPE_TEXT, 'blob' => FORM_TYPE_TEXTAREA, ), 'type' => array( 'int' => VAR_TYPE_INT, 'string' => VAR_TYPE_STRING, 'datetime'=> VAR_TYPE_DATETIME, 'boolean' => VAR_TYPE_STRING, 'blob' => VAR_TYPE_STRING, ), 'max' => array( 'string' => true, ), ); $ethnadb =& $this->backend->getDB(); foreach( $this->tables as $vv ){ $columns =& $ethnadb->getMetaData( $vv ); if( is_array( $columns ) === false ){ /// 異常系 Ethna::isError検出できない為オリジナルと同じ判定 $this->backend->log( LOG_WARNING, "取得失敗 getMetaData({$vv})" ); continue; } foreach( $columns as $k => $v ){ if( ! array_key_exists( $v['name'], $form_template ) ){ $form_template[$v['name']] = array(); } if( ! array_key_exists( 'type', $form_template[$v['name']] ) ){ if( array_key_exists( $v['type'], $map['type'] ) ){ $form_template[$v['name']]['type'] = $map['type'][$v['type']]; } } if( ! array_key_exists( 'form_type', $form_template[$v['name']] ) ){ $form_template[$v['name']]['form_type'] = $map['form_type'][$v['type']]; } if( array_key_exists( $v['type'], $map['max'] ) ){ if( ! array_key_exists( 'max', $form_template[$v['name']] ) ){ $form_template[$v['name']]['max'] = $v['len']; } } if( ! array_key_exists( 'filter', $form_template[$v['name']] ) ){ $form_template[$v['name']]['filter'] = 'ltrim,rtrim,ntrim'; } /// if( ! array_key_exists( 'name', $form_template[$v['name']] ) ){ /// $form_template[$v['name']]['name'] = $v['name']; /// } if( ! array_key_exists( 'name', $form_template[$v['name']] ) ){ $o =& $this->backend->getObject( 'columns' , array( 'table_name', 'column_name' ) , array( $vv, $v['name'] ) ); if( Ethna::isError( $o ) ){ /// 異常系 $this->backend->log( LOG_ERR, 'データベース障害' ); continue; } if( ! $o->isValid() ){ /// 該当なし continue; } $form_template[$v['name']]['name'] = $o->get( 'column_comment' ); } } } return parent::_setFormTemplate($form_template); }とりあえず、これで
'acd' => array( 'name' => '番号', 'form_type'=> FORM_TYPE_TEXT, 'type' => VAR_TYPE_INT, 'filter' => 'ltrim,rtrim,ntrim', ), 'aid' => array( 'name' => 'ID', 'form_type'=> FORM_TYPE_TEXT, 'type' => VAR_TYPE_STRING, 'max' => 10, 'filter' => 'ltrim,rtrim,ntrim', ), 'acreate'=> array( 'name' => '作成日時', 'form_type'=> FORM_TYPE_TEXT, 'type' => VAR_TYPE_DATETIME, 'filter' => 'ltrim,rtrim,ntrim', ), 'amemo' => array( 'name' => 'メモ', 'form_type'=> FORM_TYPE_TEXTAREA, 'type' => VAR_TYPE_STRING, 'filter' => 'ltrim,rtrim,ntrim', ),が実行時に機能する。
続く