dede問答平臺開發筆記
發表日期:2018-03 文章編輯:小燈 瀏覽次數:3307
dedecms有個問答平臺的模塊,安裝該模塊之后會在根目錄下面生成一個ask的目錄,相關的代碼和模板都在里面了,當然安裝過程中還在數據庫中添加了和問答相關的數據。
其實模塊是和系統其它部分比較獨立的程序集合,我發現這個問答模塊的代碼結構和dede其它地方的代碼結構差別比較大,可能是程序員不同吧,問答模塊基本上是基于mvc設計模式的,至少代碼看上去和很多mvc框架相似,而且在問答模塊里面,采用的模板也不再是dede文章模板的標簽調用形式,問答模塊里面可以很隨意的嵌套php語句。盡管有些地方也能看到dede標簽,但是我初步感覺,這個模板已經不再是dede的模板了,從后臺和前臺分離的角度來說,這不是好事,但是就個人來說我喜歡能使用php代碼的模板。
好了今天我想給問答平臺添加一個在首頁顯示所有問題的功能(默認是沒有的),很容易找到了ask/control/index.php文件,下面我將關鍵代碼貼出來:
//待解決的問題
$notoks = $this->question->get_all('status=0','ORDER BY disorder DESC, dateline DESC',$row);
//新解決的問題
$solutions = $this->question->get_all('status=1','ORDER BY solvetime DESC',$row);
//高分懸賞問題
$rewards = $this->question->get_all('status=0','ORDER BY reward DESC',$row);
看到了吧,這里就是查詢不同條件下問題的列表,get_all()函數里面的參數是設置查找問題的條件status=1表示已解決問題,status=0表示未解決問題,如果我不要任何條件將這里設置成空 是不是就可以得到所有問題了呢,于是我將代碼改成:
//待解決的問題
$notoks = $this->question->get_all('status=0','ORDER BY disorder DESC, dateline DESC',$row);
//所有問題
$allqus = $this->question->get_all('','ORDER BY disorder DESC, dateline DESC',$row);
//新解決的問題
$solutions = $this->question->get_all('status=1','ORDER BY solvetime DESC',$row);
//高分懸賞問題
$rewards = $this->question->get_all('status=0','ORDER BY reward DESC',$row);
實驗證明我錯了,問答模塊的代碼沒我想的那么智能化,找了很久終于發現原因所在。原來在模型mquestion里面,get_all()不管條件有沒有指,都給sql語句加了個where,
$query = "SELECT $field FROM `dede_ask` WHERE $wheresql $orderby limit 0,$row";
這里的$wheresql我設置成了空,結果導致sql語句不全了,所以出錯。改成
if($wheresql=='')
$query = "SELECT $field FROM `dede_ask` $orderby limit 0,$row";
else
$query = "SELECT $field FROM`dede_ask` WHERE $wheresql $orderby limit 0,$row";
現在就可以了,后臺代碼已經改完,現在改前臺。
增加
<?php
if($allqus!= ""){
foreach($allqus as $key => $v){
?>
這里是html代碼,參照待解決問題
<?php}}?>
就講到這里吧
本頁內容由塔燈網絡科技有限公司通過網絡收集編輯所得,所有資料僅供用戶參考了本站不擁有所有權,如您認為本網頁中由涉嫌抄襲的內容,請及時與我們聯系,并提供相關證據,工作人員會在5工作日內聯系您,一經查實,本站立刻刪除侵權內容。本文鏈接:http://www.webpost.com.cn/11260.html