开发智能搜索插件
随着Joomla! 2.5版本的发布,一个新的搜索组件被包括进来,以改进Joomla!站点的搜索引擎。基于JXtended的Finder,智能搜索是一个非常强大的工具,可以用来改进搜索结果并展示用户真正想要的内容。默认情况下,智能搜索将适用于大多数核心数据,但第三方开发者将需要创建自己的Finder插件来与智能搜索交互。不用担心,我现在就帮你入门!
Finder插件做什么?
Finder插件是构建逻辑以在正常站点使用期间搜索项目并自动更新的地方。没有这些插件,组件的数据无法在智能搜索组件的搜索过程中进行索引和处理。对于“经典”搜索组件也有同样的要求,以启用数据的搜索。
Finder插件需要什么?
每个插件都有自己的独特要求,但每个插件都需要一些代码才能正常工作。为了避免发布大量代码片段,我将链接您到GitHub上的com_content文章的Finder插件:https://github.com/joomla/joomla-cms/blob/master/plugins/finder/content/content.php。我鼓励您跟随我在这里描述的代码。
类属性和外部依赖
正如您在文件doc块下方看到的,需要加载两个文件。jimport调用加载了JComponentHelper类,并在索引方法中使用该类。接下来,require_once语句加载了Finder插件的父类FinderIndexerAdapter。所有Finder插件都必须扩展此类才能正常工作。
现在,我将解释在这个插件中设置的每个类属性,以及一些父类中需要注意的属性
- $context - 这是插件的标识符;在所有核心使用中,这是类名中plgFinder之后的部分
- $extension - 插件支持的扩展,例如com_content
- $layout - 渲染搜索结果时将使用的子布局名称;在核心使用中,这是组件前端单项目视图的名称(为进一步解释,默认情况下,前端逻辑将在com_finder的搜索视图中查找default_article.php模板文件,如果不存在,则默认为default_result.php文件)
- $type_title - 插件正在处理的 内容类型 的标题;当可用过滤选项时,将用于显示“类型”过滤选项的名称(注意,这与语言字符串相关联;请参阅相应的语言文件以了解键的结构细节)
- $table - 存储组件数据的数据库表(注意:必须在此处使用#__前缀)
父类FinderIndexerAdapter中的其他属性包括
- $mime - 如果索引各种文件类型(如PDF文件),则应将此属性设置为该数据的正确MIME类型 - 默认为NULL
- $db - 数据库对象,所有插件都应使用此对象与数据库交互
$this->db
- $state_field - 这是数据库中存储发布的字段(通常是状态或字段)- 默认为状态
类函数和父类信息
接下来,我将描述此类中的每个函数以及需要在父类FinderIndexerAdapter中注意的重要方法。除了用于处理com_categories的Finder插件外,这些函数中的每一个都将输入一个父类,该父类包含用于更新项目索引属性的通用代码。希望覆盖这些函数的开发人员应仔细审查父类做了什么,以确保在所有情况下都能正确处理数据。
- public function __construct - 大多数插件所需的标准构造函数类,用于从默认位置加载插件的语言文件
- public function onFinderCategoryChangeState - 新增于Joomla! 2.5,此方法在onCategoryChangeState事件触发时同时触发,该事件在管理员列表视图中更改类别的发布状态时触发,用于更新类别的子项的索引属性(显然,对于没有类别->项目结构的组件不需要)
- public function onFinderAfterDelete - 此事件与onContentAfterDelete同时发生,默认情况下,删除已从组件或Smart Search管理员部分中删除的项目索引数据
- public function onFinderAfterSave - 此事件与onContentAfterSave同时发生,默认情况下,在更改项目访问级别或其父类别的访问级别时,更新项目的访问级别信息。单个项目的上下文检查应包括后端和前端单个项目编辑视图,以正常工作。
- public function onFinderBeforeSave - 此事件与onContentBeforeSave同时发生,默认情况下,查询并存储项目或父类别的访问级别;与onFinderAfterSave一起使用,在访问级别更改时更改索引数据
- public function onFinderChangeState - 此事件与onContentChangeState同时发生,默认情况下,在管理员列表视图中更改发布状态时更新项目的发布状态信息。此外,此方法捕获插件被禁用时的情况,并删除由现在已禁用的插件处理的索引数据。
- protected function index - 这是处理将项目添加到搜索索引的所有处理方法。这是设置诸如项目的原始URL、路由URL和元数据之类的位置的地点。
- protected function setup - 在索引方法之前运行此方法,准备索引器以处理插件的数据。在核心使用中,每个扩展的路由助手都包含在内,以便在索引过程中正确设置路由。
- 受保护的函数 getListQuery - 此方法使用查询设置 JDatabaseQuery 对象以拉取应索引的数据。在此必须使用 JDatabase 和 JDatabaseQuery API,否则索引器将失败。
开发者应了解来自父类 FinderIndexerAdapter 的方法有
- 受保护的函数 getStateQuery - 此方法使用查询设置 JDatabaseQuery 对象以拉取项目及其父类分类的发布状态和访问级别。不使用 category→item 结构的组件需要在它们的插件中重写此方法。
- 受保护的函数 getUpdateQueryByTime - 此方法使用查询设置 JDatabaseQuery 对象以从数据库表的 "modified" 字段中拉取更新时间。不存储此数据或使用不同字段名的组件需要在它们的插件中重写此方法。
- 受保护的函数 getURL - 此方法返回项目的非 SEF URL。使用 com_content 和文章 ID 为 1,默认返回值为 "index.php?option=com_content&view=article&id=1"。需要向 URL 添加额外信息的开发者需要在他们的插件中重写此方法。
请注意,这绝对不是 Smart Search 组件完整 API 的完整列表,而只是开发者编写其组件功能的插件所需了解的最小方法列表。
我有问题!!!
毫无疑问,关于 Smart Search 的问题或三个将会被问及。显然,最好的资源是 Joomla! 论坛 (http://forum.joomla.org) 和 Joomla! WIKI (http://docs.joomla.org)。WIKI 上已经有了关于 Smart Search 的几页信息,我本人经常浏览论坛,阅读许多帖子,并愿意帮助回答有关 Smart Search 的问题。所以,不要害羞,提问吧!
《Joomla 社区杂志》上发布的一些文章代表作者对特定主题的个人意见或经验,可能并不与 Joomla 项目官方立场一致
通过接受,您将访问 https://magazine.joomla.net.cn/ 外部第三方提供的服务
评论