我們知道/include/arc.archives.class.php文件是處理文章信息的,在文章詳情頁面的模版文件中那些dede標(biāo)簽的顯示數(shù)據(jù)就是來源于此,這篇文章中主要討論body字段。
前面我已經(jīng)寫了一篇如何為文章顯示提供一個安卓客戶端接口的文章 為dede增加安卓客戶端接口的基本流程,其中就需要對顯示在android客戶端上的文章內(nèi)容做一些處理,需要將原本問相對路徑的url全部替換成帶域名的絕對路徑。
我自己寫了一個實(shí)現(xiàn)替換url的函數(shù)放在archive.helper.php中,于是我在arc.archives.class.php中自認(rèn)為合適的地方調(diào)用了替換body url連接的方法,結(jié)果發(fā)現(xiàn)根本不行,得到的body是為空的。
經(jīng)過分析發(fā)現(xiàn)在archives類的構(gòu)造函數(shù)調(diào)用之后立即處理body是沒有用的,因?yàn)閍rchives類的構(gòu)造方法中,獲取的都是文章主表的信息,里面沒有body的內(nèi)容,body存在于文章附表中。而附表字段的獲取在這個函數(shù)中:
function ParAddTable() |
因此我要修改$this->Fields['body']的值,必須在這個函數(shù)之后。 ParAddTable()是在display()中被調(diào)用的,所以我只能在display()中做處理了。
事實(shí)上這仍然行不通,正確的做法是在ParAddTable()中的 “//處理要分頁顯示的字段” 代碼之前。
不過下面幾行代碼如果弄清楚了的話 會有所幫助:
$this->SplitFields = explode("#a#",$this->Fields[$this->SplitPageField]); |
通過打印,發(fā)現(xiàn)$this->SplitPageField的值就是body,那么$this->SplitFields 就是body字段的分段數(shù)組了,其中#a#的a實(shí)際上是p,但是如果我這樣寫后面文字的就顯示不出來了。
其實(shí)之所以前面修改了$this->Fields['body']的值在最終顯示中不能體現(xiàn),是因?yàn)槟0逯袥]有調(diào)用$this->Fields['body']而是調(diào)用的$this->SplitFields,如果沒有文章分頁,那么$this->SplitFields中只有一個元素。能影響到$this->SplitFields結(jié)果的代碼只能在ParAddTable()函數(shù)自身中。
新聞熱點(diǎn)
疑難解答
圖片精選