如何最终禁用对内容类型的评论?


12

我正在尝试禁用Webform上的评论。我尝试了所有可以找到的设置,但是:

  • 链接到评论表单仍然出现
  • 名称字段和提交按钮仍显示在评论表单上

有人可以给我提些建议吗?

Answers:


11

正如juampy所写,node_revision也应该被更新。您需要执行2个查询:

步骤1:

UPDATE node SET comment = 0 WHERE type = 'your_content_type'

第2步:

UPDATE node_revision nrev
INNER JOIN node nd ON nrev.nid = nd.nid AND nd.type = 'your_content_type'
SET nrev.comment = 0

步骤3:清除快取


1
如果您刚刚安装了类似Disqus的产品,则可以运行UPDATE node SET comment = 0; UPDATE node_revision SET comment = 0。为我工作:-)。
Nux

如果需要从所有节点类型中删除注释,只需使用@Nux查询。
albertski

7

有时,仅使用SQL最简单。我认为这就是其中一种情况。

UPDATE node SET comment = 0 WHERE type = 'nocommentsforthistype';

0 =禁用

1 =只读

2 =读/写。


2
0 =禁用,1 =只读,2 =读/写。我认为这是最好的答案:)
AyeshK

@AyeshK,很好,我已经编辑了答案。
niksmac

一方面,如果您知道如何编写/执行这样的查询,那么您可能就不会想办法关闭注释了;另一方面,从速度/效率的角度来看,基于db查询的解决方案是比我的要好:)
David Meister 2014年

7

根据uwe999的建议,更改内容类型的默认注释设置仅会更改内容类型的默认设置。这意味着它将不会追溯更改现有内容的设置(因为这可能会删除现有评论)。

您将必须访问您要为其禁用注释的每个现有节点的节点编辑视图,并在那里更新设置。如果安装了诸如“ 节点表单栏”模块之类的模块,该模块从节点“添加/编辑”页面中隐藏/删除元素,则必须更新其配置,节点的注释设置框会出现。


3

以上解决方案均不适用于我。除非您也更新node_revision,否则注释表单仍显示在现有节点中。

这是为我工作的hook_update_N()实现:

/**
 * Implements hook_update_N().
 *
 * Disables comments in existing event nodes.
 */
function hook_update_7000(&$sandbox) {
  $content_type = 'event';

  // Update node table.
  db_update('node')
    ->fields(array('comment' => 1))
    ->condition('type', $content_type)
   ->execute();

  // Update node_revision table.
  $nids = db_select('node', 'n')
    ->fields('n', array('nid'))
    ->condition('type', $content_type)
    ->execute()
    ->fetchCol();
  db_update('node_revision')
    ->fields(array('comment' => 1))
    ->condition('nid', $nids)
    ->execute();
}

2

您可以在“结构/内容类型/ [类型名称] /编辑/注释设置”中禁用注释。将“新内容的默认注释设置”设置为隐藏。

如果您有现有注释,则可以在“内容/注释”下将其删除,也可以仅取消发布它们。


我做到了,但仍然链接到表单,可能只有选项正在更改模板或仅是纯css diplay:无,奇怪
Codium

您正在使用什么模板?
uwe 2011年

1

我不确定您的问题,但一个肮脏的技巧可能是为您的内容类型创建一个特殊的模板并删除注释部分。


1

首先在此处禁用评论:

structure->content types->{node_type}->edit->comment settings

不幸的是,要更新节点,您必须重新保存每个节点。在下面使用hook_update:

/**
 * Disable comments on node_type
 */
function hook_update_N(&$sandbox) {
  $content_type = 'node_type';

  // Initialize batch.
  if (!isset($sandbox['total'])) {
    $query = db_select('node');
    $query->addExpression('COUNT(*)');
    $query->condition('type', $content_type);

    $sandbox['total'] = $query->execute()->fetchField();
    $sandbox['progress'] = 0;

    if (empty($sandbox['total'])) {
      $sandbox['#finished'] = 1;
      return t('No %type nodes exist in database.', array('%type' => $content_type));
    }
  }

  // Get and update nodes.
  $nids = db_select('node')
    ->fields('node', array('nid'))
    ->condition('type', $content_type)
    ->range(0, 10)
    ->execute()
    ->fetchCol();

  if (!empty($nids)) {
    $nodes = node_load_multiple($nids, NULL, TRUE);

    foreach ($nodes as $node) {
      $node->comment = 1; // I set comments as 1 where value of 2 enables the comments.
      node_save($node);   // Re-save the node.
    }
  }

  // Increment & check progress.
  $sandbox['progress'] += count($nids);
  if (empty($nids) || $sandbox['progress'] >= $sandbox['total']) {
    $sandbox['#finished'] = 1;
    return t('Updated @count nodes.', array('@count' => $sandbox['progress']));
  }
  else {
    $sandbox['#finished'] = $sandbox['progress'] / $sandbox['total'];
  }
}

不要忘记将“ node_type”替换为您的节点类型。


1

以最简单的方式禁用评论网络表单是简单地去编辑网页表单和编辑选项的底部,有一个选项,评论设置

通过默认情况下它总是打开,以便使其关闭注释部分从网页表单将消失 ...


1

您可以使用CSS隐藏注释部分,以便不显示追溯注释。

将CSS代码添加到管理>外观>高级>自定义CSS标签。您必须查看特定站点的页面类型的div的类名称。这是我的测试站点中的一个示例,该示例使用“新闻”项目页面类型(计算机名称为“文章”):

.node-article .comment-wrapper{
 visibility: hidden;
 display: none;
 }

0

使用“视图批量操作”,其默认操作为“修改/更改实体值”。在这里,您可以设置注释以关闭现有节点。


0

非常简单,请按照以下步骤操作:

  1. 导航到结构>内容类型> Webform
  2. 然后编辑网络表单,然后单击左侧设置中的评论设置。
  3. 将“新内容的默认评论设置”值更改为“关闭”,然后保存设置。

谢谢


0

我碰巧将大约50,000条记录导入了4种不同的内容类型中。我不想删除并重新导入数据库,也不想弄乱数据库中的SQL查询。如果要从所有节点删除注释功能,只需禁用注释模块。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.