Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲精品午夜久久aaa级久久久 ,麻豆中文字幕,美女黄网站人色视频免费国产

          整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          WordPress主題開發(fā)教程二十五:留言模板

          篇將涉及到博客一個比較重要的東西;評論模板

          你應(yīng)該知道:

          • 沒有快速的方式在 comments.php 建立評論模板
          • 大部分的 WordPress 設(shè)計者使用來自 WordPress 默認主題(Kubrick)默認評論模板根據(jù)
          • 一些設(shè)計者會修改默認的評論模板去適合他們自己的需求。
          • 你將使用我的默認評論模板的修改版本。

          第1步:創(chuàng)建 comments.php

          • 創(chuàng)建一個新文件:comments.php
          • 把我的 comments.txt 將文件中的內(nèi)容復(fù)制到 comments.php
          • 保存 comments.php 文件。

          第2步:樣式化留言

          • 把我的 comments-template-css 文件中的內(nèi)容拷貝到你的 style.css 文件中。
          • 復(fù)制到 style.css 的底部或者剛好 #footer 的上面。

          第3步:在 single.php 添加留言模板

          single.php 文件中,entry DIV 的下面,輸入以下代碼:

          <div class=”comments-template”>
          <?php comments_template(); ?>
          </div>

          comments_template() 這個函數(shù)是用來重復(fù) comments.php 文件調(diào)用評論模板。comments.php 文件然后就會根據(jù)它的模板(或者代碼)去顯示評論列表。列表中的每個條目是一條評論。

          如果想讓人們可以在靜態(tài)頁面也可以留言,同樣可以把 comments_template() 函數(shù)用到 page.php 文件。

          第4步:驗證代碼

          第四步是驗證你的代碼,然而可以不進行第四步的,因為你在使用的是我已經(jīng)整理過的默認主題評論模板的修改版。我已經(jīng)替你驗證過代碼了。

          驗證:

          • 查看 > 頁面源代碼
          • 拷貝所有源代碼
          • 然后到 validator。
          • 把你的代碼粘貼到 Direct Input 框中。
          • 點擊 Check

          以后的參考(當(dāng)你創(chuàng)建你自己的主題和評論模板),下面是需要驗證的頁面:

          • 主頁 — Home page
          • 存檔頁面 — Archive pages
          • 類別頁面 — Category pages (如果你自定義了類別頁面)
          • 搜索結(jié)果頁面 — Search result pages
          • 靜態(tài)頁面 — Pages (如:About)
          • 單一日志頁面 — Single post view page
          • 單一日志沒有留言 — Single post with no comments
          • 單一日志有留言 — Single post with comments
          • 單一日志含有必須登錄信息 — Single post with must login message
          • 單一日志沒有必須登錄信息 — Single post with no login required message
          • 密碼保護的單一日志并有留言 — Password protected single post with comments

          評論模板的進一步解釋

          • 評論模板從根本上說是一個有序列表(OL),不是無序的,盡管它們基本上同樣方式工作。 無序列表是以圓點列表組織的。有序列表則是以數(shù)字列表組織的(每個條目都有一個數(shù)字,從1開始)。
          • single.php 文件中,你用 comments-template DIV 圍住comments_template()。現(xiàn)在你的評論模板在一個 DIV 標簽中的一個有序列表中。

          當(dāng)你你的日志是密碼保護的,你的評論同樣是密碼保護的:

          這個修改版的留言模板有一個 H2 子標題顯示 Password Protected。默認的留言模板是沒有的。

          下面展示了哪些東西組成了你的留言列表:

          簡單整理下就是:

          comment_text() 函數(shù)就是用來調(diào)用每條留言的。

          我不會解釋留言模板的原因 CSS 代碼的意思。不像 comments.php 文件中的代碼,你可以隨便測試你的 CSS 代碼而不會弄壞留言模板。自己去測試會比我的解釋對你更有好處。

          程派微信號:codingpy

          本文系作者 Django學(xué)習(xí)小組?授權(quán)編程派原創(chuàng)發(fā)表,并經(jīng)編程派編輯,轉(zhuǎn)載請注明出處及微信ID(codingpy)。

          通過前五周的時間我們開發(fā)了一個簡單的個人 Blog,本周我們將實現(xiàn) blog 文章的評論功能。(快速查看前五期內(nèi)容,請點擊文末鏈接)

          實現(xiàn)思路

          首先需要為評論(Comment)設(shè)計一個數(shù)據(jù)庫表,并編寫相應(yīng)的 Model,將評論與文章關(guān)聯(lián),再編寫發(fā)表評論的視圖,設(shè)置相應(yīng)的 url 即可。

          評論的 Model 設(shè)計

          請點擊閱讀原文,查看詳細代碼

          參照大部分博客評論的樣式,我們的 BlogComment Model 包含這些字段:

          • user_name:用戶在評論前先要填寫他們想使用的昵稱

          • user_email:用戶在評論前先要填寫他們想使用的郵箱

          • body:用戶提交的評論內(nèi)容

          • created_time:評論提交時間

          • article:評論關(guān)聯(lián)的文章,因為一個評論只能關(guān)聯(lián)某一篇文章,而一篇文章下可能有多個評論,因此是一對多的關(guān)系,使用 ForeignKey

          評論的表單

          表單用來給服務(wù)器后臺提交用戶填寫的數(shù)據(jù),例如平時我們看到的填寫登錄、注冊信息的頁面就是一個登錄、注冊表單,用戶填寫表單信息后,點擊提交按鈕,表單中填寫的內(nèi)容就會打包發(fā)送給服務(wù)器后臺。

          我們需要為用戶填寫評論設(shè)置一個表單,django 的 form 模塊為我們提供了自動生成表單的功能,如果對表單不熟悉請參閱:官方文檔:表單概述 ,以了解基本的表單使用方法(如果你對表單感覺很陌生的話)。

          下面我們使用 Django 的 ModelForm ( django ModelForm 介紹 )類為我們自動生成表單。首先在 blog 目錄下新建一個 forms.py (和 models.py 同一目錄)文件用來存放 form 的代碼:

          請點擊閱讀原文,查看詳細代碼

          視圖函數(shù)

          這里我們一如既往堅持使用基于類的通用視圖,由于涉及到評論表單的提交處理,因此我們使用 FormView。這里對 FormView 的使用稍作講解。

          在 Django 的基于函數(shù)的視圖中,涉及表單的處理的視圖其邏輯一般是這樣的:

          請點擊閱讀原文,查看詳細代碼

          即,首先判斷用戶是否通過表單 POST 了數(shù)據(jù)過來,如果是,則根據(jù) POST 過來的數(shù)據(jù)構(gòu)建一個表單,如果數(shù)據(jù)驗證合法(form.is_valid),則創(chuàng)建評論,否則返回表單提交頁。如果沒有 POST 數(shù)據(jù),則做其他相應(yīng)的事情。FormView 把這些邏輯做了整合,無需寫那么多 if else 語句:

          請點擊閱讀原文,查看詳細代碼

          為了方便地重定向回原來提交評論的文章詳情頁面,我們?yōu)槲恼拢ˋrticle)的模型新增一個方法:get_absolute_url,調(diào)用該方法將得到該 Article 對應(yīng)的 url,例如這是文章 1 的 url:http://localhost:8000/article/1,則調(diào)用后返回 /article/1,這樣調(diào)用 HttpResponseRedirect 后將返回該 url 下的文章詳情頁。

          請點擊閱讀原文,查看詳細代碼

          同時為了在詳情頁渲染一個評論表單,稍微修改一下 ArticleDetailView 的視圖函數(shù),把評論表單 form 插入模板上下文中:

          請點擊閱讀原文,查看詳細代碼

          URL 設(shè)置

          設(shè)置模板文件

          新增了一個 comment.html 文件以渲染評論表單和評論列表,并且修改了 detail.html 文件以在文章詳情頁顯示評論表單和評論列表,修改了blog/tatic 下的 style.css 為評論添加樣式,由于代碼比較多,就不貼出來了,主要是 html 和 css 的前端相關(guān)代碼,請到 GitHub 倉庫 更新相關(guān)的模板和靜態(tài)資源文件。

          至此,整個評論功能的框架做好了,顯示效果如下:

          當(dāng)然這只是一個評論的框架,很多細節(jié)有待處理和完善,但無論如何,用戶已經(jīng)可以為我們的文章發(fā)表評論意見了。

          前情回顧

          第一周:Django學(xué)習(xí)與實戰(zhàn)(一):編寫博客的 Model 和首頁面

          第二周:Django學(xué)習(xí)與實戰(zhàn)(二):博客詳情頁面和分類頁面

          第三周:Django學(xué)習(xí)與實戰(zhàn)(三):文章列表分頁和代碼語法高亮

          第四周:Django學(xué)習(xí)與實戰(zhàn)(四):基于類的通用視圖詳解

          第五周:Django學(xué)習(xí)與實戰(zhàn)(五):標簽云與文章歸檔

          于怎樣實現(xiàn)樓中樓的評論系統(tǒng)具體操作

          1. 實現(xiàn)前的思考

          在經(jīng)歷過多說和網(wǎng)易云跟帖后,總算是下定決心自己要寫一個評論系統(tǒng)了。

          我們在使用的很多評論系統(tǒng)中,目前比較流行的就是樓中樓的方式了,比如百度貼吧,wordpress等等。在這以前,一般都是按照時間順序進行1樓、2樓、3樓的展示,如果要回復(fù)某個人,使用@符號標識出這個用戶的名字,然后回復(fù)內(nèi)容。可是這樣存在一個很大的問題,討論問題沒有集中在一起,其他用戶根本不知道你們在討論什么,原作者在1樓發(fā)表評論,你進來回復(fù)這個用戶的評論時,已經(jīng)到10樓了,原作者再回復(fù)你又到20樓了。其他用戶看到10樓時,早已經(jīng)忘記原作者說了什么了。

          百度貼吧在改版之前就是這種方式,后來在新版中啟用了樓中樓的方式,這種方式,關(guān)于某個話題的討論就能集中在一塊了。

          同時,知乎也對他的評論系統(tǒng)進行了一次改版,不過不是改版成樓中樓,而是在每個有對話評論的后面加上一個彈窗鏈接查看對話,點擊鏈接后彈窗能看到這兩個人之間互動的所有評論。

          采用時間順序倒序或者正序平鋪的方式展示評論,這種方式實現(xiàn)起來簡單,但是閱讀困難;采用樓中樓的方式展示評論,對用戶的閱讀習(xí)慣比較友好,但是實現(xiàn)起來可能比較困難。不過,最后仍然決定采用樓中樓的方式來,雖然本人博客的評論量也少的可憐,不過還是決定要實現(xiàn)一下。


          2. 數(shù)據(jù)表的設(shè)計

          先說下前后端使用的語言和框架,前端考慮到頁面渲染和比較多的事件調(diào)用,使用了vue框架,vue應(yīng)該說不是最好的選擇,畢竟對一個評論的前端部門來說,可能有點大材小用,不過為了快速開發(fā),也就選擇了vue。后端使用的是php語言,數(shù)據(jù)庫使用的是mysql。

          數(shù)據(jù)庫表的設(shè)計,既要考慮到可以導(dǎo)入以前的數(shù)據(jù),又能方便以后添加新的評論。這里我創(chuàng)建了3個表: 文章表,用戶表,評論表。

          在網(wǎng)易云跟帖關(guān)閉之前,我把自己的數(shù)據(jù)導(dǎo)出來了(多說的數(shù)據(jù)已經(jīng)丟失,不知道導(dǎo)出的格式是什么了),我們來看下網(wǎng)易云跟帖里導(dǎo)出數(shù)據(jù)的格式:

          從上面的數(shù)據(jù)里,可以看到,每個文章都有標題,url和評論,評論的每一項都有自己對應(yīng)的id,其回復(fù)的評論pid,內(nèi)容content,該評論的用戶userid, nickname和avatar。我這里也就只摘取主要的信息錄入到數(shù)據(jù)庫中。

          2.1 用戶表

          用戶表相對來說比較簡單,要考慮的就是原有的userid也要作為字段進行保存,方便在導(dǎo)入評論數(shù)據(jù)時能找到對應(yīng)的用戶,在評論數(shù)據(jù)也導(dǎo)入完成后即可將該字段刪除,以后新添加的注冊用戶用不到這個字段了。用戶表的設(shè)計:

          字段類型說明
          idint自增,主鍵
          widint用戶原有的userid
          nicknamevarchar(50)昵稱
          avatarvarchar(100)頭像
          statusint狀態(tài)

          設(shè)計好用戶表后,將原數(shù)據(jù)中所有的用戶都單獨拿出來,然后使用userid作為key存儲到一個數(shù)組中,這樣也能起到一個去重的效果。把拿到的所有的用戶數(shù)據(jù)存儲到用戶表

          2.2 評論表

          在設(shè)計評論表,主要考慮如下的因素:

          1. 評論必須依托于文章和用戶才能存在,因此評論的外鍵是文章標識和userid,留言板是一個文章內(nèi)容為空的評論形式;

          2. 我想以后新的評論能使用自增id,而不是跟隨原有評論的cid來產(chǎn)生新的評論id,因此這次評論表的主鍵是id,原有的評論id只作為其中的一個字段wid來構(gòu)造樓中樓的關(guān)系,這些舊評論插入到數(shù)據(jù)表時都會有新的評論id;

          3. 樓中樓的評論是處在某個評論下的,同時,樓中樓里還有相互之前的互動回復(fù)。因此這個評論的pid(parentid)表示當(dāng)前評論處于哪個評論之下,同時replyid表示是回復(fù)的哪個評論;若直接回復(fù)的父級評論,則pid與replyid相同,都是父級評論的id,若回復(fù)的不是父級評論,則pid為父級評論的id,replyid為回復(fù)評論的id;pid或replyid為0時,則表示直接對文章發(fā)表評論。

          因此我們的評論表是這樣設(shè)計的:

          字段類型說明
          idint自增,主鍵
          widint評論原有的主鍵cid
          uidint用戶id
          replyidint該評論回復(fù)的評論id,沒有則為0
          pidint該評論所在的父級id,沒有則為0
          aidvarchar(100)文章的標識
          contentvarchar(300)評論內(nèi)容
          createtimeint評論時間的時間戳

          表中的aid(文章的標識)可以是文章的url,文章的id或者其他任何能夠唯一識別該文章的東東都可以。這里我們使用的是文章的uri來作為唯一標識,比如上面數(shù)據(jù)中的文章,我們使用/node/2017/02/20/node-express-forum.html來標識文章。其他文章同理。

          將這些評論寫入表時,我們還要注意的是,原數(shù)據(jù)中,每個評論都對應(yīng)著一個用戶,在我設(shè)計的系統(tǒng)里,用戶與評論分來了,只使用uid來進行關(guān)聯(lián)。新的用戶與新的評論都是使用自有的自增主鍵,因此在原有評論進行入庫時,需要將原來的userid轉(zhuǎn)換為新用戶表中的主鍵id,新舊數(shù)據(jù)進行統(tǒng)一。

          文章表不做解釋。


          3. 具體實現(xiàn)

          前端部分主要是負責(zé)展示每個文章的評論,同時讓登錄用戶可以添加評論。

          3.1 展示評論

          我們已經(jīng)對每個評論都添加了文章標識,前端只要根據(jù)aid就能拿到當(dāng)前文章所有的評論。不過我們的評論是要樓中樓的方式展示的,不能一股腦的把數(shù)據(jù)平鋪到頁面中。我們在2.2中也說了,pid為0的評論都是直接對文章進行評論的,這些評論應(yīng)該是作為一級評論展示的;pid為其他數(shù)據(jù)的,必然是屬于某個評論之下,應(yīng)當(dāng)作為樓中樓展示。

          同時,無論一級評論,還是樓中樓的評論,都有可能產(chǎn)生分頁的情況,因此這里也要做好分頁處理。

          那么最終,我們前端拿到的結(jié)構(gòu)應(yīng)該大致是這樣的:

          前端拿到接口返回的數(shù)據(jù)后,就可以渲染頁面了。在頭像的處理上,也考慮到了https的環(huán)境,因此返回的頭像鏈接都是//開頭的形式。

          3.2 參與評論

          用戶對文章或者某個評論產(chǎn)生了共鳴,需要留言討論一番,我們就需要用戶能夠把自己的評論也添加進去。

          評論的類型,細分的話,可以分為3類:

          • 直接對文章發(fā)表評論,pid與replyid為空;

          • 對一級評論進行回復(fù),pid與replyid均為一級評論的id;

          • 對樓中樓進行回復(fù),pid為一級評論的id,replyid為你回復(fù)的評論的id

          我這里前端的實現(xiàn)參考了oschina(開源中國)的評論方式。直接對文章評論,是直接在頂部的評論窗口進行輸入;對其他評論進行回復(fù)時,采用彈窗的方式來進行回復(fù)。彈窗回復(fù)的好處就是,頁面不用滾動,用戶對某個評論的感知也能停留在這個位置;同時也不用增加各種不必要的小輸入框來讓用戶輸入評論。

          3.3 登錄

          在登錄問題上,我也是糾結(jié)了不少的時間,究竟是使用自己的登錄系統(tǒng)呢,還是使用第三方登錄呢,或者是用戶不用注冊登錄,只要輸入郵箱和昵稱就能進行評論呢?

          使用自己的評論系統(tǒng),那么就需要開發(fā)一套注冊和登錄流程,開發(fā)麻煩,而且對于想要回復(fù)一句話的用戶來說,可能就直接放棄注冊了;若只要輸入郵箱和昵稱就能評論,我考慮到可能會引起用戶的無限評論,無法控制。因此,最后還是考慮接入第三方的登錄,這里選擇了使用微博作為第三方登錄的入口,后續(xù)會考慮加入github的帳號登錄。

          關(guān)于如何接入微博的第三方登錄,我們下篇文章再講,文檔齊全,對不熟悉的開發(fā)者來說,剛開始可能有點懵逼,不過應(yīng)該問題不大。

          3.4 添加郵箱功能

          用戶在第三方登錄成功后,在名字旁邊有個小的input輸入框,可以讓用戶輸入郵箱來接收回復(fù)提醒,這個輸入完全是自愿的,不輸入郵箱也依然可以評論。也是考慮到本站是個小站,訪問量極低,用戶可能一時興起評論了兩句,事后又想起這個網(wǎng)站來,又不知道怎么找了。因此就想著添加一個郵件提醒功能,不讓大神的評論石沉大海。

          3.5 特別注意

          前端部門引入了vue框架,評論模塊在每個文章頁都會加載。為了防止評論模塊中的vue庫對外部的資源造成影響(比如版本沖突等),我先把全局變量給了wzVue,然后在把Vue注銷掉:

          同時,在剛開始實現(xiàn)完成評論功能的時候,用戶只要進到這個頁面,評論就會加載。但是有個問題就是,用戶不一定會把你的文章看到底部,不一定就看你的評論。因此后來文章就改成了按需加載,只有用戶滾動到底部,有想要看評論的意向時采取加載評論。

          最終展示的效果就是這樣:


          4. 總結(jié)

          作為一名前端開發(fā),用僅有的后端知識開發(fā)一套博客的評論系統(tǒng),顯得是非常的簡陋,整個框架的設(shè)計感覺也是很糙。同時緩存系統(tǒng)用的不熟練,不能做到評論信息的立即更新。這個系統(tǒng)依然還有很多改進的地方。歡迎大家對蚊子(師少兵)多多提意見和建議。

          在寫這篇文章的時候,想著是以后要改版的時候,可以做成評論同步加載的方式進行。生成后的文章,更新頻率極低,甚至不太變動,那么緩存的就是評論的內(nèi)容,每當(dāng)有新的評論時,就刪除當(dāng)前文章的緩存,重新加載新的數(shù)據(jù),然后再緩存上新的數(shù)據(jù),這樣在評論數(shù)據(jù)更新比較低的時候,可以緩存的時間更長,同時也有利于搜索引起對評論內(nèi)容的抓取。


          主站蜘蛛池模板: 国产对白精品刺激一区二区| 亚洲AV噜噜一区二区三区| 久久伊人精品一区二区三区| 亚洲av无码一区二区三区四区| 亚洲av高清在线观看一区二区 | 成人免费视频一区| 中文字幕亚洲乱码熟女一区二区| 亚洲AV无码一区二区三区牲色| 一区二区乱子伦在线播放| 国产一区二区三区在线免费观看| 一区二区三区日韩精品| 一区二区三区在线观看视频| 国产品无码一区二区三区在线| 亚洲av无码一区二区乱子伦as| 丰满岳乱妇一区二区三区| 国产精品99精品一区二区三区 | 国产精品区AV一区二区| 麻豆精品人妻一区二区三区蜜桃 | 亚洲一区二区三区无码国产| 国产av一区最新精品| 亚洲日本中文字幕一区二区三区| 国产精品福利区一区二区三区四区| 亚洲国产精品一区二区成人片国内| 欧美成人aaa片一区国产精品| 一区二区在线视频观看| 久久精品一区二区三区AV| 视频精品一区二区三区| 无码少妇丰满熟妇一区二区| 久久精品动漫一区二区三区| 国产一区二区在线观看app| 视频一区二区中文字幕| 在线观看国产一区二区三区 | 99精品一区二区三区| 亚洲av鲁丝一区二区三区| 午夜福利一区二区三区高清视频 | 亚洲一区二区免费视频| 久久久无码精品国产一区| 亚洲A∨无码一区二区三区| 国产高清不卡一区二区| 久久精品一区二区三区四区 | 久久一区二区精品综合|