【问题标题】:Hiding a specific object of a catalog results隐藏目录结果的特定对象
【发布时间】:2013-03-06 14:02:34
【问题描述】:

有办法隐藏我的目录结果的特定对象吗? 我有一个不想显示的配置文件。 我是按id过滤的,但是看起来好难看。

from Products.CMFCore.utils import getToolByName
def search(context):
    catalog = getToolByName(context, 'portal_catalog')
    items = catalog()
    for item in items:
        if item.id != "config_file":
            'do something'

【问题讨论】:

  • 有几种方法可以使您的项目不显示在搜索结果中,但它们都针对不同的用例。导航树中不显示,无权限时不显示等。你的用例是什么?
  • 真的不是很清楚。我正在做一个显示新闻的简单视图,用户有权查看该对象,但我不想显示它。我已经在导航树中隐藏了对象。

标签: plone catalog


【解决方案1】:

如果您已经在导航树中隐藏了对象,则可以通过测试exclude_from_nav 来过滤相同的属性:

items = catalog()
for item in items:
    if item.exclude_from_nav:
        continue

    # do something with all objects *not* excluded from navigation.

过滤掉符合条件的东西更难。像上面那样对大脑对象进行测试是从结果集中删除一小部分子集的完美方法。

如果您需要处理更大比例的“异常”,您可能需要重新考虑您的架构。

【讨论】:

    【解决方案2】:

    使用Products.AdvancedQuery,您可以创建高级查询并对目录结果进行过滤。另请参阅how to

    【讨论】:

    • 我不知道这个产品。看起来不错,但在这种情况下,我认为没有必要。无论如何,感谢您的帮助。
    【解决方案3】:

    在一般情况下,将内容项的到期日期设置为某个过去的日期会将其从搜索结果中隐藏(只要用户没有访问非活动门户内容权限)。

    这是一种隐藏应该对所有人可见的内容片段的简单方法,但您不想弄乱搜索结果,例如用作主页的文档。

    我总是使用 2001 年 1 月 1 日 作为日期,这样我就可以很容易地识别出我何时使用了这个小“黑客”。

    【讨论】:

      猜你喜欢
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多