九星気学という有名な占術があります。

身近では厄払いの方位除けなどに使われ、方位の吉凶を占う際によく利用されるようです。
方位除けに行った際「五黄殺」や「暗剣殺」なんていう単語を見た・聞いたことがある方が多いかと思いますが、まさにそういった方位と関係があり、自分の生年月日から算出する「本命星」と「月命星」から、方位の吉凶を占います。(間違えていたらごめんなさい!)

九星気学の詳しい説明はWikipediaに任せるとして、仕事で生年月日から「本命星」と「月命星」を算出できるPHPのコードを書きましたので、何かに使えるかと思い、公開します。
CONTINUE READING

WordPress3.0から搭載されたカスタムメニュー(nav menu)は、サイト内コンテンツをドラッグアンドドロップで自由にカテゴライズする事が可能となり、グローバルメニューやサイトマップなどを管理する場合にとても便利な機能です。

ただ、このカスタムメニュー、cssのクラス名などを指定する事は可能ですが、リンクボタンに画像を直接利用しようとなると、いろいろな工夫が必要になります。

単純に画像のURLを、メニューのに登録したエントリのタイトルに指定することもできますが、WordPressに多少詳しくないと、アップロードした画像のURLなどを指定するのは敷居が高いですし、メニューの管理上も画像のURLがエントリ名となってしまうため、管理がし辛くなってしまいます。

CONTINUE READING

CakePHPでフォームのバリデーションを行う場合、例えばチェックボックスで「選択肢A」が選択されている場合のみ、「アンケート」のテキストエリアを必須入力にしたい!といった事があるかと思います。

バリデーションルールを切り替えるというのも1つの手段かと思いますが、もっと簡単に、バリデーションの定義だけでそれを実現できる関数を、ビヘイビアとして書いてみたので公開します。
CONTINUE READING

CakePHPで開発したアプリケーションを公開する際、たとえばバグの修正やデータベースのアップデートを行う場合など、サイトの全機能をいったん止めて、バックエンドで作業したいことがあるかと思います。

エントリポイントであるAPP/webroot/index.phpを差し替えるという強硬手段もあるかと思いますが、もっと手軽に実現するためのMaintenanceコンポーネントを作成してみたので公開します。
CONTINUE READING

CakePHPではデバッグレベルを0としている場合、あらゆるエラーが非表示になり、CakePHPのエラーをはじめPHPのWarningやFatalエラーも記録されなくなります。

例えば、その状態で致命的なエラーが発生しても、画面が真っ白になったり、ErrorHandler::error404メソッドが実行されるだけで、どこかで能動的に$this->logなどで記録していない限り、解決につながる情報が記録されません。

そんな時、下記ブログを参考にカスタムエラーハンドラや、PHPエラーを記録する条件を定義しておくだけで、手軽にログを取ることができるようになります。

この中の内容で、自分も利用させて頂いている2つめの方法が手軽でよいので、紹介させて頂きます。

/app/config/bootstrap.phpの中にphpエラーログを常に/app/tmp/log/php_error.logに出力するとか
例えば:
if ( Configure::read(‘debug’) == 0 ) {
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
ini_set(‘display_errors’, 0); ini_set(‘log_errors’, 1);
ini_set(‘error_log’, LOGS . DS . ‘php_error.log’);
}

CakePHPでdebug=0の際にset_error_handler – benny毎日ラボ

下記のコードをAPP/config/bootstrap.phpに書いておくだけです。

if (Configure::read('debug') == 0) {
    error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
    ini_set('display_errors', 0);
    ini_set('log_errors', 1);
    ini_set('error_log', LOGS . DS . 'php_error.log');
}

これだけで、デバッグレベルが0の場合でも、APP/tmp/logs/php_error.logにエラー情報が記録されるようになります。