很多时候我们搜索不仅仅要搜索文章新闻,也要搜索产品等其他表单的数据,这个时候就需要用到全站搜索,下面讲解如何把数据加入到全站搜索表。
1、以文章资讯表为例,首先进入文章资讯的信息管理界面,点击加入全站搜索链接,如下图:
然后弹出全站搜索的管理界面,如下图:
在这里可以把需要加入的信息加入到全站搜索中,其他表操作类似。
2、制作全站搜索的内容显示页面,这个我们可以通过模型来制作,也可以新增一个自定义内容类型的子栏目来制作,下面我们用自定义子栏目来制作。
2.1、增加一个"自定义类容"类型的子栏目,增加后开启代码模式,全站搜索是需要自定义代码的,直接拷贝下面代码到内容区中即可。
<style type="text/css"> .allsearch{clear:both;overflow:hidden} .allsearch li{padding:0px 5px 5px 5px;margin-bottom:10px;border-bottom:1px dotted #cccccc;} .allsearch li.noitem{padding:0px 5px 0px 5px;border-bottom:0px;} .allsearch li .title{display:block;height:25px;line-height:25px;} .allsearch li .title a{font-size:14px;} .allsearch li .con{display:block;clear:both;overflow:hidden;} .allsearch li .con img{border:1px solid #efefef;float:left;width:100px;margin:2px 5px 5px 0px;_display:inline} .allsearch li .info{display:block;color:#666} .allsearch li .keyword{color:#CC0000} </style> <script language="c#" runat="server"> private bool IsStr(string str) { if(string.IsNullOrEmpty(str)){return false;} string str1="0123456789abcdefghijklmnopqrstuvwxyz_"; string str2=str.ToLower(); for(int i=0;i<str2.Length;i++) { if(str1.IndexOf(str2[i])==-1) { return false; } } return true; } 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="allsearch"> <% string sql_condition=""; string table=Request.QueryString["table"]; if(IsStr(table)) { sql_condition+=" and thetable='"+table+"'"; } string kw=Request.QueryString["kw"]; if(string.IsNullOrEmpty(kw)) { Response.Write("<li class='noitem'>对不起,没有您要找的记录。</li>"); } else { kw=Sql_Format(kw.Trim(),true); kw=SubStr(kw,30,true).Replace("...",""); sql_condition+=" and title like '%"+kw+"%'"; string sql="select title,thetable,thedate,detail_id,introduction from pa_alldata where checked=1"+sql_condition+" order by thedate desc"; string countsql="select count(id) as co from pa_alldata where checked=1"+sql_condition; string title,titpic,con,rkw,url; DataTable dt,dt1; dt=Get_Data(sql,countsql,10); DataRow dr,dr1; if(dt.Rows.Count>0) { for(int i=0;i<dt.Rows.Count;i++) { dr=dt.Rows[i]; //说明:给dr赋值 dt1=Get_Data("select * from "+dr["thetable"].ToString()+" where id="+dr["detail_id"].ToString()); if(dt1.Rows.Count==1) { dr1=dt1.Rows[0]; rkw="<span class='keyword'>"+kw+"</span>"; title=dr1["title"].ToString().Replace(kw,rkw); url=Detail_Url(dr1,dr["thetable"].ToString()); if(dr["thetable"].ToString()=="product") { titpic="<a href='"+url+"' target='_blank'><img src='"+dr1["titlepic"].ToString()+"'></a>"; } else { titpic=""; } con=SubStr(dr["introduction"].ToString(),150,true).Replace(kw,rkw); %> <li><span class="title"><a href="<%=url%>" target="_blank"><%=title%></a></span> <span class="con"><%=titpic%><%=con%></span> <span class="info">来源:<%=Get_Data("table_name","select table_name from pa_table where thetable='"+dr["thetable"].ToString()+"'")%> 发布时间:<%=((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.2、接下来就是建一个搜索表单了,下面直接给演示代码,大家根据自己网站需要拷贝到页面中合适的位置,代码如下:
<select id="search_table"> <option value="">所有表</option> <option value="article">文章</option> <option value=product">产品</option> </select> <!--select里面内容用户可以自己扩展--> <input id="searchkw" type="text" /><input value="搜索" type="submit" onclick="allsearch()"/> <script type="text/javascript"> function allsearch() { var search_url="/index.aspx?lanmuid=62&sublanmuid=564"; //这里改为上个步骤新建的子栏目页面的地址; var search_table=document.getElementById("search_table"); var searchkw=document.getElementById("searchkw"); if(searchkw.value=="") { alert("请输入搜索关键词!"); searchkw.focus(); return; } if(search_url.indexOf("?")<0) { search_url+="?"; } else { search_url+="&"; } search_url+="table="+search_table.value; search_url+="&kw="+encodeURIComponent(searchkw.value); location.href=search_url; } </script> 效果如下图: 这样大致一个全站搜索功能就做出来了,大家可以根据自己需要去美化或扩展。