PageAdmin搜索有很多种方式可以实现,可以通过搜索模型来实现,也可以通过自定义sql语句(子栏目)方式来实现,下面正是我们要讲解的方法。
1、增加一个"自定义"类型的子栏目,增加后开启代码模式,把下面的代码(以文章表article为例)直接拷贝到内容区中即可。
<style type="text/css"> .search_list{clear:both;overflow:hidden} .search_list li{clear:both;padding:0px 5px 5px 5px;margin-bottom:10px;border-bottom:1px dotted #cccccc;overflow:hidden} .search_list li .title{float:left;height:25px;line-height:25px;} .search_list li .title a{font-size:13px;} .search_list li .date{float:right} </style> <script language="c#" runat="server"> string Sql_Format(string str,bool isFuzzyQuery) { if(string.IsNullOrEmpty(str)){return string.Empty;} str=Server.UrlDecode(Server.UrlEncode(str).Replace("%00","")); str=str.Replace("'","''"); str=str.Replace("\"","\""); if(isFuzzyQuery) { str=str.Replace("[]","[[]]"); str=str.Replace("[","[[]"); str=str.Replace("]","[]]"); str=str.Replace("_","[_]"); str=str.Replace("%","[%]"); str=str.Replace("^","[^]"); } return str; } protected string SubStr(string Title,int Title_Num,bool HtmlEncode) { if(Title_Num==0) { return ""; } else { System.Text.RegularExpressions.Regex regex = new System.Text.RegularExpressions.Regex("[\u4e00-\u9fa5]+", System.Text.RegularExpressions.RegexOptions.Compiled); char[] stringChar = Title.ToCharArray(); StringBuilder sb = new StringBuilder(); int nLength = 0; for(int i = 0; i < stringChar.Length; i++) { if (regex.IsMatch((stringChar[i]).ToString())) { nLength += 2; } else { nLength = nLength + 1; } if(nLength <= Title_Num) { sb.Append(stringChar[i]); } else { break; } } if(sb.ToString() != Title) { sb.Append("..."); } if(HtmlEncode) { return Server.HtmlEncode(sb.ToString()); } else { return sb.ToString(); } } } </script> <ul class="search_list"> <% string Table="article";//搜索的表名称 string sql_condition=""; string kw=Request.QueryString["kw"]; if(string.IsNullOrEmpty(kw)) { Response.Write("<li class='noitem'>对不起,没有您要找的记录。</li>"); } else { string url=""; kw=Sql_Format(kw.Trim(),true); kw=SubStr(kw,30,true).Replace("...",""); sql_condition+=" and title like '%"+kw+"%'"; string sql="select * from "+Table+" where site_id="+Site_Id+" and checked=1 and source_id=0 "+sql_condition; string countsql="select count(id) as co from "+Table+" where site_id="+Site_Id+" and checked=1 and source_id=0"+sql_condition; DataTable dt=Get_Data(sql,countsql,10); DataRow dr; if(dt.Rows.Count>0) { for(int i=0;i<dt.Rows.Count;i++) { dr=dt.Rows[i]; //说明:给dr赋值 url=Detail_Url(dr,Table); %> <li><span class="title"><a href="<%=url%>" target="_blank"><%=dr["title"]%></a></span> <span class="date"><%=((DateTime)dr["thedate"]).ToString("yyyy-MM-dd")%></span> </li> <% } } else { Response.Write("<li class='noitem'>对不起,没有查询到匹配的记录,您可以更换关键词重新搜索。</li>"); } } %> </ul> <script type="text/javascript"> var kw="<%=Server.HtmlEncode(Request.QueryString["kw"])%>"; if(kw!="" && Id("searchkw")!=null) { Id("searchkw").value=kw; } </script>
如下图:
2、接下来就是建一个搜索表单了,下面直接给演示代码,大家根据自己网站需要拷贝到页面中合适的位置,代码如下:
<input id="searchkw" type="text" /> <input value="搜索" type="submit" onclick="search_kw()"/> <script type="text/javascript"> function search_kw() { var search_url="/index.aspx?lanmuid=61&sublanmuid=699"; //这里改为上个步骤新建的子栏目页面的地址; var searchkw=document.getElementById("searchkw"); if(searchkw.value=="") { alert("请输入搜索关键词!"); searchkw.focus(); return; } if(search_url.indexOf("?")<0) { search_url+="?"; } else { search_url+="&"; } search_url+="kw="+encodeURIComponent(searchkw.value); location.href=search_url; } </script>
效果如下图:
这样一个简单搜索功能就做出来了,原理就是根据url传递参数来构造sql查询语句,大家可以根据自己需要去美化或扩展。