您现在的位置是:首页 > 分享首页分享
帝国cms搜索模板不生效的问题排查与解决
- 分享
- 2020-04-12 21:37:52
- 1已阅读
- 3
这个搜索模板的问题困扰了几个月,互联网上各种找解决办法,都没有解决。无意中微调网站的时候,删掉了“默认搜索模板”,导致新模板ID变成了2,后来顺利解决。
目前遇到的有三种情况,分别记录一下。
第一种问题:修改了搜索模板,但未生效。
解决办法:清除临时文件和数据,批量更新动态页面,清理浏览器缓存。
第二种问题:搜索模板不支持灵动标签和万能标签
解决办法:找到e/search/result/index.php这个文件,用sublime、DW等打开,最好不要用笔记本或者记事本,避免编码出错不统一导致乱码。用下面这段替换保存覆盖即可。
<?php
require
(
'../../class/connect.php'
);
require
(
'../../class/db_sql.php'
);
require
(
'../../class/functions.php'
);
require
(
'../../class/t_functions.php'
);
require
(
'../../data/dbcache/class.php'
);
require
"../"
.LoadLang(
"pub/fun.php"
);
$editor
=1;
eCheckCloseMods(
'search'
);
//关闭模块
$link
=db_connect();
$empire
=
new
mysqlquery();
$getvar
=
$_GET
[
'getvar'
];
if
(
empty
(
$getvar
))
{
$getfrom
=
"history.go(-1)"
;
}
else
{
$getfrom
=
"../../../search/"
;
}
//搜索结果
$searchid
=(int)
$_GET
[
'searchid'
];
if
(
empty
(
$searchid
))
{
printerror(
"SearchNotRecord"
,
$getfrom
,1);
}
$search_r
=
$empire
->fetch1(
"select searchid,keyboard,result_num,orderby,myorder,tbname,tempid,andsql,trueclassid from {$dbtbpre}enewssearch where searchid='$searchid'"
);
if
(
empty
(
$search_r
[
'searchid'
])||InfoIsInTable(
$search_r
[tbname]))
{
printerror(
"SearchNotRecord"
,
$getfrom
,1);
}
$page
=(int)
$_GET
[
'page'
];
$page
=RepPIntvar(
$page
);
$start
=0;
$page_line
=
$public_r
[
'search_pagenum'
];
//每页显示链接数
$line
=
$public_r
[
'search_num'
];
//每页显示记录数
$offset
=
$page
*
$line
;
//总偏移量
$search
=
"&searchid="
.
$searchid
;
$myorder
=
$search_r
[orderby];
if
(
empty
(
$search_r
[myorder]))
{
$myorder
.=
" desc"
;
}
$add
=
stripSlashes
(
$search_r
[
'andsql'
]);
$num
=
$search_r
[result_num];
$query
=
"select * from {$dbtbpre}ecms_"
.
$search_r
[tbname].(
$add
?
' where '
.
substr
(
$add
,5):
''
);
$query
.=
" order by "
.
$myorder
.
" limit $offset,$line"
;
$sql
=
$empire
->query(
$query
);
$listpage
=page1(
$num
,
$line
,
$page_line
,
$start
,
$page
,
$search
);
//取得模板
if
(
$search_r
[
'tempid'
])
{
$tempr
=
$empire
->fetch1(
"select temptext,subnews,listvar,rownum,showdate,modid,subtitle,docode from "
.GetTemptb(
"enewssearchtemp"
).
" where tempid='"
.
$search_r
['tempid
']."'
limit 1");
}
elseif
(
empty
(
$class_r
[
$search_r
[trueclassid]][searchtempid]))
{
$tempr
=
$empire
->fetch1(
"select temptext,subnews,listvar,rownum,showdate,modid,subtitle,docode from "
.GetTemptb(
"enewssearchtemp"
).
" where isdefault=1 limit 1"
);
}
else
{
$tempr
=
$empire
->fetch1(
"select temptext,subnews,listvar,rownum,showdate,modid,subtitle,docode from "
.GetTemptb(
"enewssearchtemp"
).
" where tempid='"
.
$class_r
[
$search_r
[trueclassid]][searchtempid].
"' limit 1"
);
}
$have_class
=1;
//页面支持标签
$tempr
[temptext]=DtNewsBq(
'list'
.
$search_r
[
'tempid'
],
$tempr
[temptext],0);
//替换公共模板变量
$listtemp
=
$tempr
[temptext];
if
(
$public_r
[
'searchtempvar'
])
{
$listtemp
=ReplaceTempvar(
$listtemp
);
}
$search_r
[keyboard]=ehtmlspecialchars(
$search_r
[keyboard]);
$listtemp
=
str_replace
(
"[!--show.page--]"
,
$listpage
,
$listtemp
);
$listtemp
=
str_replace
(
"[!--keyboard--]"
,
$search_r
[keyboard],
$listtemp
);
$listtemp
=
str_replace
(
"[!--ecms.num--]"
,
$num
,
$listtemp
);
$url
=
"<a href='"
.ReturnSiteIndexUrl().
"'>"
.
$fun_r
[
'index'
].
"</a> > "
.
$fun_r
[
'adsearch'
];
$pagetitle
=
$fun_r
[
'adsearch'
].
" "
.
$search_r
[keyboard];
$listtemp
=ReplaceSvars(
$listtemp
,
$url
,0,
$pagetitle
,
$pagetitle
,
$pagetitle
,
$add
,0);
$rownum
=
$tempr
[rownum];
if
(
empty
(
$rownum
))
{
$rownum
=1;
}
$formatdate
=
$tempr
[showdate];
$subnews
=
$tempr
[subnews];
$subtitle
=
$tempr
[subtitle];
$docode
=
$tempr
[docode];
$modid
=
$tempr
[modid];
$listvar
=
str_replace
(
'[!--news.url--]'
,
$public_r
[newsurl],
$tempr
[listvar]);
//字段
$ret_r
=ReturnReplaceListF(
$tempr
[modid]);
//取得列表模板
$list_exp
=
"[!--empirenews.listtemp--]"
;
$list_r
=
explode
(
$list_exp
,
$listtemp
);
$listtext
=
$list_r
[1];
$no
=
$offset
+1;
$changerow
=1;
while
(
$r
=
$empire
->fetch(
$sql
))
{
//替换列表变量
$repvar
=ReplaceListVars(
$no
,
$listvar
,
$subnews
,
$subtitle
,
$formatdate
,
$url
,
$have_class
,
$r
,
$ret_r
,
$docode
);
$listtext
=
str_replace
(
"<!--list.var"
.
$changerow
.
"-->"
,
$repvar
,
$listtext
);
$changerow
+=1;
//超过行数
if
(
$changerow
>
$rownum
)
{
$changerow
=1;
$string
.=
$listtext
;
$listtext
=
$list_r
[1];
}
$no
++;
}
db_close();
$empire
=null;
//多余数据
if
(
$changerow
<=
$rownum
&&
$listtext
<>
$list_r
[1])
{
$string
.=
$listtext
;
}
$string
=
$list_r
[0].
$string
.
$list_r
[2];
echo
stripSlashes
(
$string
);
?>
截图一,标签已生效,搜索结果模板未生效
解决办法,查看搜索代码<input name="tempid" value="X" type="hidden">,其中的"X"代表搜索模板的ID,如果新建搜索模板,其他模板中的ID必须对应,更新全部,最后完美显示正常。搜遍互联网,都没有找到解决办法,希望能帮到遇到同样问题的人。
截图二,这个是最终的搜索结果显示页面