[Site] マイページ機能 その1

タグ :

作成サイト「koweboo」についてまとめるシリーズです。
今回はマイページ機能についてです。

ユーザー登録が完了すると、ユーザー個々のプロフィールが表示されるマイページ機能が利用できるようにします。
マイページはログインユーザーが自分のプロフィールを設定するものです。

作成サイト内の関連箇所 — 「マイページ

基本仕様

マイページで表示する内容は以下になります。

  • ニックネーム
  • 自己紹介文
  • 活動地域
  • 生年月日
  • 職業
  • 性別
  • …etc

マイページはログインユーザーのみが編集できるようにしなければいけません。
そのためログインユーザー以外が閲覧した場合は編集画面へ遷移できないようにします。

ニックネームはユーザー登録時に入力した名前になります。
ニックネームは変更も可能ですが、未入力ではエラーとします。
それ以外の項目は基本的に未入力でも OK とします。

テーブル作成

プロフィール用のテーブルを新たに作成しても良いですが、今回はユーザー登録機能を作成時に使用した名前テーブルを利用したいと思います。
以下のように変更します。

[profiles]
フィールド名 名称 説明
id プロフィールID 主キー
user_id ユーザーID ユーザーテーブルの主キー
name ユーザー名 ユーザー登録時に入力した名前
area 活動地域 都道府県名とか
birth 生年月日 年月日をセレクトタグで選択
sex 性別 男 or 女 or その他
work 職業 仕事内容とか
text 自己紹介 任意の文章を入力

テーブル名を変更すると、過去に作成したユーザー登録処理のテーブル名の部分も変更が必要です。(今回の場合は「Name」を「Profile」に変更。)
必要に応じて書き換えてください。

基本ファイル生成

プロフィールテーブルを作成したら Bake します。
「profiles」はモデルのみ Bake で良いです。
ユーザーテーブル(User.php)も Bake し直しても良いですが、「Name」の部分を「Profile」に変更するだけなので、手動で変更しちゃいます。

public $hasMany = array(
	'Profile' => array(
		'className' => 'Profile',
		'foreignKey' => 'user_id',
		...
	),
);

データ取得処理

まずは表示できるようにします。
コントローラ(UsersController.php)の index() にデータ取得処理を加えます。

// ログインユーザー情報
$user = $this->Auth->user();
// データをモデルから取得
$id = $user['id'];
$data = $this->User->find('first', array(
	'conditions' => array('User.id' => $id)
));
// ビューへ値渡し
if ($data['Profile']) {
	$this->set('user_name', $data['Profile'][0]['name']);
	$this->set('user_text', $data['Profile'][0]['text']);
	$this->set('user_area', $data['Profile'][0]['area']);
	if ($data['Profile'][0]['birth'] != 0) {
		$this->set('user_birth', $data['Profile'][0]['birth']);
	} else {
		$this->set('user_birth', STR_NULL);
	}
	$this->set('user_work', $data['Profile'][0]['work']);
	$this->set('user_sex', $data['Profile'][0]['sex']);
}

1〜4行目ではログインユーザーIDを取得し、5行目のデータ取得でログインユーザーのプロフィールのみを取得しています。
IDを指定して取得するので、当然 1件 しか取得しません。
find() の第一引数には「all」ではなく「first」にすることで、取得した後のデータが扱いやすくなります。
以下は「$data」を debug() で表示させた画像です。

site_mypage_index_1

データを取得できたら、ビューへ受け渡す処理を追記します。
「birth」だけは「DATETIME」型で登録しており、登録していない状態だと「0」値として取得されるので注意が必要です。

マイページの表示

次にビュー(Usersフォルダ)の「index.ctp」を変更します。

<div class="users index">
	<h2><?php echo $user_name.__('\'s page'); ?></h2>
	<h3><?php echo $this->Html->link(__(STR_MYPAGE_EDIT), PAGE_MYPAGE_EDIT); ?></h3>
	<?php if ($user_text) : ?>
		<h3><?php echo __("Introduction"); ?></h3>
		<p><?php echo __($user_text); ?></p>
	<?php endif; ?>
	<?php if ($user_area) : ?>
		<h3><?php echo __("Area"); ?></h3>
		<p><?php echo __($user_area); ?></p>
	<?php endif; ?>
	<?php if ($user_birth) : ?>
		<h3><?php echo __("Birthday"); ?></h3>
		<p><?php echo __($user_birth); ?></p>
	<?php endif; ?>
	<?php if ($user_work) : ?>
		<h3><?php echo __("Work"); ?></h3>
		<p><?php echo __($user_work); ?></p>
	<?php endif; ?>
	<?php if ($user_sex) : ?>
		<h3><?php echo __("Sex"); ?></h3>
		<p><?php echo __($user_sex); ?></p>
	<?php endif; ?>
</div>

内容をざっくり説明すると、コントローラで取得したデータが NULL でなかったら項目と内容を表示する、というものになります。
ユーザー登録した直後は何も登録されていないので、名前だけが表示されるだけです。

site_mypage_index_2

これでマイページ表示の準備が整いました。
次はマイページの編集についてですが、続きは次回に。。。

Share

  • このエントリーをはてなブックマークに追加

Comment

コメントを残す

*がついている欄は必須項目です。

  • Twitter
  • Facebook
  • Google Plus
  • RSS Feed