[CakePHP] CSVファイルをエクスポートする

いろんなやり方があるだろうけど、以下ざっと覚え書き。

コントローラ

ビュー

[CakePHP] セレクトボックスの選択肢をグループ化する

実装覚え書き。

例題

楽曲と歌手のテーブルがあるとして、楽曲ごとに歌手を選ばせたい。楽曲のページに歌手のセレクトボックスを配置したとして、歌手の数が多いと目的の歌手を見つけるのが面倒だ。そこで、歌手を「英字」「あ行」「か行」といったようにグループ化してリストしたい。

歌手データの前提

  • 歌手テーブルには「id」「名前」「ふりがな」のカラムがある
  • 外国人歌手は名前カラムに英語表記の名前が入っていて、ふりがなは空
    (例: 1/Michael Jackson/空)
  • 日本人歌手は名前カラムに日本語表記の名前が入っている
    (例: 2/松田聖子/まつだせいこ)

実装

Formヘルパーのセレクト要素のオプションに入れ子にした配列を渡すことで、セレクトボックスの選択肢がグループ化される。良く出来てるね、Formヘルパー。

コントローラ

ビュー

[CakePHP] 一連のチェックボックスを使ってカンマ区切りデータを入力する

実装覚え書き。

例題

以下のように、カンマ区切りのデータを格納するカラムを持ったテーブルがあったとする。

製品テーブル

  • id/製品名/カテゴリ
  • 1/掃除機/1,2,5
  • 2/食器洗い機/1,2,3
  • 3/テレビ/1,2

カテゴリテーブル

  • id/製品名
  • 1/家電
  • 2/生活家電
  • 3/キッチン用品・食器
  • 4/インテリア・雑貨
  • 5/掃除・洗濯

このカンマ区切りデータを一連のチェックボックスから入力させたい。

入力画面イメージ

実装

やってみると思ったよりも簡単だった。

コントローラ

ビュー

[CakePHP] Formヘルパーの日付項目オプション

最初にデフォルトの表示を目にしたときは「こりゃ使えねーな」と思ったけど、きちんとオプションを指定すればそれなりに使えるようになる。もちろんjQueryのDatePickerとか使えるならそれに越したことは無いけど。

コード例

cake-date1

良く使いそうなオプション

  • dateFormat – 日付の書式 ‘M’、’D’、’Y’ の組み合わせ。たとえば年月日なら’YMD’
  • minYear – 年の最小値
  • maxYear – 年の最大値
  • orderYear – 年の表示順序。’asc’ または ‘desc’。デフォルトは’desc’
  • monthNames – 月を英語表示するか(1月ならJanuary)。trueまたはfalse
  • empty – 入力無しを許す(空項目を追加する)か。trueまたはfalse
  • separator – 年月日を区切る文字の指定。’/’や’-‘など
  • default – 規定値の指定

参考サイト

FormHelper — CakePHP Cookbook 2.x ドキュメント
http://book.cakephp.org/2.0/ja/core-libraries/helpers/form.html

[CakePHP] ちょっとしたデバッグ支援が欲しいときに

変数をダンプしたい – debug()関数を使う

debug() 関数は PHP 関数の print_r() と同様に、グローバルに利用可能な関数です。debug() 関数により、さまざまな方法で変数の内容を出力することができます。 データを HTML に優しい方法で表示させたいなら、第2引数を true にしてください。この関数はまた、デフォルトで呼ばれた場所となるファイルと行番号も出力します。

この関数からの出力は、core の debug 変数が 0 より大きな値だった場合のみ行われます。

ログメッセージを出力したい – log()メソッドを使う

Object を継承するすべてのオブジェクトは、インスタンスメソッド log() を持っており、ログメッセージを出力するのに使えます:

また、 CakeLog::write() を使うことで、ログメッセージを書きだすことも可能です。 このメソッドは CakeLog がロードされているなら static にあなたのアプリケーション内のどこからでも呼び出すことができるのです:

DebugKitを使う

DebugKit は便利なデバッグツールをたくさん提供してくれるプラグインです。

参考サイト

デバッグ — CakePHP Cookbook 2.x ドキュメント
http://book.cakephp.org/2.0/ja/development/debugging.html

[MySQL] 番号をゼロ詰めした文字列に変換する

AUTO_INCREMENTで割り当てたID番号をゼロ埋めした指定桁数の文字列に変換したい。たとえば社員番号123を”000123″というコードに変換したい。

LPAD関数を使うと一発。

LPADの’L’はLEFTの意味で左に’0’を詰める。右に詰めたければRPADを使う。

参考サイト

SQL 文字を左に埋め込む(LPAD)
http://sasuke.main.jp/lpad.html

[C#] シンボリックリンクかどうか判断する

ファイルの属性がReparsePointだとシンボリックリンクらしい。

参考サイト

FileAttributes 列挙体 (System.IO)
https://msdn.microsoft.com/ja-jp/library/system.io.fileattributes(v=vs.110).aspx