如何根据自定义字段进行搜索,同时还要在advancedsearch显示自定义字段,dedecms织梦实际上是支持自定义字段的查询的,但是不支持在高级搜索advancedsearch显示自定义字段,要进行小小的改造。
一、在模型管理里面勾选要进行高级查询的字段:
后台->核心->内容模型管理
根据你添加字段的频道,点击放大镜,进入高级搜索(精确搜索)界面:
这里自定义字段以“测试1”、“测试2”为例,然后粘贴到你需要搜索的模板中,样式自行调整。
二、修改搜索模板
和普通搜索的search.htm一样,advancedsearch高级搜索也是有模板的,默认很丑,下面是修改方法:
找到?plus/advancedsearch.php
找到末尾如下代码
if(file_exists(DEDEROOT."/templets/default/$template"))
{
$templatefile = DEDEROOT."/templets/default/$template";
}
else
{
$templatefile = DEDEROOT."/templets/default/advancedsearch.htm";
}
“default”为系统默认模板路径,根据自己模板修改即可(备注:advancedsearch.htm 需要拷贝到自己模板下)
这就完成了。
三、让自定义搜索支持头部、尾部、channel、channelartlist:
在advancedsearch.htm 头部标签 换成:
<?php pasterTempletDiy("default/head.htm");?>
尾部标签换成:
<?php pasterTempletDiy("default/footer.htm");?>
/include/extend.func.php?最后边增加
function pasterTempletDiy($path){
require_once(DEDEINC."/arc.partview.class.php");
global $cfg_basedir,$cfg_templets_dir;
$tmpfile = $cfg_basedir.$cfg_templets_dir."/".$path; //模版文件的路径
$dtp = new PartView();
$dtp->SetTemplet($tmpfile);
$dtp->Display();
}
这样就搞定了
四、在模板advancedsearch.htm如何显示自定义字段:
/plus/advancedsearch.php?找到如下代码:
if($mid < -1){
$where = str_replace('main.', 'addon.', $where);
$orderby = str_replace('main.', 'addon.', $orderby);
$query = "SELECT addon.*, arctype.* FROM $addontable addon
LEFT JOIN dede_arctype arctype ON arctype.id = addon.typeid
$where $orderby";
} else {
$query = "SELECT main.id AS aid,main.*,main.description AS description1, type.*
FROM $maintable main
LEFT JOIN dede_arctype type ON type.id = main.typeid
LEFT JOIN $addontable addon ON addon.aid = main.id
$where $orderby";
}
将以下代码:
$query = "SELECT main.id AS aid,main.*,main.description AS description1, type.*
修改为:
$query = "SELECT addon.*,main.id AS aid,main.*,main.description AS description1, type.*
然后,在模板advancedsearch.htm中使用:
{dede:field.自定义字段/}
最后调用即可。
评论前必须登录!
注册