【问题标题】:Drupal is allowing viewing of unpublished contentDrupal 允许查看未发布的内容
【发布时间】:2009-10-23 19:19:40
【问题描述】:

我继承了一个 Druapl5 站点,并且在“编辑内容表单”的“发布选项”部分中未选中它在发布时显示内容。

我确认该节点的数据库中的状态为 0。所以它应该是不可见的。

我的第一个猜测是我已登录,这就是为什么我可以看到它,但我退出了,我仍然可以看到它。我尝试了不同的浏览器和相同的东西,所以不是那样。

此外,未发布的节点出现在搜索结果中,我最初认为这是一个过时的搜索缓存,但可能有所不同。

见过这样的事情吗?有什么想法吗?

【问题讨论】:

  • 您是直接查看节点还是如何查看节点?

标签: drupal publish drupal-5


【解决方案1】:

您在评论中提到网站上安装了Content Access。这个模块(以及其他几个,例如ACL)覆盖了默认的 Drupal 节点访问机制,以提供更多/更细粒度的权限设置。

所以我的猜测是该模块中的权限配置对于您想要的结果配置错误。据我记得,它允许每个内容类型(为作者和角色定义)单独的权限集。您应该查看您的内容类型编辑/定义页面 - 该模块应该添加一个选项卡来配置权限。还要检查模块的 readme.txt,因为它可能会提供一些额外的提示。

如果这没有帮助,您应该检查是否还安装了其他节点访问模块。如前所述,它们有很多,而且它们的交互作用不容易确定(如果可能,应该只使用一个)。

【讨论】:

  • 只是为了记录......这也发生在我身上,最终是因为我有 2 个控制发布状态的模块:Moder8LM Paypal。节点正在通过 Moder8 获得批准,因此已发布,但 LM Paypal 仍然说它们未发布,而实际上它们是未发布的,因此节点无需付费即可发布。
【解决方案2】:

您在使用视图吗?如果是这样,请确保您已将过滤器设置为仅显示已发布。

我遇到了与 cmets 类似的问题,这导致了一些极好的垃圾邮件机会,直到我发现它。

【讨论】:

  • 奇怪的是,我也可以转到未发布的实际页面。
  • 在我们的设置中有一个搜索视图,但没有可用的发布过滤器。
【解决方案3】:

相当奇怪。没有答案,只有猜测:

尝试访问 admin/content/node-settings 并点击重建权限。

也许清除缓存管理/设置/性能

【讨论】:

    【解决方案4】:

    检查您对匿名用户的权限。好像在某个地方他们有错误的权限。

    【讨论】:

    • 就权限而言,节点模块中唯一勾选的匿名用户就是访问内容。
    • 还有一个叫做Content Access的模块,但是它只提供访问,不提供编辑。还有其他想法吗?
    【解决方案5】:

    所有访问模块在使用 hook_node_access() 时会覆盖默认设置。很可能这是问题所在。所以你需要在内容访问部分调整这些设置。

    这不是最好的解决方案。但是,如果您在此期间需要一些东西,您可以随时将此代码放在 node.tpl.php 文件中:

    if(!$node->status && $user->uid != 1){
    

    添加代码:

    <div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?> clear-block">
    
    <?php print $picture ?>
    <?php
    
    if(!$node->status && $user->uid != 1){
    
    ?>
    <?php if ($page == 0): ?>
      <h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
    <?php endif; ?>
    
      <div class="meta">
      <?php if ($submitted): ?>
        <span class="submitted"><?php print $submitted ?></span>
      <?php endif; ?>
    
      <?php if ($terms): ?>
        <span class="terms"><?php print $terms ?></span>
      <?php endif;?>
      </div>
    
      <div class="content">
        <?php print $content ?>
      </div>
    
    <?php
      if ($links) {
        print $links;
      }
    }//if for published node
    ?>
    
    </div>
    

    【讨论】:

    • 只允许用户 1 是一个糟糕的 hack。
    • 这应该是一个临时解决方案。正如我的帖子中所说。如果您想将其变成一个可用的长期解决方案,您可以更改 && $user->uid ==1 以允许任何允许管理节点的用户。
    猜你喜欢
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 2017-03-21
    相关资源
    最近更新 更多