原创:超实用!单系统多“子站”时的搜索页模板解决方案
————首先感谢猫哥[动易设计志弘],没有他的技术指导,这个事情就浮云了,也是他授权我写这篇分享。必看啊亲们!
我想输出的童鞋应该遇到过类似的情况,但由于项目的不同,客户的要求不同,最终项目走向也不同;以前也遇到类似的情况,但后来客户却说把子站的搜索给去掉,再后来……就没有后来了,结束了。
看上图节点情况,这次做YBTJJ就决定试试做出来,问了几位同事,提供的想法都不同。
现在就介绍一下这个办法,作为伸手党之一,大家放心拿走使用:
1.原理:
·利用复制出来的search.aspx文件复制出对应子站的,search1.aspx,search2.aspx,search3.aspx;
·那么与主站一起算就是4个searchN.aspx文件了;
·然后对应的aspx绑定对应的子站搜索页模板.html(打开FrontTemplateList.config里面绑定);
·修改各个子站对应的搜索标签和SQL语句,搜索地址限制对应的“子站”节点ID及其子节点,主站则排除“子站”的ID及其子节点。
——原理理解的话,应该可以关闭本文了,如果伸手党不理解,可以看下面的实操,直接使用——
2.实操!:
·到网站根目录下找到search.aspx,复制对应的文件数量;
·
然后到config下打开FrontTemplateList.config,绑定对应的aspx和你的子站搜索页模板
·这里以search1.aspx为例:
复制一个标签“全站搜索按标题.config”,命名为“全站搜索按标题1.config”以便与原来的区分开,打开“全站搜索按标题1.config”,添加属性值nodes,如图:
,并修改该标签的SQL语句,如图:
两处地方都是同一句:AND NodeID IN (
)
·再到对应的“子站A搜索结果页.html”模板中添加列表标签属性(黄色高亮):
{PE.Label id="全站搜索按标题1" bindStyle="普通式" nodes="{PE.Label id="取得子节点集" nodeId="@RequestInt_nodeId" /}" outputQty="20" titleLength="70" split="5" displayDateTime="mm-dd" displayTips="true" usePage="true" keyword="@Request_keyword" /}
·再打开搜索功能的JS代码段,修改搜索地址的传值,填写你的“子站”节点ID,如图:
记得修改search.aspx为search1.aspx,对应好绑定的模板,后面传值加上&nodeId=xx
至此,子站的修改已完成!子站B、子站C等等只需要修改搜索页模板的标签调用、JS的搜索页地址和传值,即可。
疑问:子站现在可以排除掉主站的文章了,那么主站怎么排除子站呢?道理一样的,不过要多改一个小地方……
实操!:
·主站使用的“全站搜索按标题.config”也一样加入nodes新属性值(不配图了),SQL语句如图
第一句变成NOT IN,第二句不变;
·“主站搜索页模板.html”的对应列表标签:{PE.Label id="全站搜索按标题" bindStyle="普通式" nodes="{PE.Label id="取得子节点集" nodeId="@RequestInt_nodeId" /}" outputQty="20" titleLength="70" split="5" displayDateTime="mm-dd" displayTips="true" usePage="true" keyword="@Request_keyword" /}
·修改JS的搜索地址传值:
因为是主站排除子站,所以就写上两个子站的节点ID咯:&nodeId=xx&nodeId=xx
·结果你以为OK的时候,去主站搜一下,发现出错了,是传值不能解释的问题,最后一个修改来啦!打开config目录下的“QueryStrings.config”,如图:
找到search.aspx的nodeid,把原先的datatype由Int改成String,大功告成!
————如果需要地址看效果,请内部交流
用户登录
还没有账号?
立即注册