Posts tagged Word
CakePHP モデルの validation の拡張 同じ項目で違うメッセージを出す
1CakePHP のモデルの validation の拡張のメモの続きです。
同じフォームの項目で違うエラーメッセージを出したいときがあります。
例えばユーザ登録フォームでユーザID がフォーマットエラーなのか、既に使用されているのかなどです。
models/users.php
var $validate = array( 'loginid' => '/^[0-9a-zA-Z]{8}$/', ); function validates($data=array()) { if(empty($data)) { $data = $this->data; } parent::validates($data); // loginid のユニークチェック if ($this->findByLoginid($data["User"]["loginid"])) { $this->invalidate("loginid_unique"); } if (count($this->validationErrors)>0) { return false; } else { return true; } }
既にloginid が登録済みの場合は
$this->invalidate('loginid_unique');
としています。
invalidate に指定するのは実際に存在しないものでも大丈夫なのでそれを使用して view でエラーメッセージを分けて表示します。
views/users/regist.thtml
ID:< ?php echo $html->password('User/loginid'); ?> < ?php echo $html->tagErrorMsg("User/loginid", "IDは英数字8文字で入力してください"); ?> < ?php echo $html->tagErrorMsg("User/loginid_unique", "IDは既に使用されています。他のID を指定してください"); ?>
CakePHP モデルの validation の拡張
1CakePHP のモデルの validation の拡張のメモです。
ユーザ登録フォームなどでパスワードの再確認のバリデーションを行うときの方法です。
views/users/regist.thtml
パスワード:< ?php echo $html->password('User/password'); ?> 確認用パスワード:< ?php echo $html->password('User/password2'); ?> < ?php echo $html->tagErrorMsg('User/password2', 'パスワードが一致しません');
※users テーブルにpassword2 のカラムはなくてかまいません。
models/users.php
function validates($data=array()) { if(empty($data)) { $data = $this->data; } parent::validates($data); if ($data["User"]["password"]!==$data["User"]["password2"]) { $this->invalidate("password2"); } if (count($this->validationErrors)>0) { return false; } else { return true; } }
AppModel クラスの validation メソッドも実行する必要があるので、必ず
parent::validates($data);
を書かないといけません。
OpenPNE 特定ページを SSL で接続する
3OpenPNE で個人情報などを送信するようなフォームや管理画面を SSL で接続する方法です。
SSL を使用するように設定を変更する
openpne/config.phpの以下の行を変更
特定ページを SSL で接続するように設定
define('OPENPNE_USE_SSL_PARAM', false);
をdefine('OPENPNE_USE_SSL_PARAM', true);
に変更
これだけで特定ページが SSL で接続されるようになります。
SSL を使用したいアクションを追加する
デフォルトで SSL 接続されるようになっているページ以外も SSL 接続にしたい場合は
$GLOBALS['_OPENPNE_SSL_REQUIRED'] = array( 'pc' => array( 'page_o_regist_prof', 'page_o_regist_prof_confirm', 'do_o_regist_prof', 'page_o_regist_intro', 'page_o_ri', 'page_o_regist_end', 'page_h_config_prof', 'page_h_config_prof_confirm', 'do_h_config_prof', 'page_h_config_ktai', 'do_h_config_ktai_send', ), 'ktai' => array( 'page_o_login', 'do_o_login', 'do_o_easy_login', 'page_o_login2', 'do_o_update_ktai_address', 'page_o_regist_pre', 'page_o_regist_input', 'do_o_insert_c_member', 'page_o_regist_end', 'page_o_password_query', 'do_o_password_query', 'page_h_config_prof', 'do_h_config_prof_update_c_member', 'page_h_config_easy_login', 'do_h_config_easy_login', 'page_h_config_mail', 'do_h_config_mail_insert_c_ktai_address_pre', 'page_h_pc_send', 'page_h_pc_send_confirm', 'do_h_pc_send_insert_c_pc_address_pre', 'page_h_config_password_query', 'do_h_config_password_query_update_password_query', 'page_h_config_password', 'do_h_config_password_update_password', ));
となっているところに SSL 接続したいアクションを追加していく。
例えば、携帯ではリマインダーは SSL 接続になりますが PC では SSL 接続ではありません。
そこで PC でも SSL にしたい場合は上の pc の配列にリマインダーのアクションの “page_o_password_query” を追加します。
これで http://www.example.com/?m=pc&a=page_o_password_query という URL は自動的に
https://www.example.com/?m=pc&a=page_o_password_query へリダイレクトされます。
注意点は上記の URL からフォームが送信される ?m=pc&a=do_o_password_query というURL も SSL にする必要があります。
これをしないとフォームの画面は SSL でも送信先が SSL ではなくなってしまいます。
PC 用のリマインダーを SSL にする場合は “page_o_password_query” と “do_o_password_query” の2つを追加する必要があるということです。
確認画面が入るフォームなどではフォーム画面表示アクション、確認画面表示アクション、実行アクションと3つ追加する必要があります。
ユーザに SSL を使用するか選択させるアクションの追加
ユーザが SSL を使用するか選択できるリストというのもあります。
$GLOBALS['_OPENPNE_SSL_SELECTABLE'] = array( 'pc' => array( 'page_h_config', 'do_h_config_1', 'do_h_config_2', 'do_h_config_3', 'page_o_login', 'page_o_tologin', 'do_o_login', ), 'ktai' => array( 'page_h_config', ));
このリストに追加するとフォームの右上やリンクの下に SSL 用のリンクが表示されユーザが SSL の使用をするか選択することができます。
Smarty のマルチバイト対応
0マルチバイトの文字列を指定行数で強制改行する仕様があって、wordwrap 関数をマルチバイト化してさらに Smarty のプラグインを作ろうと思っていたらありました。
Smarty のマルチバイト対応
Artisan Version管理システム
マルチバイト処理に弱いとされる、Smartyをマルチバイト対応とし、よりアプリケーション内で役立てることができるよう、オリジナルの関数や、関数に改造を行っています。
7月に読んだ本
07月に読んだ本のメモ
一番のお勧めは一番下に書いた「ビーサン屋げんべい物語」。
葉山にあるビーチサンダル専門店「げんべい」さんが出した本です。
たかがビーサンと侮れませんね。私も1年中愛用させていただいております。
Lifehacker インターネット時代のワークスタイル改善術!
2ちゃんねるはなぜ潰れないのか? (扶桑社新書 14)
「1日30分」を続けなさい!人生勝利の勉強法55
PHPによるデザインパターン入門
WordPress標準ガイドブック―導入&基本操作からフルチューンまで
モバゲータウンがすごい理由 ~オジサンにはわからない、ケータイ・コンテンツ成功の秘けつ~
WEB+DB PRESS 総集編 [Vol.1~36]
レバレッジ・シンキング 無限大の成果を生み出す4つの自己投資術
ネットで人生、変わりましたか?
iPhone 衝撃のビジネスモデル
ビーサン屋げんべい物語―葉山の片隅から世界を狙うオンリーワン商店
WordPress 携帯閲覧用プラグイン
0本ブログに携帯閲覧用プラグインをインストールしてみました。
下記のサイトに詳しくインストール方法は書かれています。
非常に簡単でした。
ファイルを2つアップロードして管理画面からプラグインをアクティブ化するだけで携帯から閲覧するのに適したページにしてくれます。
XREA に設置した WordPress で画像のアップロードができない
18前の投稿で初めて画像をアップロードしました。
そのときに、なかなか画像のアップロードができなかったので対策メモ。
最初はパーミッションでエラーになった
-> FTP から wp-content ディレクリにパーミッションの設定をした。
再度アップロードすると今度は wp-content 内に uploads ディレクトリがないとエラー。
-> FTP からディレクトリの作成をおこない、パーミッションの設定をして再度アップロードしてみた。
今度はファイルを移動できないとのこと。
ググってみると、XREA の PHP はセーフモードでした。
そのためFTP でディレクトリを作成するとユーザが apache になるために保存できなかったのですね。
そこで下記のようにしました。
- ローカル側で wp-content 内に uploads ディレクトリを作成
- そのディレクトリをアップロード
- FTP で wp-content/uploads ディレクトリに書き込みパーミッションを設定
再度アップロードすると今度はうまく行きました。
他には CGI として PHP を動かす方法もあるようです。
参考サイト
WordPress Japan :: トピックを表示 – XREAでファイルアップロードが出来ない
XREA で WordPress ファイルアップロード機能を利用する – Numb.
PHPをCGIとして動かす方法について – XREA&CORE SUPPORT BOARD
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%; }
WordPress に「はてなスター」を導入してみました
0はてなスターを導入してみました。
このブログは WordPress でやっています。
はてなスターはじめてガイド – Hatena Starに対応ブログサービスに入っていたので早速 JavaScritp コードを header.php の の前に入れてみました。
ところが、サイドメニューの「Category」などの横に表示されてしまいました。
どうも h3タグの中のaタグに☆ボタンを入れているようです。
再度、はてなスターはじめてガイド を見ると
技術的な詳細については、HatenaStar.js下部のドキュメント(英語)をご覧ください。
とあります。早速ソースを見てみると最後の方に色々とドキュメントが書かれています。
// This is the optional script for WordPress blogs
<script src=”http://s.hatena.com/js/Hatena/Star/EntryLoader/WordPress.js” type=”text/javascript”></script>
とありました。
で、
<script src="http://s.hatena.ne.jp/js/HatenaStar.js" type="text/javascript"></script> <script src="http://s.hatena.com/js/Hatena/Star/EntryLoader/WordPress.js" type="text/javascript"></script>
と書くことにより、うまく行きました^^
さらにコメントをつけられるように、自分のブログを登録します。登録すると新たにコメントを付けられる JavaScript が発行されるので、それを追加すると。。。また、h3タグの後ろに☆ボタンが。。。
よくみるとブログ登録後に発行された JavaScritp の1行目は HatenaStar.js を読み込むもので、一番最初に貼り付けたコードと同じでした orz
で、結局ブログ登録後に発行された JavaScript と WordPress.js を読み込む JavaScript を貼り付けることにより、うまく行きました。
ブログ登録後に表示されるコードはトークンが追加されたということですね。