在 Plone 中针对特定内容类型自定义搜索 portlet

2024-01-11

我在网站的某些区域使用搜索 portlet,但我想将结果限制为仅搜索特定内容类型:例如仅搜索新闻项目,或仅显示教职员工目录个人资料。

我知道你可以在到达后执行此操作@@search通过该“过滤器”列表形成,但有没有办法从过滤器开始,以便“实时搜索”结果仅显示相关结果(即仅新闻项目或仅个人资料)。


我怀疑您已经知道了,但为了确定:您可以全局定义哪些类型应该允许显示在控制面板导航设置的搜索结果中,然后将相关部分导出并包含到产品的 GS 配置文件中-propertiestool.xml.

但是,如果您希望仅在某些部分中排除某些类型,您可以自定义Products.CMFPlone/skins/plone_scripts/livesearch_reply,它已经过滤了类型,仅在第 38 行(版本 4.3.1)周围显示“Friendly_types”,并添加如下条件:

Edit:我删除了检查上下文的 Absolute_url 的解决方案,因为在这种情况下,上下文实际上是 livesearch_reply,而不是当前的部分位置。相反,该语句现在检查引用者是否是我们的部分:

REQUEST = context.REQUEST
current_location = REQUEST['HTTP_REFERER']
location_to_filter = '/fullpath/relative/to/siteroot/sectionId'
url_to_filter = str(portal_url) + location_to_filter
types_to_filter = ['Event', 'News Item']

if current_location.find(url_to_filter) != -1 or current_location.endswith(url_to_filter):
    friendly_types = types_to_filter
else:
    friendly_types = ploneUtils.getUserFriendlyTypes()

然而,如果用户点击回车键或回车键或“高级搜索...”链接,则登陆到与肝脏结果不同的结果页面,这会使情况悬而未决。

Update:将过滤应用到 @@search-template 的方法可以是注册具有以下内容的 Javascript:

(function($) {
    $(document).ready(function() {
        // Let's see, if we are coming from our special section:
        if (document.referrer.indexOf('/fullpath/relative/to/siteroot/sectionId') != -1) {
            // Yes, we have the button to toggle portal_type-filter:
            if ($('#pt_toggle').length>0) {
                // If it's checked we uncheck it:
                if ($('#pt_toggle').is(':checked')) {
                    $('#pt_toggle').click();
                }
                // If for any reason it's not checked, we check and uncheck it,
                // which results in NO types to filter, for now:
                else {
                    $('#pt_toggle').click();
                    $('#pt_toggle').click();
                }
                // Then we check types we want to filter:
                $("input[value='Event']").click();
                $("input[value='News Item']").click();
            }
        }
    })
})(jQuery);

此外,不同的用户操作会导致不同的、不一致的行为:

  • Livesearch 接受不尖锐的术语,而@@search-view 仅接受尖锐的术语或要求用户知道,您可以附加星号以获得不尖锐的结果。

  • 在实时搜索输入中按 Enter/Return 键时,搜索词将传输到登陆页面的 (@@search)输入元素,而当单击“高级搜索...”时,搜索词会丢失。

Update:为了克服尖锐的结果,您可以将其添加到 JS 中的 if 语句之后:

// Get search-term and add an asterix for blurry results:
var searchterm = decodeURI(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + encodeURI('SearchableText').replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1")) + '*';
// Insert new searchterm in input-text-field:
$('input[name=SearchableText]').val(searchterm);

Update2:在此相关任务中,Eric Brehault 提供了在提交期间传递星号的更好解决方案:自定义克隆搜索 https://stackoverflow.com/questions/41811422/customize-plone-search

当然,你也可以在livesearch_reply中自定义advanced-search-link的目标,分别在@@search的JS中,但这个链接在UI方面是相当多余的,恕我直言。

另外,如果您仍在使用原型,并且根据上下文有更多预过滤搜索结果的用例,我可以建议您看看集体形式标准 https://github.com/collective/collective.formcriteria,它允许通过 UI 定义搜索条件。我喜欢它,因为它通用且简单的克隆方法:编目 indizi 和集合。与 eea.facetednavigation 相反,它不会破坏可访问性,并且也可以通过一些 live-search-js-magic 逐步增强,只需付出一点努力。感谢罗斯帕特森 http://rpatterson.net/这里!只需通过更改集合(旧式)的视图即可将其转换为搜索表单,并且它也可以显示为集合 portlet。您可以决定用户应该能够更改哪些标准(例如,您隐藏类型过滤器并提供文本搜索输入)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Plone 中针对特定内容类型自定义搜索 portlet 的相关文章

  • Mysql Codeigniter Active Record - 如何执行 where_in 查询并返回正确的结果顺序?

    我有一组按特定顺序传递的 ID 需要保留 我正在从几个左连接查询与每个 ID 相关的数据 ID 是从搜索中返回的 因此必须保持顺序以使结果有效 否则搜索变得毫无意义 我的代码看起来像这样 this gt db gt where in id
  • 如何在手机SD卡或其他位置搜索文件

    我想搜索用户移动设备上具有特定扩展名的文件 我尝试搜索但找不到任何直接的 API 是否有特定的 API 或者是否有实现相同目的的繁琐方法 或者是否有一种机制可以调用 linux 调用 find 或类似的东西 Thanks boolean i
  • 在 div 类中使用 javascript 搜索文本 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我想制作一个脚本 在其中我可以使用 document getElementByClassName 自动搜索某个字符串 没有文本框或任何内容
  • 谷歌图片搜索是如何实现的?

    我只需拖放谷歌中的任何图像即可获得结果 它是如何实施的 该算法背后的想法是什么 该图像数据是否转换为任何内容以供搜索或 不知道 令人惊讶的是 我们还可以使用Google来回答这个问题 Google 按图像搜索使用的算法是什么 http ww
  • 让 Google 搜索回归 Python

    我正在尝试从 Google 搜索中获取前 20 个结果 当我使用urllib2 urlopen 它给了我一个错误并说我被禁止了 我听说这与伪造用户代理字符串有关 但我几乎没有 urllib2 经验 如果有人可以提供帮助 我将非常感激 谢谢
  • 如何从 Solr 查询中获取 tf 和 idf 分数?

    以下 Solr 文档 https cwiki apache org confluence display solr Function Queries https cwiki apache org confluence display sol
  • Solr 高亮显示

    我看到了这个帖子here https stackoverflow com questions 4058913 how to highlighting search results using apache solr with php cod
  • SOLR 中的子字符串匹配

    我似乎无法弄清楚如何使用 SOLR 查找子字符串匹配 我已经根据前缀找出了匹配 这样我就可以让火腿与汉堡包匹配 我如何搜索 汉堡 来匹配汉堡包 我试过burger但这引发了错误 或 不允许作为 WildcardQuery 中的第一个字符 如
  • 冷融合和分页

    首先 我对 ColdFusion 很陌生 但学得很快 因此 我正在尝试构建一个大型数据库 最初每页显示 25 行的所有结果 并有一个下一个 上一个链接来浏览页面 这一切都工作正常 但是当我执行搜索时 当新结果显示大约几页时 分页链接不起作用
  • 将 Archetype 新闻项目迁移到 Dexterity 内容类型

    我正在尝试将新闻项目中的内容复制到我编写的其他内容类型 在我的脚本中我有news项目和project物品 第二 project 是使用 Dexterity 定义的内容类型 如果我可以复制图像和正文 那就太好了news to project在
  • 相对文件路径问题

    我正在开发一个尝试读取配置文件的 portlet 我正在 eclipse 项目中开发它 我目前将配置文件放置在 WEB INF 文件夹 位于 root WEB INF 中 中 其名称为 config properties 如何使用 java
  • php/mysql 搜索多个值

    我有一个带有 国家 城市 地区 已发布 字段的表格 我有一个搜索表单 人们可以在其中输入国家 城市或地区 我想要获取所有已发布的房屋 1 并且任何搜索词都与其任何字段相匹配 这是我到目前为止所拥有的 SELECT FROM homes WH
  • 在 mysql 中搜索带变音符号的阿拉伯语

    所以我有一个巨大的带有变音符号的阿拉伯语书面文本数据库 变音符号是阿拉伯语中附加到其他字符的小字符 例如 带变音符号 不带变音符号 我正在使用 mysql 和 laravel 在文本中搜索没有变音符号的特定单词 如何忽略搜索中的变音符号 看
  • 为什么使用 Dijkstra 算法而不是最佳(最便宜)优先搜索?

    从我到目前为止所读到的来看 这最佳优先搜索 https en wikipedia org wiki Best first search在找到到达目标的最短路径方面似乎更快 因为 Dijkstra 算法在遍历图时必须放松所有节点 是什么让 D
  • Linux命令:如何仅“查找”文本文件?

    经过几次谷歌搜索后 我得出的结论是 find my folder type f exec grep l needle text exec file grep text 这非常不方便 并且会输出不需要的文本 例如 mime 类型信息 还有更好
  • 使用文本框搜索 datagridview 中的列 (vb.net)

    如何使用文本框搜索 datagridview 中的列 我正在使用 vb net 2010 我有一个带有数据源的 Datagridview 下面是我用于填充 datagridview 的代码 网格视图将有 4 列 Private Sub Lo
  • 在应用程序中搜索对象的设计模式

    需要一些有关设计模式的帮助 我正在创建一个应用程序 该应用程序在存储在单独表中的数据库中的对象上具有不同类型 例如 我有 5 种对象 A B C D E 我在数据库中有 5 个不同的表来存储每个对象 现在 我想在我的应用程序中实现搜索功能
  • 从 WordPress 搜索结果页面获取类别名称

    在特定博客类别中进行搜索查询 重定向到 WP BLOG 主页面 后 我的搜索 URL 如下所示 online shop s category new posts category post type post 不幸的是 我无法在搜索结果页面
  • Lua中如何在另一个表的表成员中搜索

    我正在编写一个 lua 程序 它有一个表 该表是另一个表的成员 当我向该成员表添加新日期时 一切正常 但是 当我想在该表中搜索时 无论我给出什么键 我总是会将最后一行添加到表中 如何在该成员表中正确搜索 Stream name functi
  • 实时搜索错误

    我正在获取用户偏好和角色 一切正常并且数据接收正确 默认值放置在单选按钮上以突出显示用户当前拥有的选项 我正在使用 Antd Design Table 组件 问题 当我将用户首选项更改为打印文档时 它确实通过数据库的状态成功更改了它 但是现

随机推荐

  • 动画汉堡导航

    我正在为我的网站创建一个完整的页面导航阴影 以便它在所有设备上都相同 目前我有两个按钮 一个用于当阴影在视野中时 一个用于当阴影不在视野中时 我想知道是否让一个按钮始终存在以便可以动画化会更好 我的目标是像squeeze动画片here ht
  • 固定大小缓冲区不能直接从“this”对象使用

    我使用结构来表示纯数据 其中一个字段是固定大小的缓冲区 如下所示 StructLayout LayoutKind Sequential Pack 2 unsafe struct ImageDosHeader private fixed us
  • 如何解决部署到heroku时rails中的更新捆绑器警告?

    出现以下警告该如何解决 我将 ruby 版本更新为 2 3 1 将 Rails 版本更新为 4 2 6 当我将应用程序推送到 heroku 时 我收到此警告 remote Cleaning up the bundler cache remo
  • 在 php 数据表中添加属性以用于 google 图表自定义 html 工具提示

    我正在尝试通过将自定义 html 工具提示添加到数据表中来在我的 google 图表中创建自定义 html 工具提示 现在我的数据表正在 PHP 中创建 如下所示 datatable array cols gt array array ty
  • 如何获取事务内SELECT语句的结果?

    我无法通过 PostgreSQL 文档 网络甚至 StackOverflow 获得有关这个简单问题的信息 我一定不明白这里的一些重要内容 我正在做一个简单的SELECT UPDATEPostgreSQL 中的事务 START TRANSAC
  • 处理时间序列中的缺失值

    我正在处理时间序列数据 我需要有连续的时间戳 但在捕获时很少有数据时间戳点被遗漏 如下所示 DF ID Time Stamp A B C 1 02 02 2018 07 45 00 123 567 434 2 02 02 2018 07 4
  • OK Google 搜索操作会导致 VoiceInteraction() 始终返回 false

    In the 语音交互 API 的 Google CodeLabs 示例 http io2015codelabs appspot com codelabs voice interaction 活动是使用以下意图过滤器定义的 请参阅步骤 6
  • Perl 中 BEGIN 块的作用是什么?

    我知道 BEGIN 块是在 Perl 程序主体之前编译和执行的 如果您不确定 请尝试运行命令 perl cw ms dist perl5 bin perl5 8 use strict use warnings BEGIN print Hel
  • Microsoft Graph:使用测试版获取用户日历事件

    我正在尝试使用 Microsoft Graph beta 版本获取用户日历事件 我可以通过此请求获取日历信息 https graph microsoft com beta users user calendars calendarid 然后
  • 如何使用 XDocument 保留所有 XML 格式?

    我正在尝试读取 XML 配置文件 进行一些调整 查找并删除或添加元素 并再次保存它 我希望此编辑尽可能不具有侵入性 因为文件将受到源代码控制 并且我不希望无关紧要的更改导致合并冲突等 这大致是我所得到的 XDocument configDo
  • 设置wpf图像的图像源

    我知道有一些类似的问题 但它们对我没有帮助 有以下代码可以在代码后面显示图像 BitmapImage logo new BitmapImage logo BeginInit logo UriSource new Uri pack appli
  • PHP/Mysql 搜索 - 区分大小写

    我使用以下 PHP 和 MySql 从表中获取行 search word GET search word search word new mysql escape string search word search word fix str
  • 如何确定SSE预取指令大小?

    我正在使用包含 SSE 预取指令的内联汇编的代码 预处理器常量确定是否使用 32 64 或 128 字节预取的指令 该应用程序在多种平台上使用 到目前为止 我必须在每种情况下调查对于给定 CPU 来说哪一个是最佳选择 据我所知 这是缓存行大
  • 具有 MYSql 的实体框架,在复杂实体返回类型中不返回列

    我将 MySQL 与 edmx 文件结合使用 我在向存储过程添加函数时遇到问题 当我选择 复杂类型 并按 获取列信息 按钮时 我收到以下消息 所选存储过程不返回任何列 当我在 SQL Server 中创建相同的过程 然后将该函数添加到新的
  • 无法使级联组合框工作

    我正在尝试制作级联组合框 但我似乎无法让它工作 例如 如果我在第一个组合框中选择特定计算机 那么第二个组合框应仅显示与该计算机兼容的硬盘 我还提供了我创建的数据库的链接 谁能帮我解决这个问题吗 我有 2 个带有字段的表 tblCompute
  • 是否有任何可以以编程方式调用的 Eclipse 重构 API?

    我需要从广义上重构代码 我知道从 Eclipse IDE 内部我可以重构我的类 但是是否有任何 API 可以在 java 项目中使用 以便我可以通过代码动态重构项目 我需要一些关于如何实现以下目标的想法 一个调用所有 Eclipse 重构进
  • 从 Laravel 本地存储中的特定目录中删除文件

    我将文件存储在本地存储中 所以 在 storage app public目录 我将我的文件存储在 storage app public userId images I used php artisan storage link 这样我就可以
  • NETCONF(.Yin/Yang 文件)中的 include 和 import 语句有什么区别

    我知道您可以创建一个单独的 yang 文件 类似于存储 MIBS 语法值的文本约定 并将其导入另一个 yang 文件以使数据更有组织性和结构化 但我似乎无法理解其中包含的内容声明有不同吗 它是否将整个文件 导入 到包含它的文件中 如果是这样
  • 尝试连接 Sass 变量和字符串

    我正在尝试将 Sass 变量与字符串连接起来 我该怎么做 下面有一个代码示例 mixin setIcons pathImages pathImages extensionIcon extensionIcon each class icon
  • 在 Plone 中针对特定内容类型自定义搜索 portlet

    我在网站的某些区域使用搜索 portlet 但我想将结果限制为仅搜索特定内容类型 例如仅搜索新闻项目 或仅显示教职员工目录个人资料 我知道你可以在到达后执行此操作 search通过该 过滤器 列表形成 但有没有办法从过滤器开始 以便 实时搜