2012年10月10日水曜日

web2py SQLFORM あれこれ ③ Twitter Bootstrap の利用

SQLFORM あれこれ ② の続きです。今回は bootstrap を使ったカスタマイズを説明します。

bootstrap の組み込み

twitter bootstrap は、現代風の Web デザインを簡単に作成できるフレームワークだ。web2py では、2.0.1 より標準で組み込まれたようだ。もしそれ以前の web2py を使用している場合、2.0.1 以降にバージョンアップするか、bootstrap モジュールを次のように組み込めば使用可能だ。

  1. twitter bootstrap のサイトから bootstrap をダウンロードし解凍する。
  2. 解凍したファイルに含まれている css , img , js の各フォルダを、 web2py アプリケーションの static 下にコピーする(例、web2pyフォルダ/applications/myapp/static)。
  3. モデル定義(db.pyなど)に、次の記述を追加する。
    1
    2
    3
    response.files.append(URL('static','css/bootstrap.min.css'))
    response.files.append(URL('static','css/bootstrap-responsive.min.css'))
    response.files.append(URL('static','js/bootstrap.min.js'))
    

なお web2py では画像ファイルは、通常、 static/images フォルダに設置する。しかし bootstrap の画像ファイルを images フォルダに設置すると、bootstrap の cssファイルなどの変更が必要になってくるため、img フォルダをそのままコピーする。

web2py 2.0.1 以降では Bootstrap が標準で組み込まれているため、設定作業は必要ありません

注意
過去のバージョンで作成したアプリケーションには、bootstrap のコードが含まれていません。Welcome アプリケーションから必要なファイルやコードをコピーするか、上の手順を実行するなどが必要です。

フォームボタンのカスタマイズ

それでは bootstrap を使ったカスタマイズを示していきたい。bootstrap にはいろいろな機能があるが今回は簡単に、フォームの subumit ボタンを bootstrap を使ったボタンに変更すると共に、キャンセル用ボタンを追加してみる。

まず前回記事の最後に紹介したコードに、次のコードを付け加える(挿入位置は、SQLFORMコンストラクタの前)。

1
2
3
4
5
submit = BUTTON(I(_class='icon-ok icon-white', _style='margin-right: 5px;'),
                T('OK'), _type='submit', _class='btn btn-primary')
cancel = BUTTON(I(_class='icon-remove', _style='margin-right: 5px;'),
                T('Cancel'), _type='reset', _class='btn',
                _style='margin-left:10px')

ボタンが定義された submit 及び cancel 変数を、次のように SQLFORM コンストラクタの buttons パラメータに渡す(2行目)。

1
2
3
form = SQLFORM(db.image, record, True, 
               buttons=[submit,cancel],
               upload=URL(c='default', f='download'))

これによって入力画面は、次のようにボタンのデザインが変更になる。

Submit ボタンのデザインを変更し、Cancel ボタンを追加しただけだが、グッと見栄が良くなったのではないだろうか。

Cancel ボタンを押すと入力した内容がリセットされる。しかしそれだけでは面白くないので、ボタンを押したら別の画面に遷移するよう、cancel変数の定義を次のように変更する(3行目)。

1
2
3
4
cancel = BUTTON(I(_class='icon-remove', _style='margin-right: 5px;'),
                T('Cancel'), _type='reset', _class='btn',
                _onclick = 'location.href="%s"' % URL(f='index'),
                _style='margin-left:10px')

onclick 属性への定義により、Cancel ボタンを押すと index(関数)画面に遷移する。

今回 Cancel ボタンは BUTTON タグを使用したが、他のページに移動するのであれば A タグ(アンカータグ)を使用しても良い。コード例は次のようになる。

1
2
3
cancel = A(I(_class='icon-remove', _style='margin-right: 5px;'),
           T('Cancel'), _type='reset', _class='btn',
           _href = URL(f='index'), _style='margin-left:10px')
入力フィールドのカスタマイズ

SQLFORMの入力フィールドに対する、bootstrapを使ったカスタマイズも示してみる。URL入力フィールドの背景に、入力サンプル値を表示するようにする。コードは次のようになる。

form.element(_id='image_url')['_placeholder'] = 'http://www.example.com'

これは SQLFORMコンストラクタで定義した form 変数に対して、フィールドの要素の placeholder 属性値に、サンプル値を設定している。SQLFORMコンストラクタが生成するフィールドのID値は、テーブル名_フィールド名 となる。

サンプルURLは、フィールドに何か値を入力すると表示されなくなる。コードを実行すると、次のような画面イメージとなる。


この他にも bootstrap には、いろいろな機能が含まれています。ぜひ活用して、親しみやすい画面デザインを実現してください。

参考
Twitter Bootstrap
GreenApple-Room - Twitter Bootstrapの使い方

次回 は、SQLFORM.grid の利用について説明します。