我正在尝试找出一种方法来搜索帖子的自定义字段。基本上,我需要的是找到 post.CustomField1 == "some value" 的帖子
我已经搜索和搜索并一直在挖掘 Graffiti CMS 源代码 (graffiticms.codeplex.com),但无法弄清楚我将如何做到这一点。
我正在尝试找出一种方法来搜索帖子的自定义字段。基本上,我需要的是找到 post.CustomField1 == "some value" 的帖子
我已经搜索和搜索并一直在挖掘 Graffiti CMS 源代码 (graffiticms.codeplex.com),但无法弄清楚我将如何做到这一点。
正如 EJB 所说,解决方案因您要实现搜索的位置而异。
如果您想查找具有特定自定义字段值的帖子,仅搜索当前页面上显示的帖子(例如 index.view 或类别视图),您可以在模板中使用 Chalk 执行此操作,如下所示:
#foreach($post in $posts)
#if($post.Custom("CustomField1") == "some value")
display or do something with $post
#end
#end
您还可以使用 API 遍历所有帖子并检查自定义值。不幸的是,Graffiti CMS 没有内置方法来根据特定的自定义字段值查询数据库中的帖子。
但是,您可以使用内置的基于 Lucene 的搜索引擎。如果您想使用搜索启用对特定自定义字段值的搜索,您需要对 Graffiti.Core.SearchIndex 类中的源代码进行一些调整。在 CreateDocument 方法中,将自定义字段值添加到索引 Document 中,如下所示:
doc.Add(Field.Text("CustomField1", t.Custom("CustomField1") ?? string.Empty));
然后在 GetQueryParser 方法中将该键添加到要搜索的字段列表中:
return new MultiFieldQueryParser(new string[] { "body", "title", "CustomField1" }, a);
通过上面的两个更改,您将能够搜索“某个值”并让它返回任何具有 CustomField1 值的帖子。
希望有帮助!