很有意思的小功能,类似于百度或者Google搜索的时候都会有提示,Z-Blog的搜索也可以做成有提示的,但受限于性能的限制,搜索提示的数据来自于文章的Tag。
一段JS代码,你需要把它保存为common.js并且放到你的主题目录中去,然后在每一个有搜索框的模板上引入这段代码:
//Parse Timeout function pasIntTimeOut(){ if (isNaN(intAjaxTimeOut) || intAjaxTimeOut==""){intAjaxTimeOut=6000;} if (parseInt(intAjaxTimeOut)<2000){intAjaxTimeOut=2000;} } //Search Function var findHintTimer=0; function startFindHint(sWords,event){ var ev = null; var n = -1; var i = 0; if (window.event){ev = window.event;}else{ev = event;} var $obj = $("#searchHint>ul>li").each(function(){ if ($(this).attr("class")=="hint-sel"){ n = i; } i++; }); if(ev !=null){ switch(ev.keyCode){ case 13: //enter if ($("#searchHint>ul>li.hint-sel").size()>0){ window.location.href=$("#searchHint>ul>li.hint-sel").children("a").attr("href"); return false; } break; case 38: //up $("#searchHint>ul>li").eq(n).removeAttr("class"); n=n-1; if (n<=-1){n=i-1;} if (n>=0){$("#searchHint>ul>li").eq(n).attr("class","hint-sel");} return false; break; case 40: //down $("#searchHint>ul>li").eq(n).removeAttr("class"); n++; if (n>=i){n=0;} if (n<=i){$("#searchhint>ul>li").eq(n).attr("class","hint-sel");} return false; break; default : cancleFindHint(); findHintTimer=setTimeout(function(){findHint(sWords);},400); break; } } } function cancleFindHint(){ clearTimeout(findHintTimer); findHintTimer=0; } function hideHint(){ setTimeout(function(){$("#searchHint").hide();},200); } function findHint(sWords){ var $objContent = $("#searchHint"); if (sWords==""){ setTimeout(function(){$objContent.hide();},200); }else{ pasIntTimeOut(); $.ajax({ type: 'POST', dataType: 'html', timeout: parseInt(intAjaxTimeOut/4), data:"inpWords="+sWords.replace(" ","%20"), url: str00+"themes/"+strThemeName+"/plugin/hint.asp", success: function(data){ $objContent.html(data); if (data!==""){ $objContent.show(); }else{ $objContent.hide(); } } }); } } $(document).ready(function(){ $("input.keyword").attr("autocomplete","off"); //因为有时候这个输入框输入的搜索内容多了,本身会有一个提示功能,所以让这个autocomplete的属性off掉。 });
下面是一段asp代码,你要把它保存为hint.asp并放在主题的plugin目录中:
<%@ language="VBSCRIPT" codepage="65001"> <% '/////////////////////////////////////////////////////////////////////////////// '// 插件应用: Z-Blog 1.8 + '// 插件制作: HP esloy.com '// 备 注: 这段代码来自于HP的情侣主题 '// 最后修改: '// 最后版本: '/////////////////////////////////////////////////////////////////////////////// %> <% option="" explicit=""> <% on="" error="" resume="" next=""> <% response.charset="UTF-8"> <% response.buffer="True"> <% Call System_Initialize() '检查是否启用 If Not LCase(ZC_BLOG_THEME)=LCase("illacrimo2") Then Call ShowError(48) //上面这行可以去掉,判断当前主题的。 Dim strReferer strReferer=CStr(Request.ServerVariables("HTTP_REFERER")) If Instr(strReferer,ZC_BLOG_HOST)=0 Then ShowError(5) End If Dim strWords : strWords=Request.Form("inpWords") Call CheckParameter(strWords,"sql",-1) strWords=FilterSQL(strWords) Dim Tag Dim objRS Dim strOutPut If strWords<>"-1" Then Set objRS=objConn.Execute("SELECT TOP 15 [tag_ID] FROM [blog_Tag] WHERE [tag_Name] LIKE '%" & strWords & "%' ORDER BY [tag_Count] DESC") If (Not objRS.bof) And (Not objRS.eof) Then strOutPut = strOutPut & "" Do While Not objRS.eof If CheckPluginState("Nobird_Pagebar")=False Then strOutPut = strOutPut & " " & Tags(objRS("tag_ID")).Name & ""& Tags(objRS("tag_ID")).Count &" 个结果 " elseif CheckPluginState("Nobird_Pagebar")=True Then strOutPut = strOutPut & " " & Tags(objRS("tag_ID")).Name & ""& Tags(objRS("tag_ID")).Count &" 个结果 " End If objRS.MoveNext Loop strOutPut = strOutPut & " " End If objRS.Close Set objRS=Nothing End If Response.Write strOutPut Call System_Terminate() If Err.Number<>0 then Call ShowError(0) End If %>
最后一步,加上触发代码:
实际上是修改你的搜索框,主要加上的是onblur、onkeyup这两个属性,还有下面的id为searchhint的div。
<div class="Search"> <form action="https://www.birdol.com/cmd.asp?act=Search" method="post"> <input value="请在此输入关键字..." onblur="if(this.value==''){this.value='请在此输入关键字...';}hideHint();" onfocus="if(this.value=='请在此输入关键字...'){this.value='';}" onkeyup="return startFindHint(this.value,event);" name="edtSearch" class="keyword" type="text"/><br/> <div id="buttonsearch"> <input name="submit" class="search" title="Search" src="https://www.birdol.com/themes/<#ZC_BLOG_THEME#>/style/images/ButtonTransparent.png" alt="Search" type="image"/><br/> </div> </form> <div class="clear"> .clear </div> <div id="searchHint"></div> </div> <p>
连续几篇都是在剥离高手的主题插件,实际上Z-Blog自身有很多优秀的主题插件,只不过作者都比较喜欢说自己的主题好,从来不说主题插件好...
转载请注明:鸟儿博客 » Z-blog技巧之搜索自动提示