dedecms系統(tǒng)內(nèi)容頁(yè)使用sql標(biāo)簽查詢調(diào)用條件語(yǔ)句是變量字段的方法
在dedecms中我們常會(huì)用到{dede:sql},在sql使用變量經(jīng)常也會(huì)用到。比如我們要在dede_archives表中查詢某個(gè)關(guān)鍵詞與當(dāng)前標(biāo)題做匹配的時(shí)候,如變量為title,那么語(yǔ)句如下:
{dede:sql sql="SELECT * FROM dede_archives WHERE tag=~title~"}
這種是比較簡(jiǎn)單和常用的方式。但在使用過(guò)程中我發(fā)現(xiàn),有時(shí)會(huì)遇到這樣一種狀況,即模糊搜索匹配的標(biāo)題(sql使用like和%)。
按照上面來(lái)說(shuō)應(yīng)該這樣寫(xiě):
{dede:sql sql="SELECT * FROM dede_archives WHERE title like '%~title~%' "}
但是這樣報(bào)錯(cuò)了,編譯的結(jié)果是select * from dede_archives where title like '%'$title'% 造成sql語(yǔ)句錯(cuò)誤。多出來(lái)了' 號(hào)。后來(lái)發(fā)現(xiàn)是sql語(yǔ)句的規(guī)則問(wèn)題,所以就要修改{sql.lib.php} 的標(biāo)簽。
以下為修改方法:
1. 復(fù)制include/taglib/sql.lib.php文件并重命名為likesql.lib.php ( likesql 這個(gè)文件名字可以自己取)
2. 將32行中
function lib_sql(&$ctag,&$refObj)
修改為
function lib_likesql(&$ctag,&$refObj) (lib_likesql 這個(gè)方法名字也可以自己取)
3. 將48行中
$sql = str_replace($conditions[0][$key], "'".addslashes($refObj->Fields[$value])."'", $sql);
修改為:
$sql = str_replace($conditions[0][$key],addslashes($refObj->Fields[$value]), $sql);
修改完成后把該文件上傳到 include/taglib/ 目錄下面即可。
最后的調(diào)用標(biāo)簽改為:{dede:likesql sql="" }
{dede:likesql sql="SELECT * FROM `dede_archives` WHERE `title` like '%~title~%' "}
進(jìn)階實(shí)際應(yīng)用:
查詢附加表某個(gè)字段匹配當(dāng)前這個(gè)字段(變量)的其它文檔列表,可以這樣編寫(xiě)代碼
相關(guān)熱詞搜索: dedecms,內(nèi)容頁(yè),sql標(biāo)簽,條件語(yǔ)句,變量,字段,方