[Yii開発日記]CMenuのActivate

CMenuでカレントページの自動判別(active化)は、CMenuの設定時のurlパラメータとの一致を見ています。
それもControllerまで一致の条件で見るので、自動生成のCRUDではうまく判定しない部分があります。
これを強引に何とかするプロパティがあります。
view/layouts/main.php で CMenuを設置する際に

array('label'=>'News', 'url'=>array('/news/index'),
    'active'=>Yii::app()->controller->id=='news'),

[Yii開発日記]CGridViewを使う

giiのCRUD生成で作ったものを改造する前提で書きます。

  • フィルターを全く使わない場合は下記を削除
    <?php $this->widget('zii.widgets.grid.CGridView', array(
    	'filter'=>$model,
    
  • 特定の列のフィルターを使わない場合は
            'columns'=>array(
                array(
                    'class' =>'CDataColumn',
                    'name'=>'id',
                    'value' =>'$data->id',
                    'filter'=>false,
                ),
    
  • 列ごとのソートを使わない場合
    <?php $this->widget('zii.widgets.grid.CGridView', array(
    	'enableSorting'=>FALSE,
    
  • リレーション先のnameを表示する。列タイトルを指定する。
    'columns'=>array(
       array(
               'name'=>'category.name',
               'header'=>'Category',
       ),
    ),
    
  • リンク列
    'columns'=>array(
        array(
    	    'class'=>'CLinkColumn',
    	    'labelExpression'=>'$data->name',
    	    'urlExpression'=>'Yii::app()->createUrl("XXX/".$data->id)',
    	),
    
  • ページネーションのページ毎のアイテム数を変えるには、各ModelのSearchメソッドで
    return new CActiveDataProvider(get_class($this), array(
            'pagination'=>array(
                 'pageSize'=>20,
            ),
    
  • 表示のソート順を変えるにも、各ModelのSearchメソッドで
    return new CActiveDataProvider(get_class($this), array(
            'sort'=>array(
                'defaultOrder'=>'library_id,library_number_1,library_number_2',
            ),
    

[Yii開発日記]MyISAMを使う

使用しているサーバーによってはMySQLがMyISAMしか許されない場合もあります。こんな時にも、テーブルの各項目のコメントに、外部キー制約を書いておくと、giiなどはこれを利用してくれる。

`publisher_id` ... COMMENT
 CONSTRAINT FOREIGN KEY (publisher_id) REFERENCES publishers(id)

Yii開発日記(スケルトンの作成)

コマンドプロンプトから付属のyiic.batを起動します。

framework> yiic webapp ..\www\app

すぐに生成されるので、以下でアクセステスト

http://localhost/app/index.php

生成された protectedフォルダは\webapp\に移動(ドキュメントルート外)
index.php 内の設定を修正

$config=dirname(__FILE__).'/../../protected/config/main.php';

Yii開発日記(ファイル配置)

自分ひとりでの開発であり、同時並行開発はしないなどの前提から下記の構成にします。
下記ではwebapp(仮称)がアプリケーションフォルダ名です。

  • webapp/ (関係ファイル一式をこの下にまとめます)
  • webapp/framework(Yii本体)
  • webapp/protected(Yiiによるアプリケーション、yiicによって生成した後にここに移動)
  • webapp/www/app (公開ディレクトリ)
  • webapp/www/requirments (Yii付属の要求チェッカ一)

Yii開発日記(再インストール)

開発環境のYiiを再インストールすることになったので、改めてメモ。

  • WindowsXP sp3
  • Apache 2.2.15
  • php 5.2.14
  • Yii 1.1.5r2654
  • mysql 5.1
  • xdebug 2.1.0-5.2
  • NetBeans 6.9.1
  • SubVersion 1.6.6
  • TortoiseSVN 1.6.11

Requirementで[注意]になるのは、以下の通り(サーバー側に合わせました)

  • PDO SQLite
  • PDO PostgreSQL
  • Memcache
  • APC

なお、サーバー側の確認に必要なのは、requirements下の一式のみです。

Yii開発日記(URLの変更)

http://localhost/controller/action/id でアクセスできるようにします

config/main.php を変更 components配下

'urlManager'=>array(
    'urlFormat'=>'path',
    'showScriptName'=>false,
),

www/.htaccessを変更

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php

※http:/localhost までの入力だと、index.phpに行かない。何か足りない?

Yii開発日記(giiを使う)

データベースのモデリングは完了し、テーブルは定義済であるのが前提。
http://localhost/index.php?r=gii でgiiのメニューを立ちげます。

  1. Model Generator を使ってTable毎のModelを作成
    • protected/models/XXX
  2. Crud Generator を使ってModel毎のCrudページを作成
    固有IDを持たないmany_to_manyの対照表テーブルはCrudページを作れません。

    • protected/controllers/XXX
    • protected/views/XXX/YYY
  3. http://localhost/index.php?r=XXXでCrudページにアクセス

Yii開発日記(基本設定)

config/main.phpを修正

db設定の変更

'db'=>array(
	'connectionString'=>'mysql:dbname=blog;hostname=localhost;',
	'username'=>'root',
	'password'=>'パスワード',
	'charset'=>'utf8',
),

giiを使う前提として、以下を追加(’components’,’params’ と同レベル)

'modules'=>array(
	'gii'=>array(
		'class'=>'system.gii.GiiModule',
		'password'=>'パスワードを設定',
		// 'ipFilters'=>array(...a list of IPs...),
		// 'newFileMode'=>0666,
		// 'newDirMode'=>0777,
	),
),

エラーメッセージ等の日本語化のために、以下を追加(’basepath’,’name’ と同レベル)

'language'=>'ja',