文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>QeePHP基础教学-建置留言簿之回复功能

QeePHP基础教学-建置留言簿之回复功能

时间:2008-04-12  来源:qeeify


今天将上次的留言版扩充,增加的回复的功能。
先看看结果吧:

1.建立数据表
CREATE TABLE IF NOT EXISTS `reply` (
  `reply_id` int(10) NOT NULL AUTO_INCREMENT,
  `guestbook_id` int(10) NOT NULL,
  `content` text COLLATE utf8_unicode_ci NOT NULL,
  `created` int(10) NOT NULL,
  PRIMARY KEY (`reply_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;

2.修改上次的数据表(这是全新建立)
如果要使用升级的话,请将上次的主键id改成主键guestbook_id
执行SQL语法:
CREATE TABLE IF NOT EXISTS `guestbook` (
  `guestbook_id` int(10) NOT NULL AUTO_INCREMENT,
  `nickname` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `website` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `content` text COLLATE utf8_unicode_ci NOT NULL,
  `created` int(10) NOT NULL DEFAULT '0',
  PRIMARY KEY (`guestbook_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci ;

3.新增控制器方法
我们在\app\controller\default_controller.php新增以下代码:
protected function actionReply() {
        if($this->request->isPOST()) {
            $create = new Reply();
            $create->guestbook_id = $this->request->id;
            $create->nickname = htmlspecialchars($this->request->nickname);
            $create->content = htmlspecialchars($this->request->content);
            $create->save();
            return new QResponse_Redirect($this->url->make());
        }else{
            echo "Error...";
        }
    }

4.修改视图
我们将\app\view\default\index.php修改成以下代码:
h1>::Guestbook::/h1>
  div id="messageList">
    h2>Message List/h2>
?php foreach($guestbook as $kay => $content){ ?>
    div class="content">
      div>span class="nickname">Nickname:?php echo $content['nickname']; ?>/span>
       [ ?php echo date("Y-m-d", $content['created']);?> ]
       | a href="">E-mail/a>
       | a href="">Website/a>
       | a class="replyButton" rel="">Reply/a>/div>
      div>?php echo $content['content']; ?>/div>
?php if(isset($content['reply'])) { ?>
?php foreach($content['reply'] as $reply) { ?>
      div class="reply">?php echo $reply['content']; ?>/div>
?php } ?>
?php } ?>
      div class="replyForm">
        h2>Reply/h2>
        form action="url->make(null, 'Reply');?>" method="post">
          textarea id="content" name="content" rows="3" cols="60">/textarea>
          input type="submit" value="Submit" />input name="id" type="hidden" value="" />
        /form>
      /div>
    /div>
?php } ?>
  /div>
  div id="postForm">
    h2>Leave a message/h2>
    form id="guestbook" action="url->make(null, 'Create');?>" method="post">
      p>label for="nickname">Nickname/label>input id="nickname" name="nickname" type="text" size="20" />/p>
      p>label for="email">E-mail/label>input id="email" name="email" type="text" size="20" />/p>
      p>label for="website">Website/label>input id="website" name="website" type="text" size="20" />/p>
      p>textarea id="content" name="content" rows="10" cols="65">/textarea>/p>
      p>input type="submit" value="Submit" />/p>
    /form>
  /div>

5.新增模型
将以以下方法覆盖\app\table\guestbook.php原本之方法。
内容如下:
static function __define() {
        return array(
            // 用什么数据表保存对象
            'table_name' => 'guestbook',
            // 指定数据表记录字段与对象属性之间的映射关系
            // 没有在此处指定的字段,QeePHP 会自动设置将字段映射为对象的可读写属性
            'fields' => array(
                // 主键应该是只读,确保领域对象的“不变量”
                'guestbook_id' => array('readonly' => true),
                // 对象创建时间应该是只读
                'created' => array('readonly' => true),
                /**
                 * 添加对象间的关联
                 */
                'reply' => array(
                    'has_many' => 'Reply',
                ),
            ),
        );
    }

新增:\app\table\reply.php
?php
class Reply extends QDB_ActiveRecord_Abstract {
    /**
     * 返回对象的定义
     *
     * @static
     *
     * @return array
     */
    static function __define() {
        return array(
            // 用什么数据表保存对象
            'table_name' => 'reply',
            // 指定数据表记录字段与对象属性之间的映射关系
            // 没有在此处指定的字段,QeePHP 会自动设置将字段映射为对象的可读写属性
            'fields' => array(
                // 主键应该是只读,确保领域对象的“不变量”
                'guestbook_id' => array('readonly' => true),
                // 对象创建时间应该是只读
                'created' => array('readonly' => true),
                /**
                 * 添加对象间的关联
                 */
                'reply' => array(
                    'has_many' => 'Reply',
                ),
            ),
        );
    }
    /**
     * 开启一个查询,查找符合条件的对象或对象集合
     *
     * @static
     *
     * @return QDB_ActiveRecord_Select
     */
    static function find() {
        $args = func_get_args();
        return parent::__find(__CLASS__, $args);
    }
    /**
     * 实例化所有符合条件的对象,并调用这些对象的 destroy() 方法,返回成功删除的对象的数量
     *
     * @static
     *
     * @param mixed $where
     *
     * @return int
     */
    static function destroyWhere() {
        $args = func_get_args();
        return parent::__destroyWhere(__CLASS__, $args);
    }
    /**
     * 对数据进行验证,返回所有未通过验证数据的名称错误信息
     *
     * @param array $data
     * @param array|string $fields
     *
     * @return array
     */
    static function validate(array $data, $props = null) {
        return parent::__validate(__CLASS__, $data, $props);
    }
}
?>

7.修改模板
修改模板:\app\view\_layouts\default_layout.php,将下面的样式写在default_layout.php。
CSS:
body {
  width: 600px;
  margin: 10px auto;
  font-size: 0.85em;
  background: #EEF3F7;
  overflow: scroll;
}
h1 {
  padding-left: 15px;
  font-size: 3em;
}
h2 {
  margin-bottom: 5px;
  padding-bottom: 3px;
  padding-left: 10px;
  background: #EFF7FF;
  border-bottom: 2px solid #96C2F1;
  border-right: 2px solid #96C2F1;
  font-size: 2em;
}
#messageList {
  margin: 15px;
}
#messageList .content {
  margin-bottom: 7px;
  padding: 3px;
  background: #EFF7FF;
  border: 1px solid #96C2F1;
  border-bottom: 2px solid #96C2F1;
  border-right: 2px solid #96C2F1;
}
#messageList .content div:first-child {
  background: #B2D3F5;
}
#messageList .reply {
  margin-bottom: 7px;
  padding: 3px;
  background: #EFEFEF;
  border: 1px solid #96C2F1;
  border-bottom: 2px solid #96C2F1;
  border-right: 2px solid #96C2F1;
}
.nickname {
  width: 200px;
  display: block;
  float: left;
}
#postForm,
#replyForm {
  margin: 15px;
}
#postForm form,
#replyForm form {
  background: #EFF7FF;
  padding: 0 3px;
  border: 1px solid #96C2F1;
  border-bottom: 2px solid #96C2F1;
  border-right: 2px solid #96C2F1;
}
#postForm label,
#replyForm label {
  width: 60px;
  margin-right: 5px;
  float: left;
  display: block;
  text-align: right;
}
input, textarea{
  border: 1px solid;
}

请加入下面这段JavaScript来控制回复窗体的出现:
script type="text/javascript" src="http://code.jquery.com/jquery-latest.js">/script>
script type="text/javascript">
$(document).ready(function(){
  $(".replyForm").hide();
  $(".replyButton").toggle(function(){
    var id = $(this).attr('rel');
    $(".replyForm:eq(" + id + ")").show();
  }, function(){
    var id = $(this).attr('rel');
    $(".replyForm:eq(" + id + ")").hide();
  });
});
/script>

我们这次的目标 - 回复功能也已经完成,QeePHP帮我们简化了许多事情,表关联也只要多定义三行(里面还有一堆缩排),就能够自行处理。
原文地址:
http://qeeify.com/index.php/2008/03/26/qeephp-tutoeais-guestbook-2.html
更多信息,请访问 FleaPHP/QeePHP 开源开发框架官方网站:
http://www.fleaphp.org/



相关阅读 更多 +
排行榜 更多 +
粉末星战 v1.0.0 安卓版

粉末星战 v1.0.0 安卓版

休闲益智 下载
粉末星战 v1.0.0 安卓版

粉末星战 v1.0.0 安卓版

休闲益智 下载
火线反恐部队 v1.2 安卓版

火线反恐部队 v1.2 安卓版

飞行射击 下载