免費(fèi)預(yù)覽已結(jié)束,剩余19頁(yè)可下載查看
下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
基于ThinkPHP框架的博客系統(tǒng)摘要:隨著計(jì)算機(jī)和因特網(wǎng)的飛速發(fā)展,互聯(lián)網(wǎng)信息資源日益豐富。博客,就是網(wǎng)絡(luò)上發(fā)布和記錄的流水日志,也被稱(chēng)為“網(wǎng)絡(luò)日志”,它以簡(jiǎn)易迅速便捷的方式發(fā)布自己的心得,及時(shí)有效輕松地與他人進(jìn)行交流,再集豐富多彩的個(gè)性化展示于一體的綜合性平臺(tái),打破傳統(tǒng)報(bào)刊、雜志撰寫(xiě)文章的方式,是代表著新的生活方式和新的工作方式,更代表著新的學(xué)習(xí)方式。系統(tǒng)采用PHP動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)技術(shù),MYSQL數(shù)據(jù)庫(kù),APACHE服務(wù)器,利用ThinkPHP開(kāi)源框架技術(shù), HTML+CSS+javascript等腳本語(yǔ)言,實(shí)現(xiàn)基于B/S模式的個(gè)人日志發(fā)表和交流的平臺(tái)個(gè)人博客系統(tǒng)。關(guān)鍵詞:博客系統(tǒng)PHPThinkPHP 動(dòng)態(tài)網(wǎng)頁(yè)Abstract: With the rapid development of computers and the Internet, the Internet increasingly rich information resources. Blog, publish on the web and record log of water, also known as web log, it is simple and quickly and easily publish their own experience, timely and effective and easily communicate with each other, and then set a variety of personalized show integrated platform, breaking the traditional newspaper, magazine to write articles on behalf of new lifestyles and new ways of working, but also represent new ways of learning.The system uses PHP dynamic website development, MYSQL database, APACHE server, the ThinkPHP open-source framework, HTML + CSS + the javascript and other scripting language, personal log of B / S mode, and a platform for exchange - personal blog system.Key words: The blog system PHP ThinkPHP dynamic webpage目錄第一章 需求分析與功能簡(jiǎn)介2一、開(kāi)發(fā)的需求分析2二、開(kāi)發(fā)的技術(shù)概要21、網(wǎng)站程序開(kāi)發(fā)技術(shù)21.1、PHP技術(shù)21.2 、AJAX技術(shù)22、網(wǎng)站前端設(shè)計(jì)技術(shù)21.1 、javascript腳本語(yǔ)言21.2、 DIV+CSS布局方式2三、開(kāi)發(fā)的環(huán)境配置21、系統(tǒng)運(yùn)行平臺(tái)22、開(kāi)發(fā)工具選用2四、開(kāi)發(fā)的設(shè)計(jì)思想21、OOP(面向?qū)ο蟮木幊趟枷耄?2、MVC 模型視圖控制器思想23、ORM 對(duì)象關(guān)聯(lián)映射思想24、單一入口訪(fǎng)問(wèn)思想2五、開(kāi)發(fā)的目錄結(jié)構(gòu)2六、系統(tǒng)功能簡(jiǎn)介2第二章 數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)2一、數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì)2二、數(shù)據(jù)庫(kù)關(guān)聯(lián)模型映射21、用戶(hù)權(quán)限的關(guān)聯(lián)模型22、文章分類(lèi)標(biāo)簽的關(guān)聯(lián)模型2第三章 網(wǎng)站后臺(tái)功能實(shí)現(xiàn)2一、RBAC基于角色的多用戶(hù)訪(fǎng)問(wèn)控制功能21.1 RBAC的全局配置參數(shù)21.2 RBAC 操作初始化配置21.2 RBAC 用戶(hù)的登陸檢測(cè)2二、AJAX無(wú)刷新提交功能2三、無(wú)限級(jí)分類(lèi)功能2四、文章管理2五、角色授權(quán)管理功能2六、文件管理器功能2七、數(shù)據(jù)庫(kù)備份功能2第四章 網(wǎng)站前臺(tái)功能及實(shí)現(xiàn)2一、3D標(biāo)簽云功能2二、日志歸檔功能2第五章 網(wǎng)站的用戶(hù)體驗(yàn)2一、留言的字?jǐn)?shù)統(tǒng)計(jì)2二、拖動(dòng)型彈層2三、窗口化頁(yè)面2第六章 總結(jié)2第七章 致謝2第八章 參考文獻(xiàn)2第一章 需求分析與功能簡(jiǎn)介一、開(kāi)發(fā)的需求分析越來(lái)越多的網(wǎng)絡(luò)用戶(hù)希望能夠在網(wǎng)絡(luò)平臺(tái)上展現(xiàn)自己的個(gè)性,更方便地與人互動(dòng)交流,無(wú)論是論壇、社區(qū)還是個(gè)人網(wǎng)站,都試圖在這些方面進(jìn)行努力,隨著WEB2.0時(shí)代的到來(lái),一個(gè)新的概念出現(xiàn)了博客。隨著計(jì)算機(jī)網(wǎng)絡(luò)的飛速發(fā)展,博客已經(jīng)成為寫(xiě)網(wǎng)絡(luò)日志必不可少的一種工具,也是一種簡(jiǎn)單有效的提供網(wǎng)絡(luò)用戶(hù)之間進(jìn)行在線(xiàn)交流的網(wǎng)絡(luò)平臺(tái),通過(guò)其可以結(jié)交更多的朋友,表達(dá)更多的想法,它隨時(shí)可以發(fā)表日志,方便快捷。訪(fǎng)客可以直接在個(gè)人Blog上留言,如提出問(wèn)題或意見(jiàn)等。個(gè)人博客的發(fā)展,也已經(jīng)成為廣告商業(yè)務(wù)擴(kuò)展的重要領(lǐng)域??傊?, Blog是繼Email、BBS、ICQ之后的第四種網(wǎng)絡(luò)交互方式。Blog是未來(lái)信息化教育和個(gè)人知識(shí)管理的強(qiáng)大而易用的工具。二、開(kāi)發(fā)的技術(shù)概要1、網(wǎng)站程序開(kāi)發(fā)技術(shù)1.1、PHP技術(shù)PHP(Hypertext Preprocessor超文本預(yù)處理器)是一種 HTML 內(nèi)嵌式的編程語(yǔ)言。PHP的語(yǔ)法大部分兼容了C、JAVA、Perl,并增加了PHP特有的語(yǔ)法結(jié)構(gòu),可以比CGI或Perl更快速的執(zhí)行動(dòng)態(tài)網(wǎng)頁(yè),只需要很少的編程知識(shí)就能建立一個(gè)交互的WEB站點(diǎn)。它可以管理動(dòng)態(tài)內(nèi)容,支持?jǐn)?shù)據(jù)庫(kù),處理會(huì)話(huà)和跟蹤,甚至構(gòu)建整個(gè)電子商務(wù)站點(diǎn)。PHP是完全免費(fèi)的開(kāi)源產(chǎn)品,程序開(kāi)發(fā)快,運(yùn)行快,兼容UNIX、LINUX、WINDOWS等操作系統(tǒng),可以在IIS、Apache、Nginx等WEB服務(wù)器端執(zhí)行代碼解析,能支持MySQL、MSSQL、Oracle、SyBase等主流數(shù)據(jù)庫(kù),構(gòu)建LAMP(Linux+Apache+Mysql+Php)可以非常快速地搭建一套動(dòng)態(tài)網(wǎng)站系統(tǒng)。 ThinkPHP是一個(gè)免費(fèi)開(kāi)源的,快速、簡(jiǎn)單的面向?qū)ο蟮妮p量級(jí)PHP開(kāi)發(fā)框架,是為了敏捷WEB應(yīng)用開(kāi)發(fā)和簡(jiǎn)化企業(yè)應(yīng)用開(kāi)發(fā)而誕生的。ThinkPHP從誕生以來(lái)一直秉承簡(jiǎn)潔實(shí)用的設(shè)計(jì)原則,在保持出色的性能和至簡(jiǎn)的代碼的同時(shí),也注重易用性。使用ThinkPHP,你可以更方便和快捷的開(kāi)發(fā)和部署應(yīng)用。1.2 、AJAX技術(shù)AJAX 指異步 JavaScript 及 XML(Asynchronous JavaScript And XML),用于創(chuàng)建更好更快以及交互性更強(qiáng)的 Web 應(yīng)用程序的技術(shù)。Ajax不是一門(mén)編程語(yǔ)言,它的核心是JavaScript對(duì)象XmlHttpRequest,通過(guò)XmlHttpRequest,用戶(hù)可以在不重載頁(yè)面的情況下直接與服務(wù)器進(jìn)行通信,形成與Web服務(wù)器間交互數(shù)據(jù)。這一特性不僅優(yōu)化了網(wǎng)站界面和用戶(hù)的體驗(yàn),也提高了系統(tǒng)的性能,大大增強(qiáng)了網(wǎng)站的“動(dòng)態(tài)化”。2、網(wǎng)站前端設(shè)計(jì)技術(shù)1.1 、javascript腳本語(yǔ)言JavaScript是一種能讓你的網(wǎng)頁(yè)更加生動(dòng)活潑的程式語(yǔ)言,是一種動(dòng)態(tài)、弱類(lèi)型、基于原型的語(yǔ)言,通過(guò)瀏覽器可以直接執(zhí)行。利用JavaScript能輕易的展現(xiàn)各類(lèi)的網(wǎng)頁(yè)特效,增加的網(wǎng)絡(luò)用戶(hù)的觀(guān)賞性。它的代碼結(jié)構(gòu)比較松散,記錄在HTML文件中,可以直接查看源碼獲得。Jquery是Javascrpt的一個(gè)框架,輕量級(jí)的js庫(kù),兼容各種瀏覽器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。jQuery使用戶(hù)能更方便地處理HTML documents、events、實(shí)現(xiàn)動(dòng)畫(huà)效果,并且方便地為網(wǎng)站提供AJAX交互。1.2、 DIV+CSS布局方式DIV+CSS是WEB標(biāo)準(zhǔn)中常用術(shù)語(yǔ)之一它是網(wǎng)頁(yè)布局的一種方式,這種方式區(qū)別于傳統(tǒng)的HTML網(wǎng)頁(yè)設(shè)計(jì)語(yǔ)言中的表格(Table)定位,采用DIV+CSS的布局方式,可實(shí)現(xiàn)網(wǎng)頁(yè)頁(yè)面內(nèi)容與表現(xiàn)相分離,優(yōu)化了HTML代碼結(jié)構(gòu),能很好的被瀏覽器解析,同時(shí)也有利于搜索引擎的收錄。 DIV+CSS適應(yīng)未來(lái)網(wǎng)絡(luò)應(yīng)用更多的需求。三、開(kāi)發(fā)的環(huán)境配置1、系統(tǒng)運(yùn)行平臺(tái)操作系統(tǒng) :WINNT運(yùn)行環(huán)境 :Apache/2.2.17 (Win32)PHP程序版本 :5.3.5MYSQL程序版本 :5.5.8瀏覽器:Firefox、IE9、Chrome2、開(kāi)發(fā)工具選用程序開(kāi)發(fā)軟件:Zend Studio 8.0 、Dreamwever CS5、EditPlus3 數(shù)據(jù)庫(kù)軟件:phpMyAdmin圖像處理軟件:Photoshop CS5測(cè)試軟件:IETester、Firebug、WebDeveloper、IE調(diào)試工具四、開(kāi)發(fā)的設(shè)計(jì)思想1、OOP(面向?qū)ο蟮木幊趟枷耄┟嫦驅(qū)ο缶幊蹋∣bject Oriented Programming,OOP,面向?qū)ο蟪绦蛟O(shè)計(jì))是一種計(jì)算機(jī)編程架構(gòu)。OOP的一條基本原則是計(jì)算機(jī)程序是由單個(gè)能夠起到子程序作用的單元或?qū)ο蠼M合而成。OOP達(dá)到了軟件工程的三個(gè)主要目標(biāo):重用性、靈活性和擴(kuò)展性。為了實(shí)現(xiàn)整體運(yùn)算,每個(gè)對(duì)象都能夠接收信息、處理數(shù)據(jù)和向其它對(duì)象發(fā)送信息。OOP主要有以下的概念和組件: 組件 數(shù)據(jù)和功能一起在運(yùn)行著的計(jì)算機(jī)程序中形成的單元,組件在 OOP 計(jì)算機(jī)程序中是模塊和結(jié)構(gòu)化的基礎(chǔ)。 抽象性 程序有能力忽略正在處理中信息的某些方面,即對(duì)信息主要方面關(guān)注的能力。 封裝 也叫做信息封裝:確保組件不會(huì)以不可預(yù)期的方式改變其它組件的內(nèi)部狀態(tài);只有在那些提供了內(nèi)部狀態(tài)改變方法的組件中,才可以訪(fǎng)問(wèn)其內(nèi)部狀態(tài)。每類(lèi)組件都提供了一個(gè)與其它組件聯(lián)系的接口,并規(guī)定了其它組件進(jìn)行調(diào)用的方法。 多態(tài)性 組件的引用和類(lèi)集會(huì)涉及到其它許多不同類(lèi)型的組件,而且引用組件所產(chǎn)生的結(jié)果得依據(jù)實(shí)際調(diào)用的類(lèi)型。 繼承性 允許在現(xiàn)存的組件基礎(chǔ)上創(chuàng)建子類(lèi)組件,這統(tǒng)一并增強(qiáng)了多態(tài)性和封裝性。典型地來(lái)說(shuō)就是用類(lèi)來(lái)對(duì)組件進(jìn)行分組,而且還可以定義新類(lèi)為現(xiàn)存的類(lèi)的擴(kuò)展,這樣就可以將類(lèi)組織成樹(shù)形或網(wǎng)狀結(jié)構(gòu),這體現(xiàn)了動(dòng)作的通用性。 2、MVC 模型視圖控制器思想MVC是一個(gè)設(shè)計(jì)模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開(kāi)。使用MVC應(yīng)用程序被分成三個(gè)核心部件:模型(M)、視圖(V)、控制器(C),它們各自處理自己的任務(wù)。 視圖 :視圖是用戶(hù)看到并與之交互的界面。視圖就是由HTML元素和web應(yīng)用程序組成的界面,它作為一種輸出數(shù)據(jù)并允許用戶(hù)操縱的方式。模型 :模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有最多的處理任務(wù)。被模型返回的數(shù)據(jù)是中立的,就是說(shuō)模型與數(shù)據(jù)格式無(wú)關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫(xiě)一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性。 控制器 :控制器接受用戶(hù)的輸入并調(diào)用模型和視圖去完成用戶(hù)的需求。所以當(dāng)單擊Web頁(yè)面中的超鏈接和發(fā)送HTML表單時(shí),控制器本身不輸出任何東西和做任何處理。它只是接收請(qǐng)求并決定調(diào)用哪個(gè)模型構(gòu)件去處理請(qǐng)求,然后確定用哪個(gè)視圖來(lái)顯示模型處理返回的數(shù)據(jù)。 3、ORM 對(duì)象關(guān)聯(lián)映射思想對(duì)象-關(guān)系映射(Object/Relation Mapping,簡(jiǎn)稱(chēng)ORM),是隨著面向?qū)ο蟮能浖_(kāi)發(fā)方法發(fā)展而產(chǎn)生的。面向?qū)ο蟮拈_(kāi)發(fā)方法是當(dāng)今企業(yè)級(jí)應(yīng)用開(kāi)發(fā)環(huán)境中的主流開(kāi)發(fā)方法,關(guān)系數(shù)據(jù)庫(kù)是企業(yè)級(jí)應(yīng)用環(huán)境中永久存放數(shù)據(jù)的主流數(shù)據(jù)存儲(chǔ)系統(tǒng)。對(duì)象和關(guān)系數(shù)據(jù)是業(yè)務(wù)實(shí)體的兩種表現(xiàn)形式,業(yè)務(wù)實(shí)體在內(nèi)存中表現(xiàn)為對(duì)象,在數(shù)據(jù)庫(kù)中表現(xiàn)為關(guān)系數(shù)據(jù)。內(nèi)存中的對(duì)象之間存在關(guān)聯(lián)和繼承關(guān)系,而在數(shù)據(jù)庫(kù)中,關(guān)系數(shù)據(jù)無(wú)法直接表達(dá)多對(duì)多關(guān)聯(lián)和繼承關(guān)系。因此,對(duì)象-關(guān)系映射(ORM)系統(tǒng)一般以中間件的形式存在,主要實(shí)現(xiàn)程序?qū)ο蟮疥P(guān)系數(shù)據(jù)庫(kù)數(shù)據(jù)的映射。4、單一入口訪(fǎng)問(wèn)思想單一入口通常是指一個(gè)項(xiàng)目或者應(yīng)用具有一個(gè)統(tǒng)一的入口文件,既項(xiàng)目的所有功能操作都是通過(guò)這個(gè)入口文件進(jìn)行的,它使得項(xiàng)目整體比較規(guī)范,不同操作之間具有相同的規(guī)則,同帶來(lái)的好處是控制較為靈活。五、開(kāi)發(fā)的目錄結(jié)構(gòu)Public : 存放站點(diǎn)公共目錄,存放圖片(Images)、樣式(Css)、腳本(Js),以及用戶(hù)上傳的資源UploadsThinkPHP :存放ThinkPHP框架引擎WebApp : 存放博客系統(tǒng)的目錄,包含全局參數(shù),模型,類(lèi)庫(kù),模板,公共函數(shù)及緩存等文件。index.php :站點(diǎn)入口文件六、系統(tǒng)功能簡(jiǎn)介博客系統(tǒng)是基于ThinkPHP框架技術(shù)開(kāi)發(fā),具有一般博客系統(tǒng)發(fā)布、修改、刪除文章,日志的評(píng)論和歸檔等功能,同時(shí)也增設(shè)了標(biāo)簽、無(wú)限分類(lèi)、權(quán)限管理、文件管理功能,支持站點(diǎn)的數(shù)據(jù)庫(kù)結(jié)構(gòu)查看及其備份。利用MiniUi控件,增強(qiáng)的后臺(tái)管理界面和用戶(hù)體驗(yàn),同時(shí)結(jié)合AJAX技術(shù)對(duì)數(shù)據(jù)的異步交互,大大增強(qiáng)對(duì)用戶(hù)操作的便攜性和透明性。博客系統(tǒng)后臺(tái)管理首頁(yè)文章頁(yè)日志歸檔,標(biāo)簽云,分類(lèi)列表內(nèi)容顯示,點(diǎn)擊數(shù),訪(fǎng)問(wèn)評(píng)論系統(tǒng)管理文章管理文件管理權(quán)限管理角色管理用戶(hù)管理文件管理器節(jié)點(diǎn)管理數(shù)據(jù)備份站點(diǎn)配置上傳文件文章列表分類(lèi)標(biāo)簽發(fā)表文章前臺(tái)界面站點(diǎn)名稱(chēng)、站點(diǎn)描述、分頁(yè)頁(yè)數(shù)等配置數(shù)據(jù)庫(kù)表信息、數(shù)據(jù)表結(jié)構(gòu)、數(shù)據(jù)庫(kù)備份文章的發(fā)表、標(biāo)簽的插入文章的編輯、刪除,分類(lèi)顯示和標(biāo)簽顯示分類(lèi)的顯示、創(chuàng)建、編輯、刪除,標(biāo)簽的顯示和刪除多文件上傳,文件的刪除和預(yù)覽目錄遍歷,文件和文件夾的刪除、命名,文件的編輯節(jié)點(diǎn)的創(chuàng)建、編輯、刪除,節(jié)點(diǎn)的啟用和禁用角色的創(chuàng)建、編輯、刪除,角色的授權(quán)角色的創(chuàng)建、編輯、刪除,用戶(hù)分配角色第二章 數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)一、數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì)b_blog 文章表b_category 分類(lèi)表b_comment 評(píng)論表idID號(hào)idID號(hào)idID號(hào)categoryId分類(lèi)ID號(hào)title分類(lèi)名recordId文章ID號(hào)title文章名remark備注author昵稱(chēng)content內(nèi)容pid父分類(lèi)email郵箱cTime創(chuàng)建時(shí)間path分類(lèi)路徑url個(gè)人站點(diǎn)status狀態(tài)ip評(píng)論者IPreadCount點(diǎn)擊數(shù)b_access 角色訪(fǎng)問(wèn)表content內(nèi)容commentCount評(píng)論數(shù)idID號(hào)cTime創(chuàng)建時(shí)間tags標(biāo)簽role_id角色I(xiàn)D號(hào)agent操作系統(tǒng)node_id節(jié)點(diǎn)ID號(hào)status狀態(tài)b_options 站點(diǎn)配置表idID號(hào)b_role 角色表b_node節(jié)點(diǎn)表option_name配置名idID號(hào)idID號(hào)option_value配置值name角色名name節(jié)點(diǎn)名status狀態(tài)pid父分類(lèi)title顯示名status狀態(tài)status狀態(tài)b_user節(jié)點(diǎn)表remark備注remark備注idID號(hào)pid父節(jié)點(diǎn)username用戶(hù)名b_role_user角色用戶(hù)關(guān)系level等級(jí)nickname昵稱(chēng)role_id角色I(xiàn)D號(hào)password密碼user_id用戶(hù)ID號(hào)tagged 標(biāo)簽關(guān)聯(lián)表reg_date注冊(cè)時(shí)間idID號(hào)status狀態(tài)tag 標(biāo)簽表tagId標(biāo)簽ID號(hào)remark備注idID號(hào)recordId文章ID號(hào)email郵箱name標(biāo)簽名tagTime標(biāo)簽應(yīng)用時(shí)間count使用數(shù)b_upload 上傳表b_link 友情鏈接表idID號(hào)link_idID號(hào)filename文件名link_url鏈接地址url上傳路徑link_name鏈接名filesize文件大小link_target跳轉(zhuǎn)模式filetype文件類(lèi)型link_decoration鏈接描述uptime上傳時(shí)間link_order鏈接排序status狀態(tài)二、數(shù)據(jù)庫(kù)關(guān)聯(lián)模型映射1、用戶(hù)權(quán)限的關(guān)聯(lián)模型b_user 用戶(hù)表b_role_user角色用戶(hù)關(guān)系b_node節(jié)點(diǎn)表idID號(hào)user _id用戶(hù)ID號(hào)idID號(hào)username用戶(hù)名role _id角色I(xiàn)D號(hào)name節(jié)點(diǎn)名nickname昵稱(chēng)title顯示名password密碼b_role 角色表pid父節(jié)點(diǎn)reg_date注冊(cè)時(shí)間idID號(hào)level等級(jí)status狀態(tài)name角色名remark備注pid父分類(lèi)b_access 角色訪(fǎng)問(wèn)表email郵箱status狀態(tài)node_id節(jié)點(diǎn)ID號(hào)idID號(hào)remark備注role_id角色I(xiàn)D號(hào)用戶(hù)權(quán)限的關(guān)聯(lián)模型,角色是一組用戶(hù)的集合,通過(guò)一對(duì)多的關(guān)系,一組角色可以關(guān)聯(lián)多個(gè)用戶(hù),用戶(hù)的權(quán)限管理取決于角色的權(quán)限管理。角色的訪(fǎng)問(wèn)形成了角色與節(jié)點(diǎn)之間多對(duì)多的關(guān)系,每一組角色都有一條或多條節(jié)點(diǎn)關(guān)系,多組角色形成了多對(duì)多的關(guān)系模型,這樣,用戶(hù)的權(quán)限將取決于節(jié)點(diǎn)的等級(jí),節(jié)點(diǎn)表具有管理用戶(hù)操作的功能。 2、文章分類(lèi)標(biāo)簽的關(guān)聯(lián)模型b_blog 文章表b_category 分類(lèi)表b_tag標(biāo)簽表idID號(hào)idID號(hào)idID號(hào)categoryId分類(lèi)ID號(hào)title標(biāo)題name標(biāo)簽名title標(biāo)題pid分類(lèi)父IDcount標(biāo)簽使用次數(shù)content內(nèi)容cTime創(chuàng)建時(shí)間tagged 標(biāo)簽關(guān)聯(lián)表status狀態(tài)idID號(hào)tags標(biāo)簽recordId文章IDtagId標(biāo)簽ID文章分類(lèi)標(biāo)簽的關(guān)聯(lián)模型,文章與分類(lèi)形成一對(duì)一的關(guān)系,分類(lèi)的父ID在分類(lèi)表中實(shí)現(xiàn)“內(nèi)聯(lián)”關(guān)系,形成分類(lèi)的無(wú)限子分類(lèi)。文章編寫(xiě)標(biāo)簽集通過(guò)分割插入到標(biāo)簽表中,標(biāo)簽表中是一組無(wú)冗余的表,只記錄新創(chuàng)建的標(biāo)簽,如果標(biāo)簽重復(fù)出現(xiàn),標(biāo)簽關(guān)聯(lián)表能記錄下不同文章關(guān)聯(lián)相同的標(biāo)簽。文章表和標(biāo)簽表實(shí)現(xiàn)了多對(duì)多的關(guān)系映射。 第三章 網(wǎng)站后臺(tái)功能實(shí)現(xiàn)一、RBAC基于角色的多用戶(hù)訪(fǎng)問(wèn)控制功能1.1 RBAC的全局配置參數(shù)true,USER_AUTH_ON=true,USER_AUTH_TYPE=1,/ 默認(rèn)認(rèn)證類(lèi)型 1 登錄認(rèn)證 2 實(shí)時(shí)認(rèn)證USER_AUTH_KEY =authId,/ 用戶(hù)認(rèn)證SESSION標(biāo)記ADMIN_AUTH_KEY =administrator,/ 記錄管理員的SESSION,USER_AUTH_MODEL =User,/ 默認(rèn)驗(yàn)證數(shù)據(jù)表模型,即用戶(hù)賬戶(hù)管理表AUTH_PWD_ENCODER =md5,/ 用戶(hù)認(rèn)證密碼加密方式USER_AUTH_GATEWAY =/Admin/Public/login, / 默認(rèn)認(rèn)證網(wǎng)關(guān)NOT_AUTH_MODULE =Public, / 默認(rèn)無(wú)需認(rèn)證模塊REQUIRE_AUTH_MODULE =, / 默認(rèn)需要認(rèn)證模塊NOT_AUTH_ACTION =, / 默認(rèn)無(wú)需認(rèn)證操作REQUIRE_AUTH_ACTION =, / 默認(rèn)需要認(rèn)證操作GUEST_AUTH_ON =false, / 是否開(kāi)啟游客授權(quán)訪(fǎng)問(wèn)GUEST_AUTH_ID =0, / 游客的用戶(hù)IDRBAC_ROLE_TABLE =b_role, / 角色分組表RBAC_USER_TABLE =b_role_user, / 用戶(hù)角色關(guān)聯(lián)表RBAC_ACCESS_TABLE =b_access, / 系統(tǒng)訪(fǎng)問(wèn)權(quán)限表RBAC_NODE_TABLE =b_node, / 系統(tǒng)節(jié)點(diǎn)表);?(圖1)如圖1所示,配置認(rèn)證的SESSION標(biāo)記為authId,用與記錄用戶(hù)登陸的ID號(hào),$_SESSIONUSER_AUTH_KEY相當(dāng)與$_SESSIONauthId配置用戶(hù)的登陸網(wǎng)關(guān)為USER_AUTH_GATEWAY =/Admin/Public/login,也就是用戶(hù)登陸后臺(tái)的第一道門(mén),若已經(jīng)登陸,就會(huì)跳轉(zhuǎn)到后臺(tái)主頁(yè)面,相反的沒(méi)有設(shè)置$_SESSIONauthId的值或該值已過(guò)期,就會(huì)顯示登陸界面。1.2 RBAC 操作初始化配置class CommonAction extends Action function _initialize() / 用戶(hù)權(quán)限檢查,判斷是否開(kāi)啟的用戶(hù)權(quán)限認(rèn)證,且排除掉無(wú)需認(rèn)證的模塊 if (C(USER_AUTH_ON) & !in_array(MODULE_NAME, explode(, C(NOT_AUTH_MODULE) import(ORG.Util.RBAC); /引入RBAC類(lèi)庫(kù) /檢測(cè)用戶(hù)是否權(quán)限,有權(quán)限放回true跳轉(zhuǎn)到后臺(tái)管理,無(wú)權(quán)限執(zhí)行一下代碼 if (!RBAC:AccessDecision(GROUP_NAME) /檢查用戶(hù)的SESSION ID,不存在則跳到默認(rèn)網(wǎng)關(guān)if (!$_SESSION C(USER_AUTH_KEY) redirect(PHP_FILE . C(USER_AUTH_GATEWAY); /正常登陸沒(méi)有權(quán)限,跳轉(zhuǎn)到RBAC_ERROR_PAGE 提示的權(quán)限頁(yè),如果沒(méi)有該配置,直接給出沒(méi)有權(quán)限訪(fǎng)問(wèn)該頁(yè)面 if (C(RBAC_ERROR_PAGE) redirect(C(RBAC_ERROR_PAGE);/ 沒(méi)有權(quán)限 拋出錯(cuò)誤 else if (C(GUEST_AUTH_ON) $this-assign(jumpUrl, PHP_FILE . C(USER_AUTH_GATEWAY); $this-error(L(_VALID_ACCESS_);/ 提示錯(cuò)誤信息 (圖2)如圖2所示,配置了USER_AUTH_ON為true,即我們開(kāi)啟了RBAC的驗(yàn)證,這里的NOT_AUTH_MODULE 默認(rèn)配置了PUBLIC模塊,則表示其他模塊只要繼承了CommonAction類(lèi),則需要進(jìn)行RBAC驗(yàn)證;調(diào)用RBAC:AccessDecision(GROUP_NAME),檢查該分組的權(quán)限,有權(quán)限則返回ture,跳轉(zhuǎn)到管理界面;無(wú)權(quán)限則返回false,拋出錯(cuò)誤信息。1.2 RBAC 用戶(hù)的登陸檢測(cè)class PublicAction extends Action public function checkLogin() $data=json_decode($_REQUESTsubmitData,true); / 接收異步提交過(guò)來(lái)的json數(shù)據(jù)進(jìn)行解碼if(empty($datausername) / 檢查用戶(hù)提交的用戶(hù)名、密碼、驗(yàn)證碼都不為空$this-ajaxReturn(username,賬戶(hù)必須!,0);elseif (empty($datapassword)$this-ajaxReturn(password,密碼必須!,0);elseif (empty($dataverify)$this-ajaxReturn(verify,驗(yàn)證碼必須!,0); $map = array(); /生成認(rèn)證條件$mapusername = $datausername;$mapstatus = array(gt,0); if($_SESSIONverify != md5($dataverify) $this-ajaxReturn(verify,驗(yàn)證碼錯(cuò)誤!,0); import ( ORG.Util.RBAC ); $authInfo = RBAC:authenticate($map); /使用用戶(hù)名、密碼和狀態(tài)的方式進(jìn)行認(rèn)證 if(false = $authInfo) $this-error(帳號(hào)不存在或已禁用!); else if($authInfopassword != md5($datapassword) $this-ajaxReturn(password,密碼錯(cuò)誤!,0); $_SESSIONC(USER_AUTH_KEY) =$authInfoid; /登陸成功,記錄用戶(hù)SESSION if($authInfousername=admin) /檢測(cè)是否為管理員帳號(hào),是則開(kāi)放最大權(quán)限 $_SESSIONadministrator=true; RBAC:saveAccessList(); / 緩存訪(fǎng)問(wèn)權(quán)限列表$this-success(登錄成功!);?(圖3)如圖3所示,系統(tǒng)異步獲取用戶(hù)提交的數(shù)據(jù),進(jìn)行json的解碼操作,分別判斷接收的用戶(hù)名,密碼,驗(yàn)證碼都不為空,驗(yàn)證成立生成認(rèn)證條件。調(diào)用RBAC:authenticate()方法,傳入$map數(shù)組,通過(guò)authenticate方法來(lái)檢測(cè)后臺(tái)賬戶(hù)表中是否有該用戶(hù),并帳號(hào)狀態(tài)是否正常;C(USER_AUTH_MODEL)就是圖1配置User,對(duì)應(yīng)后臺(tái)賬戶(hù)表就是b_user表,該方法會(huì)返回該賬戶(hù)的相關(guān)信息,賦值到$authInfo中,如果該用戶(hù)存在,通過(guò)密碼比對(duì)就完成了一個(gè)登陸認(rèn)證。登陸后的用戶(hù)ID記錄在$_SESSIONauthId中,如果用戶(hù)名是管理員”admin”,則$_SESSIONadministrator會(huì)設(shè)置為true,在RBAC類(lèi)中對(duì)于該用戶(hù)擁有最高的權(quán)限。最后通過(guò)調(diào)用RBAC:saveAccessList()方法將該用戶(hù)擁有的各個(gè)角色的節(jié)點(diǎn)訪(fǎng)問(wèn)權(quán)限保存在SESSION中,可以通過(guò)$_SESSION_ACCESS_LIST查看系統(tǒng)訪(fǎng)問(wèn)權(quán)限列表。二、AJAX無(wú)刷新提交功能(圖4)站點(diǎn)配置AJAX無(wú)刷新提交如圖4,表單按鈕 保存 觸發(fā)javascript自定義onSave函數(shù),代碼如下所示:function onSave(e) ThinkAjax.sendForm(form1,_URL_/update,function (data,status,info)if (status=1)alert(操作成功);,result);當(dāng)用戶(hù)觸發(fā)onSave函數(shù)后,ThinkAjax.sendForm將表單的內(nèi)容提交到指定的url地址,ThinkAjax是ThinkPHP框架集中提供的一種ajax提交方式,方便用戶(hù)對(duì)數(shù)據(jù)的異步請(qǐng)求和處理。其中_URL_表示當(dāng)前模型的URL地址,全路徑為index.php/Admin/Option/update,對(duì)應(yīng)的服務(wù)端程序?yàn)?v)$voption_value=addslashes($voption_value);$Option-save($v);$this-ajaxReturn(,保存成功,1);else$this-error($Option-getError();?服務(wù)器段通過(guò)$_POST預(yù)定義變量接收表單請(qǐng)求,通過(guò)實(shí)例化一個(gè)Options模型對(duì)象來(lái)建立數(shù)據(jù)庫(kù)句柄$Option,通過(guò)一個(gè)循環(huán)將數(shù)據(jù)更新到數(shù)據(jù)庫(kù)中,最后通過(guò)ajaxRturn的方法將結(jié)果放回到客戶(hù)端,其中ajaxRturn包含三個(gè)參數(shù),1表示返回的數(shù)據(jù),2表示返回的信息,3表示返回的狀態(tài),客戶(hù)端的js通過(guò)一個(gè)函數(shù)接收ajaxRturnde的內(nèi)容,如果狀態(tài)為1表示表單成功被修改。下面的圖5和圖6通過(guò)Firebug開(kāi)發(fā)工具來(lái)說(shuō)明了表單進(jìn)行異步請(qǐng)求和響應(yīng)的全過(guò)程。(圖5)Firebug抓取客戶(hù)端操作進(jìn)行的異步請(qǐng)求(圖6)Firebug抓取服務(wù)端對(duì)數(shù)據(jù)的異步響應(yīng)三、無(wú)限級(jí)分類(lèi)功能(圖7)創(chuàng)建無(wú)限級(jí)分類(lèi)用戶(hù)通過(guò)點(diǎn)擊增加分類(lèi)來(lái)創(chuàng)建新的分類(lèi),創(chuàng)建分類(lèi)時(shí)通過(guò)點(diǎn)擊所屬分類(lèi)來(lái)形成子父分類(lèi)關(guān)系,多級(jí)子分類(lèi)通過(guò)分類(lèi)路徑來(lái)達(dá)到總體的關(guān)聯(lián)效果,如圖7所示。實(shí)現(xiàn)該效果的服務(wù)端代碼如下所示。class CategoryAction extends CommonAction public function index() $Cate=M(Category);$list=$Cate-field(id, title, pid, concat( path, -, id ) AS bpath)-order(bpath,id)-select();foreach($list as $key=$value)$list$keycount=count(explode(-,$valuebpath);$this-assign(list,$list);$this-display();?服務(wù)端查找數(shù)據(jù)庫(kù)b_category表,通過(guò)Mysql內(nèi)置的concat函數(shù)將它的路徑關(guān)系和自己id連合起來(lái),形成整段分類(lèi)路徑,再通過(guò)foreach遍歷數(shù)據(jù)集,分割數(shù)據(jù)集中的分類(lèi)路徑,查看層次關(guān)系,得到該分類(lèi)的層疊數(shù)。將該數(shù)組通過(guò)thinkphp模板引擎 volist頁(yè)輸出,運(yùn)用CSS對(duì)輸出的層疊數(shù)進(jìn)行樣式的格式化,就形成了無(wú)限集分類(lèi)的效果。然而分類(lèi)與父類(lèi)集之間的路徑關(guān)系是如何的實(shí)現(xiàn)的?下面的代碼將解釋這個(gè)路徑關(guān)系的實(shí)現(xiàn)原理。where(id=$pid)-find();$bpath=$listpath.-.$listid;return $bpath;?創(chuàng)建一個(gè)自定義模型類(lèi),當(dāng)用戶(hù)添加分類(lèi)的時(shí)候會(huì)實(shí)例化這個(gè)模型類(lèi),該類(lèi)繼承了ThinkPHP框架的Model 類(lèi),$_auto是該類(lèi)庫(kù)中定義的一個(gè)屬性,完成數(shù)據(jù)自動(dòng)處理功能,用來(lái)處理默認(rèn)值、數(shù)據(jù)過(guò)濾以及其他系統(tǒng)寫(xiě)入字段。$_auto屬性是由多個(gè)填充因子組成的數(shù)組,填充因子格式為array(填充字段,填充內(nèi)容,填充條件,附加規(guī)則),這里將path內(nèi)容填充的是cpath函數(shù)返回的值,它通過(guò)用戶(hù)提交過(guò)來(lái)的父ID號(hào)查找數(shù)據(jù)庫(kù),得到父級(jí)的關(guān)系信息,讓父級(jí)的路徑關(guān)系與父ID連合就是當(dāng)前分類(lèi)的路徑關(guān)系。四、文章管理文章管理模塊是整個(gè)博客系統(tǒng)最主要的環(huán)節(jié),它包括了日志的發(fā)表、編輯、刪除、預(yù)覽、評(píng)論、點(diǎn)擊、自定義標(biāo)簽、所屬分類(lèi)、分頁(yè)等多項(xiàng)功能。文章的發(fā)表引入了kindEditor的富文本編輯器,支持用戶(hù)在網(wǎng)站上創(chuàng)建可見(jiàn)可得的編輯效果。下面將展示文章管理的相關(guān)頁(yè)面。(圖8)分頁(yè)模式下的文章列表(圖9)發(fā)表文章(圖10)訪(fǎng)客的評(píng)論(圖11)標(biāo)簽的管理五、角色授權(quán)管理功能(圖12)節(jié)點(diǎn)管理(圖13)角色權(quán)限管理(圖14)分配用戶(hù)所屬組基于角色的訪(fǎng)問(wèn)控制模型(RBAC Model,Role-based Access Model):RBAC模型的基本思想是將訪(fǎng)問(wèn)許可權(quán)分配給一定的角色,用戶(hù)通過(guò)飾演不同的角色獲得角色所擁有的訪(fǎng)問(wèn)許可權(quán)。如圖12所示創(chuàng)建節(jié)點(diǎn),節(jié)點(diǎn)管理用戶(hù)操作該模型的權(quán)限,一個(gè)節(jié)點(diǎn)包含查看、添加、插入、編輯、更新、刪除、啟用、禁用等操作權(quán)限,圖13顯示的是管理員對(duì)該角色進(jìn)行授權(quán),圖14指派到角色組中,從而來(lái)控制用戶(hù)權(quán)限的管理。六、文件管理器功能(圖15)文件管理器(圖16)文件內(nèi)容編輯器(圖17)文件重命名(圖18)文件上傳如圖15 所示,文件管理列表通過(guò)傳遞當(dāng)前的工作路徑,以FileManage類(lèi)的getFileList方法遍歷整個(gè)工作路徑,獲得當(dāng)前工作路徑下的文件夾和文件。path = $path;$this-doroot=$_SERVERDOCUMENT_ROOT;function getPath() return $this-path; function setPath($v) $this-path=$v;function getFileList($dirname=.) $dirname=str_replace(/,/,$dirname); $thispath=$this-doroot.$dirname;$d = dir($thispath);while(false!=$file=$d-read()$filepath=$dirname.$file;if ($file=. | $file=. & $dirname=C(ROOT_NAME)continue;$filesize=is_dir($thispath.$file)?:round(filesize($thispath.$file)/1024,2).kb;$filetime=is_dir($thispath.$file)?:date(Y-m-d H:i:s,filemtime($thispath.$file);$this-fileList = array(filename=iconv(gb2312,UTF-8,$file),filepath=$dirname.iconv(gb2312,UTF-8,$file),filesize=$filesize,filemtime=$filetime,filetype=filetype($thispath.$file),);foreach ($this-fileList as $k = $v) $filetype$k = $vfiletype;$filename$k = $vfilename;array_multisort($filetype, SORT_ASC,$filename, SORT_ASC, $this-fileList);$d-close();return $this-fileList;?七、數(shù)據(jù)庫(kù)備份功能(圖19)查看數(shù)據(jù)表(圖20)數(shù)據(jù)表結(jié)構(gòu) 如圖19所示,通過(guò)Sql語(yǔ)句 show table status from 數(shù)據(jù)庫(kù)名 可以查看所有表的信息,圖20通過(guò)用戶(hù)提交表名,執(zhí)行Sql語(yǔ)句 show columns from 表名 獲得表結(jié)構(gòu),用戶(hù)通過(guò)點(diǎn)擊“數(shù)據(jù)庫(kù)備份”,將執(zhí)行以下兩段函數(shù)來(lái)生成整個(gè)表的SQL語(yǔ)句,通過(guò)文件寫(xiě)入函數(shù)file_put_contents將內(nèi)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年數(shù)字化教育平臺(tái)管理測(cè)試題
- 2026年計(jì)算機(jī)二級(jí)考試編程語(yǔ)言試題解析與模擬
- 2026年眼科疾病臨床診斷與治療考試題庫(kù)
- 2026年環(huán)境工程師水資源管理措施經(jīng)典題目集
- 全息舞臺(tái)效果制作協(xié)議2025年
- 精良工程安裝服務(wù)承諾書(shū)(7篇)
- 2026年春季學(xué)期學(xué)?!皩W(xué)科素養(yǎng)提升”研討會(huì)方案:聚焦素養(yǎng)深化課堂改革
- 2025年秋季學(xué)期學(xué)?!皶?shū)香校園”建設(shè)活動(dòng)總結(jié):以書(shū)育人培養(yǎng)閱讀習(xí)慣
- XX一中2026年春季學(xué)期初一年級(jí)校園勞動(dòng)技能大賽方案解讀年級(jí)組長(zhǎng)發(fā)言
- 產(chǎn)品退換貨處理規(guī)范承諾書(shū)7篇范文
- 2026年標(biāo)準(zhǔn)版離婚協(xié)議書(shū)(有財(cái)產(chǎn))
- 養(yǎng)老院電氣火災(zāi)培訓(xùn)課件
- 中國(guó)工商銀行2025年度春季校園招聘筆試歷年典型考題及考點(diǎn)剖析附帶答案詳解
- 2026年類(lèi)器官芯片技術(shù)項(xiàng)目商業(yè)計(jì)劃書(shū)
- 2026北京西城初二上學(xué)期期末數(shù)學(xué)試卷和答案
- 數(shù)字交互視角下普寧英歌舞傳承創(chuàng)新研究
- (標(biāo)準(zhǔn))檔口轉(zhuǎn)讓合同協(xié)議書(shū)模版
- 杭州物業(yè)外賣(mài)管理辦法
- 紅外線(xiàn)治療的操作流程講課件
- 過(guò)去進(jìn)行時(shí)(總結(jié))
- 物業(yè)節(jié)前安全教育培訓(xùn)
評(píng)論
0/150
提交評(píng)論