全站搜索的制作及实现方法
14
发表时间:2018-06-02 22:50

很多时候我们搜索不仅仅要搜索文章新闻,也要搜索产品等其他表单的数据,这个时候就需要用到全站搜索,下面讲解如何把数据加入到全站搜索表。

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()+"'")%> &nbsp; 发布时间:<%=((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>
效果如下图:   这样大致一个全站搜索功能就做出来了,大家可以根据自己需要去美化或扩展。


全部评论(0条)
亲~快来评论噢!
在线咨询

创建网站不从何开始?

拨打销售热线,直接对话专家

029-63375900

如有疑问:

会员登录
登录
其他帐号登录:
我的资料
我的收藏
购物车
0
留言
回到顶部