PHP北海道
脱はてダして居酒屋を開発する
2007/09/29 15:17:33 | comment(1124)
自分のホームをつくる
セッションに入れた値を取る
ログインした時の情報は、LoginConditionでRequestLogin::setLoginSessionされていて、セッションに格納されてます。
RequestLogin::getLoginSession();とするとセットした情報がとれます。
ただ、セッションがスタートしてないと駄目なので、今回は__init__.phpに次のように書きました。
<?php
include_once("./__settings__.php");
Rhaco::import('model.User');
Rhaco::usesession();
Rhaco::constant("HTML_TEMPLATE_ARG_ESCAPE", true);
User情報を格納しているので、session_startの前にmodel.Userをimportしておく必要があります。
そして、ついでにHTML_TEMPLATE_ARG_ESCAPEもセットしておきます。こうすると、テンプレートで{$f.escape()}しなくても、常にescapeされた値になります。ただ、HTMLを表示したい場合などもあるので、そのときは{$f.noop()}に入れると、escapeを外せます。
これでは__init__.phpにusesessionしましたが、network.http.Requestをnewしてもsession_startするようです。
index.phpの実装
次に、自分のホームになるところを実装してみます。
とりあえずindex.phpとしてみました。
特別なことはしてません。DB操作もしたかったので、sessionに格納されてる値をまたDBから取ってくるとか無駄なことしてますが、許してください。。w
<?php
require_once '__init__.php';
Rhaco::import('network.http.RequestLogin');
Rhaco::import('network.http.Header');
Rhaco::import('database.DbUtil');
Rhaco::import('database.model.Criteria');
Rhaco::import('database.model.Q');
Rhaco::import('tag.HtmlParser');
if(!RequestLogin::isLogin()){
Header::redirect(Rhaco::url('login.php'));
}
$template = new HtmlParser();
$user = RequestLogin::getLoginSession();
$db = new DbUtil(User::connection());
$object = $db->get(new User(), new Criteria(Q::eq(User::columnId(), $user->getId())));
if(is_null($object)){
$template->write('404.html');
Rhaco::end();
}
$template->setVariable('object', $object);
$template->write(Rhaco::constant("TEMPLATE") . '/index.html');
相変わらずis_nullで判定してますが、rhaco的にこれで良いのかどうか自信が無いです。。。
index.htmlを書く
次に表示部分ですが、前回?くらいにindex.htmlは用意してあるので、そこに変数を入れたりしてみました。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link href="{$rhaco.templateurl('cdp')}/theme/{$rhaco.constant('THEME')}/style.css" rel="stylesheet" type="text/css" /> <title>{$rhaco.constant('SITE_TITLE')}</title> <style type="text/css"> <!-- label { position: absolute; text-align: right; width: 130px; } input,textarea { margin-left: 140px; } --> </style> </head> <body> <div id="PAGETOP"> <div id="HEADER"> <h1>{$rhaco.constant('SITE_TITLE')}</h1> <ul id="PAN"> <rt:block name="pan"> <li>{$object.name}</li> </rt:block> </ul> </div> <hr> <div id="MENU"> <h2>menu</h2> <ul> <rt:block name="menu"> <li id="MENU01" class="menu-on"><a href="{$rhaco.url()}">index</a></li> <li id="MENU02"><a href="{$rhaco.url()}">Diary</a></li> <li id="MENU03"><a href="{$rhaco.url()}">Friends</a></li> <li id="MENU04"><a href="{$rhaco.url('setting.php')}">Settings</a></li> <li id="MENU05"><a href="{$rhaco.url()}">Logout</a></li> </rt:block> </ul> </div> <hr> <div id="KIZI"><rt:block name="content"> <h2>{$object.name}</h2> <div class="text"> <h3>My Profile</h3> <p><rt:if param="{$object.picture}"> <img align="left" src="{$rhaco.url('resources/picture')}/{$object.picture}" alt="{$object.name}'s Picture." style="margin: 5px;" /> </rt:if> {$f.noop($f.text2html($object.profile))}</p> <h3>My friend's new diary</h3> <ul> <li><a href="{$rhaco.url()}">sample</a> (test) - 10 minutes ago.</li> <li><a href="{$rhaco.url()}">sample</a> (test) - 2 days ago.</li> <li><a href="{$rhaco.url()}">sample</a> (test) - 3 days ago.</li> </ul> <ul class="modori"> <li><a href="#PAGETOP">TOP</a></li> </ul> </div> </rt:block></div> <div id="FOOTER"> <h2>Address</h2> <ul> <li id="FOOTER01"><a href="#PAGETOP">TOP</a></li> <li id="FOOTER02"> <address><a href="http://d.riaf.org/">rhacosns</a></address> </li> <li id="FOOTER03"> <address><a href="http://www.rhaco.org/">made with rhaco</a></address> </li> </ul> </div> </div> </body> </html>
次の記事で、自分の情報を変更できるようにしたいと思うので、setting.phpへのリンクも忍び込ませておきました。
さらに、Cake版での実装があった、自分の写真のアップロードもしたいので、pictureの項目を増やして、画像をアップロードしている場合にそれを表示するようにもしてあります。
詳しくは次の記事で説明しますが、今回の変更でproject.xmlに少し変更があります。
<table name="user" admin="true">
<column name="id" type="serial" />
<column name="name" type="string" size="50" require="true" />
<column name="email" type="email" unique="true" require="true" />
<column name="password" type="string" require="true" />
<column name="profile" type="text" require="true" />
<column name="created" type="timestamp" default="sysdate" />
<column name="modified" type="timestamp" default="sysdate" />
<column name="picture" type="string" />
</table>
userテーブルにpictureの項目を追加しました。
DBを一旦削除してsetupをもう一度実行するか、alter tableしてuserにpictureを追加してください。
どちらにしても、setupでのテーブルクラスの更新は必要になります。
- 自分のホームをつくる posted by ovmmajhc
- rhacoでSNSっぽいものをつくって挫折するまでのコーディング日記 posted by natbesm
- ひゃー! posted by ryczlqajpqt
- 5分でConveyorを動かすまで posted by ubgxgtkf
- 文字数値参照の記事を文字に変換するConveyorプラグイン posted by iifgqtjcgw
