Как окончательно отключить комментарии к типу контента?


12

Я пытаюсь отключить комментарии к веб-форме. Я перепробовал все настройки, которые смог найти, но:

  • Ссылка на форму комментария все еще появляется
  • Имя поля и кнопка отправки все еще появляются в форме комментария

Может ли кто-нибудь дать мне какой-нибудь совет?

Ответы:


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.
Альбертски

7

Иногда проще всего использовать SQL. Это, я думаю, один из таких случаев.

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

0 = отключено

1 = только для чтения

2 = чтение / запись.


2
0 = отключено, 1 = только чтение, 2 = чтение / запись. Я думаю, что это лучший ответ :)
AyeshK

@AyeshK, хорошо, я отредактировал ответ.
niksmac

с одной стороны, если вы знаете, как написать / выполнить запрос, подобный этому, вы, вероятно, не пытаетесь понять, как отключить комментарии, с другой стороны, с точки зрения абсолютной скорости / эффективности решение, основанное на запросах БД, ПУТЬ лучше, чем у меня :)
Дэвид Майстер

7

Изменение параметров комментариев по умолчанию для типа содержимого, как предлагает uwe999, изменяет только параметры по умолчанию для типа содержимого. Это означает, что он не будет задним числом изменять настройки для существующего контента (так как это может удалить существующие комментарии).

Вам придется посетить представление редактирования узла для каждого существующего узла, для которого вы пытаетесь отключить комментарии, и обновить там настройки. Если вы установили модуль, такой как модуль столбцов формы Node , который скрывает / удаляет элементы со страниц добавления / редактирования узла, то вам придется обновить его конфигурацию, появится окно настроек комментария для узлов.


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

какой шаблон вы используете?
Уве

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 для типов страниц вашего конкретного сайта. Вот пример с моего тестового сайта, который использует тип страницы элемента новостей (имя машины «article»):

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

0

Используйте Views Bulk Operations с операцией по умолчанию: «Изменить / Изменить значения объекта». Здесь вы можете установить комментирование для закрытых существующих узлов.


0

Это довольно просто, выполните следующие шаги:

  1. Перейдите к Структуре> Типы содержимого> Веб-форма
  2. Затем отредактируйте веб-форму и нажмите Настройки комментария в настройках левой стороны.
  3. Измените значение параметра «Комментарий по умолчанию для нового содержимого» на «Закрыть» и сохраните параметр.

Благодарность


0

У меня было около 50 000 записей, которые я импортировал в 4 разных типа контента. Я не хотел стирать и повторно импортировать или возиться с запросами SQL в базе данных. Если вы хотите удалить функцию комментирования со всех узлов, просто отключите модуль комментариев.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.