CakePHPでBluetrip(CSSフレームワーク)を使う
BluetripのCSSファイルをapp/webroot/cssにコピーしておく。
app/views/layouts/default.ctpを作成し、レイアウトを変更する。default.ctpは以下のようなコードになるかと思います。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title><?php echo $title_for_layout?></title> <link rel="shortcut icon" href="favicon.ico" type="image/x-icon"> <?php echo $html->css('screen', null, array('media' => 'screen, projection')); ?> <?php echo $html->css('print', null, array('media' => 'print')); ?> <!--[if IE]> <?php echo $html->css('ie', null, array('media' => 'screen, projection')); ?> <![endif]--> <?php echo $html->css('style', array('media' => 'screen, projection')); ?> <?php echo $scripts_for_layout ?> </head> <body> <?php echo $content_for_layout ?> </body> </html>
CakePHPのAuthコンポーネントでメールアドレス&パスワード認証にする
標準ではusername, passwordで認証する形になっているAuth componentですが、ログインする際にメールアドレスを使った方が忘れにくい上、打ち間違いが少なくユーザーにとって良いと思います。
Auth コンポーネントの変数を設定する :: 認証 :: 主要なコンポーネント :: マニュアル :: 1.3コレクション
app/controllers/users_controller.php
<?php function beforeFilter(){ //認証に使うペアをemail, passwordに変更 $this->Auth->fields = array( 'username' => 'email', 'password' => 'password' ); }
app/views/users/login.ctp
<?php if ($session->check('Message.auth')) { $session->flash('auth'); } echo $form->create('User', array('action' => 'login')); echo $form->input('email'); //変更部分 echo $form->input('password'); echo $form->end('Login');
app/views/users/register.ctp
<?php echo $form->create('User'); echo $form->input('email'); //変更部分 echo $form->input('username'); echo $form->input('password'); echo $form->input('password_confirm', array('type' => 'password')); echo $form->end('Register');
コードのフォントが小さくなってしまう問題解消のためにブログのデザインを変更しました
Before
After
はてなダイアリーではプログラムのソースコードを色づけしてきれいに見せることができます。
ソースコードを色付けして記述する(シンタックス・ハイライト) - はてなダイアリーのヘルプ
しかし、ブログのデザインによってはこのシンタックス・ハイライトを使った部分のフォントが妙に小さくなってしまう問題がありました。
そこで、hatena2-darkgrayというデザインに変更したところ、通常のフォントサイズになりました。
CakePHPでAuthコンポーネントを利用して会員認証を実装する方法
CakePHPで会員制サイトを作り始めました。Authコンポーネントは使ったことがなかったので、備忘録代わりに流れを書いておきます。
データベースにusersテーブルを作成する
フィールドはid, username, password, modified, createdを作成
app/controller/app_controller.php
すべてのコントローラでAuthコンポーネントを使うためにAppControllerを定義します。
<?php class AppController extends Controller{ var $components = array('Auth'); }
app/controllers/users_controller.php
アクションを定義します。実装が空ですが、Authコンポーネントがなんとかしてくれます。
<?php class UsersController extends AppController{ var $name = 'Users'; function login(){ //empty for auth component } function logout(){ $this->redirect($this->Auth->logout()); } }
app/views/users/login.ctp
ビューを実装します。
<?php if ($session->check('Message.auth')) { $session->flash('auth'); } echo $form->create('User', array('action' => 'login')); echo $form->input('username'); echo $form->input('password'); echo $form->end('Login');
ここまでで、/users/loginにアクセスすればログイン画面は表示できます。
次は、新規登録画面です。
app/models/user.php
Userモデルを定義していなかったので作成します。
<?php class User extends AppModel{ var $name = 'User'; }
app/controllers/users_controller.php
コントローラに追加してください。
<?php function register(){ //debug('register'); if(isset($this->data)){ //debug('found data'); if($this->data['User']['password'] == $this->Auth->password($this->data['User']['password_confirm'])){ $this->User->create(); $this->User->save($this->data); $this->flash("ユーザー" . $this->data['User']['username'] . 'を登録しました', '/users/login'); }else{ //パスワードと確認用パスワードが一致しなかった場合 $this->flash('パスワードと確認用パスワードが一致していません', '/users/register'); } } }
app/views/users/register.ctp
<?php echo $form->create('User'); echo $form->input('username'); echo $form->input('password'); echo $form->input('password_confirm', array('type' => 'password')); echo $form->end('Register');
とりあえず、これで動作するかと思います。
次はvalidationを行おうかと思います。
なにか不備がありましたら、コメント欄によろしくお願いします。
ブログにスクリーンショットとか貼り付けるためにFlickrを始めてみた
いまさらFlickr始めてみました。登録は簡単で、Yahoo!(America)のアカウントを取得するか、Facebook or Googleのアカウントとひも付けするか、どちらかでした。
スクリーンをキャプチャしてそのままFlickrに送れるアプリケーションを探していたところ、「Jing」というアプリケーションがよさそう。
TechSmith | Jing, instant screenshots and screencasts, home
特に難しいこともなく、アップロードできました。Flickrを利用するには設定でFlickrボタンを追加する必要があります。Clipboard ContentsをEmbed Codeにしておくと、クリップボードのHTMLをペーストするだけで済むので、非常に便利です。
ブックマークバーを最大限に活用する方法
この方法はおそらくChrome以外のブラウザでも活用できると思います。ありきたりといえばありきたりな方法なので既にやっている人も多いと思いますが、紹介してみます
- フォルダを作成し、その中にブックマークを整理する
ブックマークバーは狭いので、ブックマークを生身のまま配置するとすぐいっぱいになってしまいます。私は、My Site, SNS, English...のようにフォルダを作成し整理しています。2階層にしてもよいでしょう。
- よく使うブックマークはフォルダに入れない
フォルダに入れると1クリック動作が増えてしまいます。よく使うサイト(Gmailなど)はフォルダに入れずルート階層に並べておくと良いでしょう。
- ルート階層にあるブックマークはタイトルを消す
最近のWebサイトはFaviconを用意していることがほとんどです。アイコンを見ればどのサイトだか分かるのだったら、文字でサイト名が書いて無くても大丈夫ですよね。
[右クリック]->[編集...]->[名前]を空欄にしましょう。すっきりして、広々使えますよ。
CakePHPでページネーションをする
たいていのウェブサイトではページネーションをする必要が出てくると思います。
ページネーションの処理は自分で実装するのは意外に大変ですので、CakePHPに頼るのがよいでしょう。CakePHPにはPagenateメソッドとPagenatorヘルパーという力強い機能があります。
CakePHPでページネーションを実装する上で参考になるページを集めました。
ページ付け(Pagination) :: CakePHPによる作業の定石 :: マニュアル :: 1.3コレクション
CakePHP公式のリファレンスです。わかりやすく書かれているのでまずこれを読むのがよいかと。
CakePHPで高速Webアプリ開発:第15回 Paginationで面倒なページ繰り処理とおさらばしよう|gihyo.jp … 技術評論社
日本のCakePHPerの代表格のakiyanさんの連載です。参考になります。
CakePHP Note > コントローラー > ページング | GARACTER
上記2ページには載っていない情報があります。うまくまとまっています。
Pagination of data from a HABTM relationship - cakebaker
英語です。HABTMのモデルでページネーションをする際には参考になります。
たとえば、RecipeモデルとTagがあった際、この2つのモデルは互いに複数のRecipe, Tagと関連を持ちますが、ある特定のTagを持つRecipeを出力しページネーションしたい、場合などです。