Zend Framework實(shí)現(xiàn)具有基本功能的留言本(附demo源碼下載)
本文實(shí)例講述了Zend Framework實(shí)現(xiàn)具有基本功能的留言本。分享給大家供大家參考,具體如下:
一個(gè)留言本...具有的基本功能就是.1.發(fā)表留言. 2.回復(fù)留言.3.管理留言(修改,刪除等操作).
我這里只是寫(xiě)了基本的操作,比如加留言驗(yàn)證碼.頁(yè)面的美化什么的我都
沒(méi)有做.我只是給大家一個(gè)思想..很多東西要靠我們自己去學(xué)了.
另一個(gè)就是我的留言用了AJAX.就是你一發(fā)表.數(shù)據(jù)就會(huì)在頁(yè)面顯示..不過(guò)大家要了解Jquery的AJAX的用法..我相信大部分人都會(huì)這個(gè)JS類(lèi)庫(kù)吧.
要是不懂也沒(méi)關(guān)系..你們可以改成不是AJAX的..只要把發(fā)表留言的FROM的提交動(dòng)作轉(zhuǎn)換成我們控制里的一個(gè)動(dòng)作..相信這個(gè)不是問(wèn)題.好了..開(kāi)始工作:
我們的目錄結(jié)構(gòu)和以前一樣,大致不變..下面要有改動(dòng)的..大家也不要急..我會(huì)教大家如何做:
第一:先建立好我們的模板頁(yè)面(View)..
按照上篇教程的目錄.application/views/scripts目錄下有一些模板頁(yè).如(index.phtml,edit.phtml).我們刪除它們..現(xiàn)在加一個(gè)message文件夾.
在message里加上(edit.phtml,index.phtml,message.phtml)三個(gè)模板文件.完成后.我們?cè)赼pplication/views/scripts/目錄下加上(header.phtml,footer.phtml)二個(gè)模板文件.
因?yàn)檫@二個(gè)文件以后會(huì)重用來(lái)..所以把他們直接放到application/views/scripts/下..好了模板建立好了.現(xiàn)在就是加入一個(gè)HTML.JS.IMAGE了.我把他們這些都放在網(wǎng)站根目錄public文件夾下.大家可以對(duì)應(yīng)我的源碼來(lái)看一下..要是有點(diǎn)亂..請(qǐng)大家根據(jù)源碼來(lái)看這教程..(^_^不好意思,我只能這樣表達(dá).我也不知道如何寫(xiě)才能讓你們更了解.請(qǐng)大家體諒啊!)
第二:接下來(lái),我們寫(xiě)我們的數(shù)據(jù)層程序(Model).
1.我們?cè)谠瓉?lái)的表中加上下面幾個(gè)字段:pid(標(biāo)志是否是回復(fù),0為留言.為為0的是為回復(fù)) ,author(留言者),headimg(留言者頭像),email(留言者電子郵件), ip(留言者IP地址),
show(留言是否顯示.這個(gè)要在生臺(tái)管理能用.這教程這里沒(méi)有用到.), addtime(留言時(shí)間), updatetime(留言修改時(shí)間).字段類(lèi)型的設(shè)置請(qǐng)大家看源碼SQL文件.
2.我們?cè)赼pplication/models/目錄下有一個(gè)Message.php.我們先寫(xiě)好我們留言本的Model .主要是對(duì)留言本數(shù)據(jù)層的操作.我增加了下面幾個(gè)方法:
getAllMessage(取到所有的留言) , getAllReMessage(取到所有的回復(fù)留言數(shù)據(jù)) , getMessageByID(根據(jù)ID取留言數(shù)據(jù)), updateMessageByID(修改留言), delMessageByID(刪除留言)
具體程序如下(程序上面也有注解):
class Message extends Zend_Db_Table
{
protected $_name ="message";
protected $_primary = 'id';
/* * 取到所有的留言 */
public function getAllMessage(){
$messageArray=$this->fetchAll("message.pid=0",
"message.id DESC")->toArray();
return $messageArray;
}
/* * 取到所有的回復(fù)留言數(shù)據(jù) */
public function getAllReMessage(){
$ReArray=$this->fetchAll("message.pid!=0",
"message.id DESC")->toArray();
return $ReArray;
}
/* * 根據(jù)ID取留言數(shù)據(jù) */
public function getMessageByID($id){
$messageone=$this->fetchAll('id='.$id)->toArray();
return $messageone;
}
/* * 修改留言 */
public function updateMessageByID($array,$id){
$db = $this->getAdapter();
$where=$db->quoteInto('id = ?', $id);
$this->update($array, $where);
}
/* * 刪除留言 */
public function delMessageByID($id){
$where = 'id = ' . $id;
$this->delete($where);
return true;
}
}
第三:完成上面二項(xiàng).最后就我們的控制層了(Controller).打開(kāi)application/controllers/IndexController.php這個(gè)控制器..把原來(lái)的不要的東西給刪除了.我在上面加上了下面
一個(gè)message方法(也叫動(dòng)作Action).不過(guò)其它的Action都有改動(dòng)..請(qǐng)大家參與源碼來(lái)進(jìn)行分析.這里我只貼也我新加入的messageAction這個(gè)方法(代碼上都有注解.請(qǐng)自行查看.謝謝):
public function messageAction()
{
if($this->_request->isPost()){
Zend_Loader::loadClass('Zend_Filter_StripTags');
$filter=new Zend_Filter_StripTags();
$username=$filter->filter($this->_request->getPost('username'));
$email=$filter->filter($this->_request->getPost('email'));
$content=$filter->filter($this->_request->getPost('content'));
$title=$filter->filter($this->_request->getPost('title'));
$messageid=$filter->filter($this->_request->getPost('messageid'));
$headimg=$filter->filter($this->_request->getPost('headimg'));
$message=new Message();
$db=$message->getAdapter();
if($username!=''&&$email!=''&&$messageid!=''&&$content!=''){
require_once 'Zend/Validate/EmailAddress.php';
$validator = new Zend_Validate_EmailAddress();
if ($validator->isValid($email)) {
//取IP地址..這里只是簡(jiǎn)單取IP
$IP=$_SERVER ["REMOTE_ADDR"];
$data=array(
'title'=>$title,
'author'=>$username,
'pid'=>$messageid,
'headimg'=>$headimg,
'email'=>$email,
'show'=>'1',
'content'=>$content,
'ip'=>$IP,
'addtime'=>time(),
'updatetime'=>time()
);
$message->insert($data);
$db->lastInsertId();
unset($data);
//取到所有留言getAllMessage,getAllReMessage
//二個(gè)方法在Model(Message.php)里定義的
$this->view->messages=$message->getAllMessage();
//取到所有回復(fù)數(shù)據(jù)
$this->view->arrReviews=$message->getAllReMessage();
$this->view->flag='0';
$this->view->message='您的留言發(fā)表成功!';
echo $this->view->render('message/message.phtml');
} else {
$this->view->flag='5';
$this->view->message='對(duì)不起!您填寫(xiě)有電子郵箱地址有誤!';
echo $this->view->render('message/message.phtml');
}
}elseif($username==''){
$this->view->flag='1';
$this->view->message='對(duì)不起!您的大名不能為空!';
echo $this->view->render('message/message.phtml');
}elseif($messageid==''){
$this->view->flag='2';
$this->view->message='對(duì)不起!回復(fù)留言編號(hào)不能為空!';
echo $this->view->render('message/message.phtml');
}elseif($content==''){
$this->view->flag='3';
$this->view->message='對(duì)不起!您填寫(xiě)的留言內(nèi)容不能為空!';
echo $this->view->render('message/message.phtml');
}
}else{
echo $this->view->render('message/index.phtml');
}
}
只是沒(méi)有驗(yàn)證碼以及分頁(yè)功能..后面一篇會(huì)有教程進(jìn)一步講解.
總結(jié):到這里就完成了一個(gè)留言本的編寫(xiě).當(dāng)然很簡(jiǎn)單的功能..還是那句話.我只是把我會(huì)的寫(xiě)給大家..只是一個(gè)思想..我也只會(huì)這些..所以寫(xiě)的好與不好..請(qǐng)大家自己進(jìn)行權(quán)衡
完整實(shí)例代碼點(diǎn)擊此處本站下載。
更多關(guān)于zend相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Zend FrameWork框架入門(mén)教程》、《php優(yōu)秀開(kāi)發(fā)框架總結(jié)》、《Yii框架入門(mén)及常用技巧總結(jié)》、《ThinkPHP入門(mén)教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家基于Zend Framework框架的PHP程序設(shè)計(jì)有所幫助。
- Zend Framework框架教程之Zend_Db_Table_Rowset用法實(shí)例分析
- Zend Framework教程之Zend_Db_Table_Row用法實(shí)例分析
- Zend Framework教程之Zend_Db_Table用法詳解
- Zend Framework教程之Zend_Form組件實(shí)現(xiàn)表單提交并顯示錯(cuò)誤提示的方法
- Zend Framework開(kāi)發(fā)入門(mén)經(jīng)典教程
- Zend Framework框架Smarty擴(kuò)展實(shí)現(xiàn)方法
- Zend Framework框架路由機(jī)制代碼分析
- Zend Framework實(shí)現(xiàn)將session存儲(chǔ)在memcache中的方法
- Zend Framework分頁(yè)類(lèi)用法詳解
- Zend Framework實(shí)現(xiàn)多文件上傳功能實(shí)例
- Zend Framework入門(mén)之環(huán)境配置及第一個(gè)Hello World示例(附demo源碼下載)
- Zend Framework教程之連接數(shù)據(jù)庫(kù)并執(zhí)行增刪查的方法(附demo源碼下載)
- Zend Framework教程之Zend_Db_Table表關(guān)聯(lián)實(shí)例詳解
相關(guān)文章
Laravel框架分頁(yè)實(shí)現(xiàn)方法分析
這篇文章主要介紹了Laravel框架分頁(yè)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Laravel框架實(shí)現(xiàn)分頁(yè)功能的核心代碼及其相關(guān)原理,需要的朋友可以參考下2018-06-06
通過(guò)代碼實(shí)例解析PHP session工作原理
這篇文章主要介紹了通過(guò)代碼實(shí)例解析PHP session工作原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
php實(shí)現(xiàn)的mongodb操作類(lèi)
說(shuō)到php連mongoDB,不得不先介紹一下php的官方手冊(cè),網(wǎng)址在:http://us.php.net/manual/en/book.mongo.php,接下來(lái)給大家分享一個(gè)本人常用的MONGODB的操作類(lèi),詳見(jiàn)的數(shù)據(jù)庫(kù)操作都有了,小伙伴可以參考下。2015-05-05
Laravel 的數(shù)據(jù)庫(kù)遷移的方法
本篇文章主要介紹了Laravel 的數(shù)據(jù)庫(kù)遷移的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
PHP in_array()函數(shù)基本語(yǔ)法及嚴(yán)格比較使用實(shí)例
PHP是一種常用的服務(wù)器端腳本語(yǔ)言,提供了豐富的內(nèi)置函數(shù)來(lái)簡(jiǎn)化開(kāi)發(fā)過(guò)程,其中,in_array()函數(shù)是一種非常有用的函數(shù),用于判斷數(shù)組中是否存在指定的值,本文將詳細(xì)介紹in_array()函數(shù)的用法,并提供具體的代碼示例2024-01-01
laravel接管Dingo-api和默認(rèn)的錯(cuò)誤處理方式
今天小編就為大家分享一篇laravel接管Dingo-api和默認(rèn)的錯(cuò)誤處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
thinkPHP3.2簡(jiǎn)單實(shí)現(xiàn)文件上傳的方法
這篇文章主要介紹了thinkPHP3.2簡(jiǎn)單實(shí)現(xiàn)文件上傳的方法,重點(diǎn)介紹了thinkPHP實(shí)現(xiàn)文件上傳功能的控制器文件相關(guān)技巧,需要的朋友可以參考下2016-05-05

