2010-06-02 70 views
2

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

我已经试过手动删除从search_index表中的节点,但似乎没有任何工作。

从搜索索引中排除一个单一的常规内容页面的任何建议?

回答

0

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

1)技术上并不完全正确

+0

本身需要对未认证用户访问的网页什么的完美工具(它的需要的法规遵从一种形式),但我们只想要那些直接的人邀请使用它。所以,它不在我们的菜单或任何地方连接,但只作为电子邮件的直接链接。 我不能只是手动从索引中删除这个如何? – ilowe 2010-06-02 14:18:52

+0

有两件事: 1.你这样做是错误的。如果你想要这种只有邀请的东西,你真的需要一个有效的系统。私有模块是该解决方案的一部分,但是您需要某种一次性的网址系统。否则就是安全低谷,根本就没有安全保障。 Drupal不会帮助你。 2.因为1. Drupal不会帮助你。只是从搜索中删除它是不可能的,因为Drupals索引跟随访问系统。 如果您选择“正确”系统,该页面不会显示在索引中(对于无法访问该页面的用户)。你得到它“免费” – berkes 2010-06-02 16:12:52

+0

感谢您的帮助,berkes。该网站目前仅为维护服务,将在未来几个月内重新开发,因此我们不会为其实施隐私模块。 – ilowe 2010-06-02 18:19:36

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; 
    } 
} 
?> 
+0

这可能有效,但在某些情况下不会。问题是nodeapi只是索引期间调用的钩子之一。一些领域,例如向搜索索引自己提供信息,导致节点再次位于索引中:)。此外,节点本身,虽然emty仍然在索引中。 一个丑陋的解决方案,可能会工作:) – berkes 2010-06-03 09:13:51

+0

我想知道这里涉及的其他钩子。 – lazysoundsystem 2010-06-03 12:30:25

+0

...为什么你觉得它很丑。 – lazysoundsystem 2010-06-04 18:17:38