了讓初學(xué)者更容易理解,本文寫的比較詳細(xì),所以如果你已是技術(shù)大拿,請直接繞過,以免浪費你的寶貴時間,謝謝。
相信現(xiàn)在很多網(wǎng)站都有文章功能,有文章就基本上少不了要有個列表頁,網(wǎng)頁設(shè)計師們對文章列表頁的設(shè)計也是五花八門,各有各的創(chuàng)意,那我們就拿ThinkPHP旗下的極思維平臺的列表頁來說,極思維的目前的列表頁是這樣的:
大家可以看到,它的布局是塊形式展現(xiàn),每篇文章都是固定的布局,圖片,標(biāo)題,簡介,如果說每篇文章在發(fā)布的時候都要單獨的寫個簡介,單獨上傳個封面圖,對編輯者來說就有些麻煩了,那我們就可以通過程序讓它自動去抓取封面和簡介,自動抓取縮略圖我在之前的文章有講過,大家可以去找下我之前的《ThinkPHP之自動獲取文章內(nèi)容中的第一張圖片做為縮略圖》這篇文章,今天我們主要講如何自動抓取文章的部分內(nèi)容作為文章的簡介。
我們先來分析一下功能的實現(xiàn)原理,所謂簡介,就是簡單的說明一下這篇文章的主要內(nèi)容,不涉及到排版,所以我們只需要純文字,那么問題來了,之前我們在抓取縮略圖的文章中我們也有說到,文章內(nèi)容是由編輯器進行排版的,既然有排版樣式,就必定要有HTML樣式,只要保留文字就得把所有的HTML標(biāo)簽都去掉,那怎么去掉呢?
不用急,PHP有個專門去掉HTML的函數(shù),這個函數(shù)就是 strip_tags ,我們先來看一下這個函數(shù)是什么樣的:
在以上代碼中可以看到,內(nèi)容中有個 <b> 標(biāo)簽,<b> 標(biāo)簽的作用就是字體加粗,我們運行一下實例看下:
可以很明顯的看到使用了 strip_tags 函數(shù)和沒使用 strip_tags 函數(shù)的區(qū)別,那是不是直接在ThinkPHP中用這個函數(shù)就夠了呢,寫過文章的人都知道,文章會涉及到換行、空格等格式,strip_tags 函數(shù)只能去掉HTML標(biāo)簽,并不能去掉換行、空格等格式,那么怎么樣才能去掉換行和空格呢,別擔(dān)心,強大的PHP也有函數(shù)來處理這些東西的,PHP中有個正則替換函數(shù)叫做 ereg_replace ,這個函數(shù)可以把指定的字符換成我們想要的字符,那么我們的邏輯代碼就可以這樣寫:
從上面的邏輯代碼中,我們可以看到替換換行符中處理了三次替換,這是為什么呢,因為現(xiàn)在服務(wù)器系統(tǒng)有很多種,最常用的就有windows、linux兩種系統(tǒng),這兩種系統(tǒng)的換行符是不同的,所以為了兼容不同的服務(wù)器,我們就多替換幾次,其中 \r\n 是替換 linux 和 unix 系統(tǒng)的換行符,\n 是替換 windows 系統(tǒng)的換行符,\r 是替換蘋果系統(tǒng)的換行符的。
處理好了HTML之后,接下來我們就要截取內(nèi)容了,因為文章字?jǐn)?shù)有多有少,既然是簡介,那我們肯定就只要截取一小段文字了,比如只要50個字或者100個字這樣,因為編程基本都是用英文編寫的,對中文的識別較差,所以在編程計算長度時,一個中文漢字是算兩個字符的,所以如果我們要截取50個中文的話,截取長度就是乘以二,那就是100了,其實這都不算什么問題,但是在實際過程中,按這樣的方式去截取的話,遇到文章包含中英文的時候就可能會出現(xiàn)亂碼的情況,為了避免出現(xiàn)亂碼,我們可以用一個非PHP核心函數(shù) mb_strlen 來解決,為什么說 mb_strlen 是非PHP核心函數(shù)呢,因為在使用 mb_strlen 函數(shù)前需要確保在 php.ini 中有加載 php_mbstring.dll,要不然就會出現(xiàn) 未定義函數(shù) 的問題,那我們就來把上面的代碼改進一下,加上截取字?jǐn)?shù)的功能,得到代碼如下:
然后,我們以ThinkPHP3.2為例,把上面的自定義函數(shù)方法添加到ThinkPHP框架中核心公共函數(shù)目錄(Common)里的 functions.php 文件的最后面即可。
調(diào)用方法為:{$vo.content|cutstr_html=###,100}
上面調(diào)用方法中的 ### 是表示文章內(nèi)容,100為要截取的字?jǐn)?shù)長度。
謝謝你的閱讀,如果你有更好的方法或在應(yīng)用過程中遇到問題可以在評論區(qū)提問或者直接私信我,我會定期回復(fù),碼農(nóng)劉小橋與你一起學(xué)習(xí),共同進步。
一篇文章講解“模型-內(nèi)置標(biāo)簽之條件標(biāo)簽”,本篇文章講解“模板-內(nèi)置標(biāo)簽之資源文件加載”。
資源文件加載即是在模板中引入CSS、JS等資源文件。
傳統(tǒng)方式的導(dǎo)入外部JS和CSS文件的方法是直接在模板文件使用:
系統(tǒng)提供了專門的標(biāo)簽來簡化上面的導(dǎo)入:
①新建Index控制器,并新建index方法
②新建index.html模板,并引入資源文件
③新建script.js與style.css資源文件
script.js文件:
style.css文件:
注意:
1. ThinkPHP中資源文件的位置為“public/static/”下。
預(yù)覽:
④配合“模板輸出替換”使用
由于文件路徑不對,導(dǎo)致資源文件加載失敗,可以配合模板輸出替換使用。
在config/template.php文件中,定義模板輸出替換:
⑤在index.html模板中使用模板輸出替換
預(yù)覽:
在index.html模板中,使用load標(biāo)簽同時加載多個資源文件。
預(yù)覽:
注意:
1. load標(biāo)簽支持同時加載多個資源文件,文件之間用逗號隔開。
系統(tǒng)還提供了兩個標(biāo)簽別名js和css,用法和load一致。
在index.html模板文件中,使用js與css標(biāo)簽加載資源文件。
預(yù)覽:
關(guān)注卓象程序員,定期發(fā)布技術(shù)文章
下一篇講解“模板-內(nèi)置標(biāo)簽之標(biāo)簽嵌套+原生PHP”
?
些天向大家分享了一些ThinkPHP操作數(shù)據(jù)庫的教程,不過一下子要記住這么多東西不是一件容易的事情,所以大家需要在實戰(zhàn)中邊開發(fā)邊學(xué)習(xí),才能更輕松的掌握技能。今天,我要向大家分享如何使用ThinkPHP模版標(biāo)簽來實現(xiàn)循環(huán)輸出功能。
圖片來自網(wǎng)絡(luò)
ThinkPHP內(nèi)置很多模版標(biāo)簽,今天我只向大家分享循環(huán)輸出標(biāo)簽。以后會逐漸分享其他常用模板標(biāo)簽的用法。
ThinkPHP內(nèi)置模版標(biāo)簽
Foreach標(biāo)簽用來循環(huán)輸出數(shù)據(jù),通常用于輸出數(shù)據(jù)庫select查詢結(jié)果,如下所示。
控制器代碼
模板代碼
最終輸出結(jié)果如下:
輸出結(jié)果
在foreach標(biāo)簽中,name為控制器賦值的變量名(users),item為循環(huán)內(nèi)的變量名(user)。
Volist標(biāo)簽與Foreach類似,不過它擁有更多用法,最基本用法如下:
Volist基本用法
輸出結(jié)果
可以看到,Volist標(biāo)簽中只是把item換成id,其他完全相同。
但是如果我們只需要輸出第1-10(注意數(shù)組是從0開始的)條數(shù)據(jù),可以這樣用:
Volist的offset用法
輸出結(jié)果
如果數(shù)據(jù)為空時,我們還可以使用empty屬性來輸出指定信息:
Volist的empty用法
輸出結(jié)果
由于我們使用Table來輸出數(shù)據(jù),而empty不支持直接傳入html標(biāo)簽,所以“無用戶信息”被解析到了table外。我們可以這樣解決:
控制器賦值empty
Volist的empty接收變量
輸出結(jié)果
for標(biāo)簽的用法很簡單,如下:
<for start="開始值" end="結(jié)束值" step="步進值" name="循環(huán)變量名" >輸出內(nèi)容</for>
開始值、結(jié)束值、步進值和循環(huán)變量都可以支持變量,開始值和結(jié)束值是必須,其他是可選。name的默認(rèn)值是i,步進值的默認(rèn)值是1,舉例如下:
for標(biāo)簽用法
輸出結(jié)果
在開發(fā)中,我們需要經(jīng)常用到循環(huán)輸出功能,掌握循環(huán)輸出的用法志在必得。
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。