DedeCMS_如何使sql標籤的sql屬效能引用其他變數值?
阿新 • • 發佈:2018-12-10
一般在文章頁使用sql標籤匹配另外一個引數,我們會按照以下這樣寫,但結果輸出為空:
原因:include/taglib/sql.lib.php 傳遞變數時,會自動帶上 ‘ 單引號 例如 LIKE '%~'title'~%' 而不是 LIKE '%~title~%'
// 根據文章頁標題(title變數值)來過濾文章 <pre name="code" class="php">{dede:sql sql="SELECT id,title,description,litpic FROM dede_archives WHERE shorttitle LIKE '%~title~%'"} <li><a href='/plus/view.php?aid=[field:id/]'>[field:title/]</a> </li> {/dede:sql}
這時,dedecms模板標籤預設編譯的結果就是SELECT id,title,description,litpic FROM dede_archives WHERE shorttitle LIKE '%~title~%',並沒有把當前文章頁title變數值傳遞進來進行過濾。 為實現能傳遞變數值,我們需要對織夢cms的函式進行以下修改: $sql = str_replace($conditions[0][$key], "'".addslashes($refObj->Fields[$value])."'", $sql); 修改為(只需把引號去掉就可以實現): $sql = str_replace($conditions[0][$key], addslashes($refObj->Fields[$value]), $sql); 如果您不想直接修改sql標籤,以防之前的sql標籤使用受影響,可以複製一份include/taglib/sql.lib.php重新命名為likesql.lib.php並將對應程式碼(如函式名lib_sql,改為lib_likesql)修改,這樣我們可以不影響{dede:sql sql=""}標籤而用新的{dede:likesql sql=""}來實現模糊搜尋。