DedeCMS织梦

织梦DedeCMS搜索结果调用自定义字段

阿里云

使用 dedecms 建站时,在后台增加了一个自定义字段,调用都是正常的,但是在搜索页却不显示,如果使其用户搜索这个自定义字段,找了好多文章和教程,却发现 dedecms 的标签底层模板字段不包括这个字段呢?这就大大限制了灵活性,但也不可能让所有字段都允许调用的,那样就会大大降低系统效率,所以今天分享的是一个比较完美解决这个问题的方法,配合 dede 标签,几乎可以说没有什么不能调用的了。

方法一(推荐)

1:找到并打开 include 目录下的 extend.func.php 文件,在文件末尾添加如下代码:

也想出现在这里?联系我们
创客主机
  1. function Search_addfields($id,$result){
  2. global $dsql;  
  3. $dedejs = $dsql->GetOne("SELECT * FROM `dede_addonsoft` where aid='$id'");
  4. $name=$dedejs[$result];
  5. return $name;
  6. }

其中 addosoft 是要调用自定义字段的附加表,在织梦后台核心->频道模型->内容模型管理可以看到,软件模型一般是 addonsoft,普通文章一般是 addonarticle,这个根据具体的需要来更改,其他的不用修改。

2:接下来找到并打开 include 目录下的 arc.searchview.class.php 文件,搜索“ //处理一些特殊字段”,在下面添加如下代码:

  1. $row["softsize"]=Search_addfields($row["id"],"softsize");

其中的 softsize 是软件大小的字段名,如果有多个自定义字段则添加多行,但是一定要把 softsize 修改成字段名。添加之后就完成了,最后一步就是在搜索模板也调用了,在 search.htm 中 使用[field:softsize/]标签 就可以调用出来软件大小了。

方法二

另一种 DEDEcms5.7 搜索结果页面中调用自定义字段处理办法,默认 dedecms 搜索页面是没法使用[field:price/]来调用 dede_addonshop 里面的 price 字段,修改 include/arc.searchview.class.php 文件:
第一处:
将大约 320 行地方的代码:

  1. if($this->ChannelType < 0 || $this->ChannelTypeid< 0){
  2.                  if($this->ChannelType=="0") $id=$this->ChannelTypeid;
  3.                  else $id=$this->ChannelType;
  4.                  $row =$this->dsql->GetOne("Select addtable From `cn_channeltype` Where id=$id");
  5.                  $addtable = trim($row['addtable']);
  6.                  $this->AddTable=$addtable;
  7.            }else{
  8.                  $this->AddTable="cn_archives";
  9.            }

改为:

  1. if($this->ChannelType=="0") $id=$this->ChannelTypeid;
  2.            else $id=$this->ChannelType;
  3.            $row =$this->dsql->GetOne("Select addtable From `cn_channeltype` Where id=$id");
  4.            $addtable = trim($row['addtable']);
  5.            if($this->ChannelType < 0 || $this->ChannelTypeid< 0){
  6.                  $this->AddTable=$addtable;
  7.                  $this->AddonTable='';
  8.            }else{
  9.                  $this->AddTable="cn_archives";
  10.                  $this->AddonTable=$addtable;
  11.             }

  第二处:
  将大约 500 行的地方的代码:

  1. $query = "Select arc.*,act.typedir,act.typename,act.isdefault,act.defaultname,act.namerule,
  2.            act.namerule2,act.ispart,act.moresite,act.siteurl,act.sitepath
  3.            from `{$this->AddTable}` arc left join `cn_arctype` act on arc.typeid=act.id
  4.            where {$this->AddSql} $ordersql limit $limitstart,$row";

改为:

  1. if (!empty($this->AddonTable)) {
  2.                  $this->AddonTable="left join `{$this->AddonTable}` addon on addon.typeid=arc.typeid";
  3.            }else {
  4.                  $this->AddonTable='';
  5.            }
  6.            $query = "Select arc.*,act.typedir,act.typename,act.isdefault,act.defaultname,act.namerule,
  7.            act.namerule2,act.ispart,act.moresite,act.siteurl,act.sitepath,addon.*
  8.            from `{$this->AddTable}` arc left join `cn_arctype` act on arc.typeid=act.id {$this->AddonTable}
  9.            where {$this->AddSql} $ordersql limit $limitstart,$row";

好了,可以在 search.htm 中使用[field:price/]了,只要你的模型有附加表,你就可以使用表里的任何字段
另外注意:如果附加表里有字段名和主表字段名一样的,使用[field:xxxx/]的结果是未定义的。

织梦 DedeCMS 搜索结果调用自定义字段

已有 352 人购买
查看演示升级 VIP立刻购买

收藏
(0)

发表回复

热销模板

Ashade - 作品展示摄影相册WordPress汉化主题
LensNews

本站承接 WordPress / PbootCMS / DedeCMS 等
系统建站、仿站、开发、定制等业务!