2009/10/27

ET withwithにてCakePHPカスタマイズ色々

昨日今日と更新していませんでしたが、あまりにも作業がごちゃごちゃし過ぎてて、ブログにまとめるのも一苦労しそうだったので、ペンディングにしてました。

1.ログインステータス周り

これは簡単です。ログインしているユーザ名の表示と、ログアウトのリンクを出しています。

default.ctp

<?php
if ($this->action != "login") {
echo "logged in as ";
echo h($session->read(‘user’));
echo ". ";
echo $html->link("logout", array(‘controller’ => ‘users’, ‘action’ => ‘logout’));
}
?>

2.ログインに必要な項目の追加

ET withwithでは新たにOrganizationというテーブルを追加して、利用組織ごとに違う情報を表示させるようにしたいと考えました。よって、Userコントローラでの処理が必要になって来ます。

users_controller.php

function beforeFilter() {
if(($this->action == ‘login’)) {
$this->Auth->userScope = array(‘Organization.organization’=> $this -> data[‘Organization’][‘organization’]);
$this->Auth->autoRedirect = false;
}
parent::beforeFilter();
}

これでOrganizationでも認証が行われるようになります。ModelでしっかりUserがOrganizationに対してBelongsToの関係に定義されている必要があります。

function login() {
if ($this->Auth->user()) {
$this->redirect(array(‘controller’ => ‘contents’, ‘action’ => ‘index’));
}
}

ログインのところですが、条件決めておかないと、Redirectが多過ぎますってブラウザに言われちゃうようです。

後はひたすら、ほぼ全てのテーブルの表示の条件にOrganizationを追加していく作業があってこいつが結構大変でした。

3.Sessionを使わないPagination

ページ繰り処理にはSessionを使っていたのですが、不都合がありまして、後輩にURLパラメータで受け渡す形にした方がいいんじゃないかというご助言をいただきまして、採用。

“条件をつけたpaginateでページ繰りができない” フォーラム – CakePHP Users in Japan

ここで話題になっていた方法でやりました。

contents_controller.php

if (!empty($id)) {
$where = array("Content.category_id" => $id);
$where = array("and" => array("Content.organization_id" => $organname, $where));
} else if (isset($this->params["named"]["filters"])) {
$where = unserialize($this->params["named"]["filters"]);
}
if (!empty($where)){
$this->set(‘contents’, $this->paginate(‘Content’,$where));
$this->set("filters", array("url" => "filters:". urlencode(serialize($where))));
} else {
$where = array("Content.organization_id" => $organname);
$this->set(‘contents’, $this->paginate(‘Content’,$where));
}

contents_index.ctp

| <?php echo $paginator->numbers($filters);?>

本当は$paginator->prevと$paginator->nextも使いたかったんですが、フォーラムでも話題になっていたのですが、正しく機能しないんですよね。。。悩ましい。後日の課題です。

そんなところで、大分形になって来ました。Organizationで切り分けたので、Demoも走らせられますし。やっとこさ、ここまで、という感じです。

加藤 康祐 / 企画・設計

プランナー、デザイナー。加藤康祐企画設計代表。Webデザインを入り口に、2005年よりフリーランスとしてのキャリアスタート。主な仕事としてベンチャー企業でのサービスのUXデザイン、独法との防災メディアの運営、社会的養護の子どもたちの自立を支援するNPOのサポート。ラグビーと料理、最近イラスト。

加藤康祐企画設計

是非、フォローしてください!
Twitter / Instagram

(2012-10-5)
売り上げランキング: 14,705
100円