首页 > 建站教程 > CMS教程 > dedecms >  织梦dedecms基于advancedsearch高级查询实现自定义字段查询、显示问题正文

织梦dedecms基于advancedsearch高级查询实现自定义字段查询、显示问题

我爱模板网根据客户需求,需要根据自定义字段进行搜索,同时还要在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.自定义字段/}
调用即可。