【问题标题】:Drupal - Hide a single page from search indexDrupal - 从搜索索引中隐藏单个页面
【发布时间】:2011-02-26 19:31:03
【问题描述】:

我已经接管了现有的 Drupal 安装,并被要求从站点搜索结果中删除一个页面。我通过这个问题了解了 lullabot 教程:Hide Drupal nodes from search,但是当我真的只想排除单个页面时,它谈到了排除一类内容。

我已尝试从 search_index 表中手动删除该节点,但这似乎也不起作用。

对于从搜索索引中排除单个常规内容页面有何建议?

【问题讨论】:

    标签: search drupal indexing


    【解决方案1】:

    问题是搜索索引遵循1)访问权限。为用户隐藏单个页面的模块是私有模块。允许每个节点访问设置的模块。然后搜索将遵循访问设置,并将隐藏页面从搜索结果中隐藏。

    1) 技术上并不完全正确

    【讨论】:

    • 该页面本身需要可供未经身份验证的用户访问(这是一种合规性所需的表单),但我们只希望那些直接受邀使用它的用户。因此,它不在我们的菜单中或链接到任何地方,而只是作为电子邮件中的直接链接提供。我不能手动从索引中删除它吗?
    • 两件事:1.你这样做是错误的。如果你想要这样的仅限邀请的东西,你真的需要一个 orivacy 系统。私有模块是该解决方案的一部分,但您需要某种一次性的 url 系统。否则,它是默默无闻的安全性,根本就没有安全性。 Drupal 不会帮助你。 2. 因为 1. Drupal 帮不了你。仅仅从搜索中删除它是不可能的,因为 Drupals 索引遵循访问系统。如果您选择“正确”的系统,该页面将不会显示在索引中(对于无法访问该页面的人)。您“免费”获得它
    • 感谢您的帮助,伯克斯。该网站目前仅处于维护阶段,将在未来几个月内重新开发,因此我们不会为其实施隐私模块。
    【解决方案2】:

    我只需要解决一些类似的问题(逐个节点从搜索索引中隐藏特定的 cck 字段) - 进行了一些跟踪,但结果证明这是答案:

    <?php
    function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
      switch ($op) {
        case 'view':
          $nid = ---insert your node id here---;
          if ($node->build_mode == NODE_BUILD_SEARCH_INDEX && $node->nid == $nid) {
            unset($node);
          }      
        break;
      }
    }
    ?> 
    

    【讨论】:

    • 这可能有效,但在某些情况下不会。问题是 nodeapi 只是索引期间调用的钩子之一。一些领域,例如自己向搜索索引提供信息,导致节点再次出现在索引中:)。此外,节点本身,尽管 emty 仍然位于索引中。一个丑陋的解决方案,可能有效:)
    • 我想知道这里涉及的其他钩子。
    • ...以及为什么你认为它很丑。
    【解决方案3】:

    Module restrict_content 是您所需的完美工具

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-23
      • 1970-01-01
      • 2012-09-08
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 2018-12-03
      相关资源
      最近更新 更多