CakePHP にて(というかselectタグ全般?)日付をいじろうとすると
$form->dateTime とかが用意されてるんだけど、月が英語表記だったり、デフォルト順序がm-d-Yだったりと
いろいろ面倒が多いので、とりあえず作ってみた。西暦逆順+おまけで元号が入るよ!
CakePHP にて(というかselectタグ全般?)日付をいじろうとすると
$form->dateTime とかが用意されてるんだけど、月が英語表記だったり、デフォルト順序がm-d-Yだったりと
いろいろ面倒が多いので、とりあえず作ってみた。西暦逆順+おまけで元号が入るよ!
111980km 前回5月107896km 換えなさすぎ、走りすぎ…
SIGMA 5w-50 の謎の全化学合成オイル。
カストロールXF08(10w-40)より、ものすごいシャバシャバ感(柔らかい?)があるけど、とりあえず走ってみよう
エレメントも交換してとりあえず、3ヶ月は延命?廃オイルパンに謎の砂粒がいっぱいだった・・。ヤヴァい?
MySQL管理といえばとりあえず phpMyAdmin ってなことで、無くてはならないツールの一つですが、
メジャーバージョンアップしてたみたいなので、アップグレードしてみた。
本番サーバは怖いのでとりあえずテストサーバにて・・・。
とはいえ、configだけのこして上書きすればほとんど終わりなんだけども・・・。
:
:
完了^^;
インポートがちょっと早くなったような・・・気がするだけかもしれません。
とりあえず基本動作には問題ないようなので本サーバにも乗っけるかなー。
さて、CakePHP。
開発中は、debug を2 で開発すると思います。その状態で
開発中にDBのテーブルを増やしたりすると、どうも意味不明な挙動をすることがある。
いきなりMissing Database Table とか。いままでいけてたのに!とか。
あちこちのサイトで触れられていますが、app/tmp/cache/models内のモデルキャッシュをつかって
アクセスしようとするから、不整合が生じて起こるみたいですね。
手動のローカルサーバだといいんだけど、公開サーバだといちいちログインしたりせなあかんので、めんどくせぇ。
ということで、管理者用メニューに以下のアクションを作った。
/**
* モデルキャッシュ削除
*/
function delCache(){
$this->obAuth->lock(array(1));// 管理者権限のみ$openDir = TMP . ‘cache’ . DS . ‘models’ . DS;
e($openDir);
if ($handle = opendir($openDir)) {
while (false !== ($file = readdir($handle))) {
if (is_file($openDir.$file)) {
echo (unlink($openDir.$file)) ? “{$file}を削除しました<br>\n” :”{$file}の削除に失敗しました<br>\n”;
}
}
closedir($handle);} else {
echo(“ディレクトリのオープンに失敗”);
}
die();
}
こいつにアクセスすればいつでもmodel cacheディレクトリが削除されて、再構築されます。
うーん、最初からつくっとけばよかったなー。危険はそうそうないとおもいますが、もちろん開発中だけの機能!
勝手にお世話になってる CakePHPのおいしい食べ方さんにも言及されてますが、忘れた頃にハマりますねこれ・・・。
今作ってるシステムではpdfに吐き出すのにtcpdfを使っております。
htmlで、分数を表示させようとすると、画像にしてみたりtableを用いたりと、大変です。
まぁ想定していない使い方というアレなんだけども、、、でも教材としては必要なわけで。
ということで、tcpdf使って、分数を楽ちんで吐き出すオレオレ関数を考えております。
イメージとしては $oreore->bunsu( int分子 , int分母, [$posx],[$posy]); 的な感じかなぁ。
書いちゃったら作らないと仕方ないよね。頑張ろう・・・。
まだ全然手つかずだけどね!期待しないでね!
デスクトップとかクッチャクチャになってきたので、
仕事用(+寝転び用)のLet’snoteをリカバリーインストした。のはよかったものの、ATOKを入れるの忘れてた!
そのままチャットとかするとイライラ3倍増。
ATOK2006持ってるんで、それ入れても良かった(ATOKは同時に使用しない限り複数台にインストールが出来るライセンス)んだけど、せっかくなので新しい奴にしようかと思ってたところ、BIGLOBEでダウンロード版1年ライセンス2980円ってのがあったのでそれを購入。月換算300円以下なら最新版に買い換える手間と費用が減ることを考えたら安いんかなー。
開発PCとLetsnoteにインストール。うむ、いい感じ。やっぱ↓で文節確定してくれないと!!
ってなことで、支離滅裂一太郎V4.3からのユーザーでした。
まぁ、そんなに使いこなすってほど使ってもないけど、慣れの問題かな。
年間ライセンスvs安売り一太郎最新版 悩んだけどまぁ、一太郎そんなに使わないし、まぁええか。
快適日本語入力ライフ。
ただいま受注している案件として
バーコードを用いたタイムレコーダシステムを作成中です。
それなりに多機能です。というか、俺すげー!!って感じです。
ハマったところをチョイチョイ書いて行こうかなと。
【打刻の流れ】
打刻があったらajaxを使って、
IDとパスワードの認証->DBに打刻データを追加->打刻お知らせメール送信->打刻完了画面を表示
で、一括で処理を行っていたのだが、ここでちょっとハマる。
メール送信をするところで、
サーバ状況や、タイミングによって、送信処理がなかなか終わらない。
↓
終わらないと打刻完了画面が返ってこない
↓
打刻した人、わけがわからないからもう1回ためす。
↓→→→→→→→→戻ってやりなおし ↑
送信・登録処理がエラーになっているわけではないので、やり直した分だけメールが送られてしまう(汗)
こえええぇえ…
ということで、レスポンスを最速にするためにいろいろ考えた結果、
打刻があったら一旦メールをdbにためて、一定時間ごとにcron使ってチェックして別処理させることにした。
試行錯誤のうえ、一応完成。
DB登録の場合は流石にレスポンスも早い。実用に十分耐える反応を示してくれるようになりました。
まとまってきたところで、ググってみると・・・(順序逆っぽいけど)
http://pear.php.net/manual/ja/package.mail.mail-queue.mail-queue.tutorial.php
PEAR にそういう機能があるんですね、やり方は間違ってなかった!!
コレを応用して、送信時刻予約のできるメール機能もついちゃったよ!すごい!
支離滅裂。
OfficeLiveの解約→移管手続き開始から1週間、無事に移管完了。
とりあえずさらに契約1年間追加有効なので、頑張って存続させないとね!
5) 2008-10-16 01:15:51 [SUCCESSFUL] transfer of domain pccaosaka.com from VERISIGN-GRS/EXTERNAL (Melbourne IT, Ltd. d/b/a Internet Names Worldwide) to VERISIGN-GRS/269 (Key-Systems GmbH) SUCCEEDED
FIN) 2008-10-16 09:38:12 正常に移管されました。
というか、先にページ完成させないと・・(汗
やること多すぎてパニック中。
ちょっと、いや、ドはまり・・・・。
dropToDate = dropTo.match( regex1 );
これ実行すると、 dropToDate は sting になると思いきや
dropToDate.replace( “hoge”, “fuga”) ;
とやるとエラーが出る。調べてみると、 matchの戻り値はString ではなく object であった。
いままでハマらなかったのが不思議・・・。
んで、マッチした文字列はどうすりゃいいかというとdropToDate[n] に入ってる。
replace したいとおもったら そっからいじればいいのですかな。
支離滅裂の日々
右クリックからのコンテキストメニューを表示 >処理 を行うべく、
jquery.contextMenu.js を導入してみた。さぁ、いざテスト! おお・・・これもすごいやん・・・・。
基本的な呼び出しはこんな感じ。メニューを用意しといて、右クリックさせたい対象に
$(“[id*='edit_sc']“).contextMenu({
menu: ‘myMenu’
},
function(action, el, pos) {
…..
んで、コンテキストメニュー内で選択したイベントは <a href=”#hoge”> のhogeを callback してくれる。
が・・・!またIEで妙ちくりんな事象が・・・
シングルファイルのサンプルファイルとかは理想通り動く。
しかし開発中のシステムに組み込むと全く動かない。正確には、メニューは出るけどその後の処理に移らない・・・。
デバッグ用ページに組み込むと普通に動く。xHTML文法チェッカとかを通しても論理構成破綻してないし、、、。
で、alert でcallback された action を見てみる
正常(理想とする)動作の場合 action には ‘hoge’ が入らないといけないところが
‘ttp://~~~/~~/~~/fuga#hoge’ が・・・なんでフルアドレス・・・。
最初こそ[ ttp: ] て・・2ちゃんかよ!とか思ったりしてほくそ笑んだりしたけど、
解決の糸口がみえないのでブチ切れ寸前に・・・。3時間ほど格闘の末、
ajax で後からreplace したエレメントに存在するメニューを呼び出してクリックすると
href にアドレスが補完されてる・・・。
IE謎すぎる・・・
jquery.contextMenu.js のソースを見てみよう・・・。
コールバックの部分に目をやろう。
// Callback
if( callback ) callback( $(this).attr(‘href’) ).subst(1) , $(srcElement), {x: x – offset.left, y: y – offset.top, docX: x, docY: y} );
注目すべきは .subst(1)。単純にhrefの文字列から先頭の1文字(ここでは’#')を取り除いて第1引数として返してくれる。
もちろん呼び出し元のソースは <a href=”#hogefuga”> だから、hogefuga が返ってきてしかるべき。
なぜかIE様(6,7ともに)は「ajaxで後から挿入したときに限り」勝手にhrefにフルアドレスが補完されます。
そりゃ先頭の1文字削除したら ttp: になるわなぁ。
どうしようもないっぽいので、ソースに直接手を下す。
//callback
if( callback ) callback( $(this).attr(‘href’).replace( /^.*#/gi ,”) , $(srcElement), {x: x – offset.left, y: y – offset.top, docX: x, docY: y} );
変更後は 正規表現で 先頭から # までの文字を削除しています。とりあえずこれで 、IEもFxもしのげた。
お困りの人は是非。
※でも、戻り値action 受け取ってから自前で処理した方がよかったな・・・。
最近のコメント