搜索 自定义字段

自定义搜索字段教程

内容模型管理 > 自定义搜索管理(点击那个你想要自定义搜索的内容模型旁边的那个放大镜的小图标)


然后勾选要搜索的字段,生成下面的代码加入到自己的搜索框即可。



搜索结果页的模板是advancedsearch.htm,第一步是要修改advancedsearch.php,指向自己那个模板目录,这个不难。

但是在搜索结果页中,自定义的字段需要调用出来就还是需要回到advancedsearch.php修改。


1、修改puls/advancedsearch.php文件,找到 
$query = "select arctype.* from $addontable addon 
left join cmsxx_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 cmsxx_arctype type on type.id=main.typeid 
left join $addontable addon on addon.aid=main.id 
$where $orderby"; 
在select后面增加"addon.*," 
 
修改后应该是
$query = "select addon.*, arctype.* from $addontable addon 
left join cmsxx_arctype arctype on arctype.id=addon.typeid 
$where $orderby"; 
} else { 
$query = "select addon.*,main.id as aid,main.*,main.description as description1, type.* 
from $maintable main 
left join cmsxx_arctype type on type.id=main.typeid 
left join $addontable addon on addon.aid=main.id 
$where $orderby"; 

特别注意是dede5.7版本,上面的addon.*,已经存在,但是下面的要自己添加,这样结果页才能用{dede:datalist}中直接调用{dede:field.字段名称/} !!!




如果要做双语站,在自己的模板文件夹下建立多一个advancedsearch_en.htm之外,还要在做多一个plus/advancedsearch_en.php,而且这个要修改,注释掉原来的

if(file_exists(DEDEROOT."/templets/seka/$template"))
{
    $templatefile = DEDEROOT."/templets/seka/$template";
}
else
{
    $templatefile = DEDEROOT."/templets/seka/advancedsearch_en.htm";
}

在下面加入一句

$templatefile = DEDEROOT."/templets/seka/advancedsearch_en.htm";

直接调用而不用判断,否则会用回原来的那个中文版的advancedsearch.htm


<think>好的,我现在需要帮助用户了解如何在HKCMS的后台archive控制器中搜索自定义字段。首先,我得回忆一下HKCMS的基本结构,通常CMS系统会有模型、控制器、视图的分层结构。自定义字段一般存储在数据库的特定表中,可能是在主表或者附加表中。 用户提到的是archive控制器,通常这个控制器负责处理内容归档或列表,可能涉及到查询文章或其它内容类型。搜索功能通常涉及到接收请求参数,构造查询条件,然后执行数据库查询。 首先,我需要确定HKCMS的自定义字段是如何存储的。常见的做法是使用meta表或者附加字段表,每个自定义字段作为一条记录,或者以序列化形式存储。如果是键值对的形式,可能需要联表查询或者使用LIKE语句。 接下来,在控制器中,搜索功能可能需要接收前端传来的参数,比如字段名和值,然后将这些参数转换为查询条件。例如,用户可能通过GET或POST请求传递custom_field和keyword参数。 然后,需要考虑如何安全地处理这些参数,防止SQL注入,可能需要使用框架提供的查询构造器方法,比如whereExists子查询或者联表查询。例如,使用ORM的whereHas方法,或者直接写子查询关联meta表。 另外,分页和结果的处理也是需要考虑的,确保搜索结果能正确分页,并且返回相应的视图。 可能的步骤包括: 1. 在archive控制器中添加处理自定义字段搜索的逻辑。 2. 获取请求中的自定义字段名称和值。 3. 构建数据库查询,关联自定义字段表,添加WHERE条件。 4. 处理分页和结果返回。 5. 视图层展示搜索表单和结果。 需要确认HKCMS的数据库结构,特别是自定义字段的存储方式。如果用户没有提供足够的信息,可能需要给出通用的实现思路,或者建议查看HKCMS的文档或数据库结构。 同时,要提醒用户注意参数验证和安全性,避免直接拼接SQL语句,使用框架提供的安全查询方法。</think>在HKCMS后台通过archive控制器实现自定义字段搜索,通常需要以下步骤(请根据实际版本调整): 1. **数据库结构确认** - 检查自定义字段存储表(如`cms_archive_meta`) - 确认字段存储格式(如`meta_key`/`meta_value`结构) 2. **控制器修改示例** ```php // ArchiveController.php public function index(Request $request) { $query = Archive::query(); // 接收自定义字段参数 格式:fieldname=字段名&fieldvalue=值 if ($request->has('fieldname') && $request->filled('fieldvalue')) { $field = $request->input('fieldname'); $value = $request->input('fieldvalue'); $query->whereHas('meta', function($q) use ($field, $value) { $q->where('meta_key', $field) ->where('meta_value', 'LIKE', "%{$value}%"); }); } $list = $query->paginate(15); return view('admin.archive.index', compact('list')); } ``` 3. **模型关系配置** ```php // Archive.php 模型 public function meta() { return $this->hasMany(ArchiveMeta::class); } ``` 4. **视图层添加搜索表单** ```html <!-- 在列表页搜索区域添加 --> <form class="form-inline"> <select name="fieldname" class="form-control"> <option value="custom_color">颜色</option> <option value="custom_size">尺寸</option> </select> <input type="text" name="fieldvalue" placeholder="搜索值" class="form-control"> <button type="submit" class="btn btn-primary">搜索</button> </form> ``` **注意事项:** 1. 需要提前在系统设置中定义好可搜索字段白名单 2. 建议对`fieldname`参数做合法性验证 3. 复杂搜索建议使用`whereExists`代替`whereHas`提升性能 4. 如需精确匹配,将LIKE改为=即可 5. 多字段组合搜索可通过循环处理请求参数实现 如果需要实现更复杂的搜索逻辑(如范围查询、多值查询),建议通过扩展Meta模型的作用域来实现更优雅的查询方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值