Posts tagged LAN
クロックス購入
2クロックスを家族3人で購入。
今まではサンダルといえばビーサンばかりの私でしたが、はやりものに負けました。
私のお気に入りのビーサンといえば葉山のげんげいです。
先日、本も出版されました。
ビーサン屋げんべい物語―葉山の片隅から世界を狙うオンリーワン商店
もちろん発売日にそく購入しました。
PEAR::Pager ページ番号を PATH_INFO で渡す
3ページング処理を行ってくれる PEAR::Pager 、かなり便利です。
通常は
index.php?pageID=2
のようにしてページ番号を渡すのですがこれをPATH_INFO で渡すには下記のようにオプションパラメータを指定します。
$params = array( ... 'path' => 'http://localhost/foo/', 'fileName' => '%d', 'append' => false, cuurentPage => 現在のページ );
ポイント
append = false なら fileName の %d にpageID を埋め込む。
currentPage を指定しないと Pager が現在のページが分からない。
fileName
'path' => 'http://localhost/', 'fileName' => 'foo/%d'
なども可能。append=false なら fileName の %d にpageID を埋め込むということ。
現在のページを取得するには
$path_info = explode("/", $_SERVER['PATH_INFO']); if (isset($path_info[1]) { $currentPage = $path_info[1]; } else { $currentPage = 1; }
PATH_INFO が使用できるか
サーバによっては PATH_INFO が使用できない。
使用できるかは $_SERVER["PATH_INFO"] が存在するかどうか。
ただし、http://localhost/index.php では $_SERVER["PATH_INFO"] には値はセットされないので、 http://localhost/index.php/1 などのようにして $_SERVER["PATH_INFO"] が設定されているか調べる。
Firefox テキストエリアを外部エディタで編集する
1今まではブラウザで textarea を入力するときに秀丸などを立ち上げて、秀丸で文章を作成してそれをコピペしたりしていた。
Firefox の拡張機能「mozex」を使用すると、外部のエディタでテキストエリアを編集することができるということで導入してみた。
インストール
http://www.cas.cmc.osaka-u.ac.jp/~paoon/OriginalDoc/
上記よりインストール
設定
ツール->アドオン から mozex 選択
General タグ
Directory for temporary files にテンポラリディレクトリを指定
例)C:\WINDOWS\Temp
[Browse]ボタンで選択するのが簡単。
Textarea タグ
Edit textbox in UTF-8 にチェック
Text Editor
例)"C:\Program Files\Hidemaru\Hidemaru.exe" /fu8 %t
使用する外部のテキストエディタを[Browse]ボタンで選択
スペースが入っているディレクトリはエラーになるので “” で囲む。
[Browse]ボタンだと勝手にやってくれる。
/fu8 が UTF-8 で秀丸を開く起動オプション
%t は テキストエディタが使用するテンポラリファイル
HotKey を選択して Ctrl+E とキー入力すると Ctrl+E で起動できる。お好みで。
Firefox を再起動
念のため
気になった点
設定項目が勝手に書き換わっていたことがあったのでうまく動作しない場合は確認してみるとよいかも
使い方
textare で右クリック mozex->Edit Textarea で設定したエディタが起動
または、HotKey を設定しておけば設定したキーで起動する。ただし textarea が複数ある場合は選択画面が表示される。
エディタで編集して保存を押し、textareaをクリックすると保存した内容で更新される。
または、エディタは終了すると textarea が更新される。
CakePHP コントローラのメソッドをURLから実行させない
0コントローラにアクション以外のメソッドを書かないのが一番いいのかもしれません。
ただ、どうしても書きたいという場合にはメソッド名にアンダーバー “_” を付けるとURLからアクセスできなくなります。
試しに posts_controller.php に _foo というメソッド名を作り /posts/_foo/ にアクセスしてみると
Private Method in PostsController
You are seeing this error because the private class method _foo should not be accessed directly.
とプライベートメソッドなのでアクセスできませんよというエラーメッセージが出力されました。
しかしこのメッセージってあまりよくないのではと思い、試しに DEBUG=0 とデバッグモードを本番環境用にしたところ、
Not found
The requested address posts/_foo/ was not found on this server.
となりました。やはり考えてますよねそれくらい。
ちなみにエラーメッセージは
/cake/libs/view/templates/errors/
にエラーの種類によって15のテンプレートが用意されています。
自分で Not found などのエラーを修正したい場合は
/cake/libs/view/templates/errors/error404.thtml
を
/app/views/errors/error404.thtml
にコピーして修正すればそちらのテンプレートが使用されます。
CakePHP の日本語マニュアルに書かれている
メンバ関数を protected にして見えるようにするには、コントローラアクション名を ‘-’ ではじめてください。(訳注:将来の仕様???)
メンバ関数を private にするためには、コントローラアクション名を ‘–’ ではじめてください。(訳注:将来の仕様???)
というのはこれのことなのかな?
ただ、”_” ではなく “-” になっている。(英語のマニュアルも同様に “-” でした。)
CakePHP 日本語マニュアル
C.4. コントローラ(Controllers)
CakePHP マニュアル(英語)
CakePHP Manual
WordPress でタグを使えるようにしてみた
2使用したプラグインは Simple Tagging です。
WordPress用、タグ付けプラグイン:Simple Tagging | 創造マラソン
こちらのサイトでかなり詳しく解説されています。
Single.php のエントリー本文の後に
<?php STP_PostTags(); ?>
を入れて、タグを表示させ、さらに
< ?php STP_RelatedPosts(); ?>
でタグにより、関連するエントリーを表示させるようにしました。
また、サイドバーに
< ?php STP_Tagcloud(); ?>
を入れてタグクラウドを表示させました。
ただ、このままではリスト構造で縦に並んでしまうので、
Tag Cloud – Simple Tagging for WordPress – Trac
こちらを参考に下記を追加しました。
style.css
ul#tagcloud { padding:0; margin:0; text-align:center; list-style:none; } ul#tagcloud li { display:inline; font-size:70%; color:#ccc; background: none; padding: 0;} ul#tagcloud li a, ul#tagcloud li a:link { text-decoration:none; } ul#tagcloud li a:hover { text-decoration:underline; } ul#tagcloud li.t1 a { color:#797979; font-size: 120%; } ul#tagcloud li.t2 a { color:#6d6d6d; font-size: 160%; } ul#tagcloud li.t3 a { color:#616161; font-size: 190%; } ul#tagcloud li.t4 a { color:#555555; font-size: 210%; } ul#tagcloud li.t5 a { color:#484848; font-size: 230%; } ul#tagcloud li.t6 a { color:#3c3c3c; font-size: 250%; } ul#tagcloud li.t7 a { color:#303030; font-size: 270%; } ul#tagcloud li.t8 a { color:#242424; font-size: 290%; } ul#tagcloud li.t9 a { color:#181818; font-size: 310%; } ul#tagcloud li.t10 a { color:#0c0c0c; font-size: 330%; }
顔チェキを試してみた
1最近話題の顔チェキを試してみました。
知らない方のために簡単に説明すると携帯から自分の顔写真を送ると有名人で誰に似ているか判定してくれるというケータイサイトです。
で、結果は
- 濱口優 63%
- 平泉成 61%
- 山口智充 60%
どれも言われたことないなぁ。平泉成さんって知りませんでした。
ちなみにウチの相方は
- 沢尻エリカ 51%
- 観月ありさ 48%
- 紺野まひる 48%
でした。こちらもどれも言われたことないそうです。
で、これって本人だったらどうなんだろう?と思い、濱口の写真で試してみました。
使った写真はこちらです。
結果は
- 濱口優 71%
- 森山未來 46%
- 小林隆 43%
でした。やっぱり本人は本人でした。確かに濱口優と森山未來は似ていると思う。
CakePHP アソシエーションのまとめ(2)
0アソシエーションのまとめ(1) で書いた
< ?php class User extends AppModel { var $name = 'User'; var $hasOne = array('Profile' => array('className' => 'Profile', 'conditions' => '', 'order' => '', 'dependent' => true, 'foreignKey' => 'user_id' ) ); } ?>
この部分の補足です。
それぞれの意味するところは
var $hasOne = array('関連先のモデル名'=> array('className' => '関連先のモデルのクラス名', 'conditions' => '関連を定義するSQL条件の一部', 'order' => '関連先のデータの並び順', 'dependent' => '関連先データの同時削除', 'foreignKey' => '関連先テーブル側の外部キー' ) );
conditions は条件を付けて関連付けるモデルのデータを制限するときに指定する。
dependent は関連元のデータが削除されたときに、一緒に関連先のデータも削除するかどうか。
関連先のモデルで関連元のモデルの主キーを定義しているカラム名です。
dependent などはかなり便利に使えそうですね。
アソシエーションのまとめ(1) に書いたように、 foreignKey は CakePHP の命名規則に従っていれば省略可能です。
CakePHP HtmlHelper::tagValue のHTMLエスケープ処理
1view でモデルの値などを出力する際に
$html->tagValue("Model/hoge");
とすれと、HTMLエスケープ処理をしてくれるので便利です。
ただ、
CakePHP 1.1.15.5144以降はHtmlHelper#tagValueに注意 | Shin x blog
に書かれているように、CakePHP のバージョン1.1.15.5144 からエスケープするかのフラグが追加されたようです。
以前はエスケープしないを選択できなかったので、それはそれで不便な点もありました。
MOONGIFT ブログ ? CakePHP覚書(HTML Helpler)
しかし今回の変更で注意しなければいけないのは、デフォルトでエスケープされていたのがデフォルトでエスケープ処理されなくなったことです。
cake/libs/view/helpers/html.php
function tagValue($fieldName, $escape = false)
以前のようにエスケープ処理させるには
$html->tagValue("Model/hoge", true);
とする必要があります。
また、
ちなみに1.2.0.5147ではtagValueがdeprecatedになっており、代わりにvalueメソッドを使うようになるようです。
ということになるようです。
CakePHP キャッシュファイルの使用
1CakePHP でキャッシュを使用するときに便利なグローバル関数があります。
- cache($path, $data, $expires, $target)
- $data のデータをキャッシュします。
キャッシュする場所は
$target==”cache” なら /app/tmp/cache/ + $path
$target==”public” なら /webroot/ + $path
になります。$target を指定しなければ $target==”cache” です。
$expires はキャッシュの有効期間です。
内部で
$expires = strtotime($expires, time());
が行われるので、strtotime の Data input formats 形式に準拠したものでなければいけません。
デフォルトは $expires = ‘+1 day’ です。 - clearCache($params, $type, $ext)
- $paramsが文字列でキャッシュディレクトリかファイル名にマッチする場合はキャッシュから削除されます。
$params が配列の場合は配列内の文字列全てに対して上記の処理が行われます。
対象のディレクトリは $type で指定します。
$type のデフォルトは ‘views’ です。
対象ディレクトリは /app/tmp/cache/ + $type になります。
cache 関数で ‘public’ を指定した場合のクリアはこの関数ではできないようです。
結構簡単にキャッシュ処理ができそうです。