Jak w końcu wyłączyć komentarze na temat typu zawartości?

12

Próbuję wyłączyć komentarze w formularzu internetowym. Próbowałem wszystkich ustawień, które mogłem znaleźć, ale:

  • Link do formularza komentarza nadal się pojawia
  • W polu komentarza nadal pojawia się pole nazwy i przycisk Prześlij

Czy ktoś mógłby mi dać jakąś radę?

Codium
źródło

Odpowiedzi:

11

Jak juampy napisał node_revision powinien być aktualizowany w miarę dobrze. Musisz wykonać 2 zapytania:

Krok 1:

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

Krok 2:

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

Krok 3: Wyczyść pamięć podręczną

Dawid Tomaszewski
źródło
1
A jeśli właśnie zainstalowałeś coś takiego jak Disqus, możesz po prostu uruchomić UPDATE node SET comment = 0; UPDATE node_revision SET comment = 0. Pracował dla mnie :-).
Nux,
Jeśli chcesz usunąć komentarze ze wszystkich typów węzłów, skorzystaj z zapytań @Nux.
albertski
7

Czasami najłatwiej jest po prostu użyć SQL. Myślę, że to jeden z tych przypadków.

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

0 = wyłączone

1 = tylko do odczytu

2 = odczyt / zapis.

skomorokh
źródło
2
0 = wyłączone, 1 = tylko do odczytu, 2 = odczyt / zapis. Myślę, że to najlepsza odpowiedź :)
AyeshK,
@AyeshK, miło, zredagowałem odpowiedź.
niksmac
z jednej strony, jeśli wiesz, jak napisać / wykonać takie zapytanie, prawdopodobnie nie masz trudności z ustaleniem, jak wyłączyć komentarze, z drugiej strony, jeśli chodzi o czystą szybkość / wydajność, rozwiązanie oparte na zapytaniu db jest WOLNIE lepiej niż moje :)
David Meister
7

Zmiana domyślnych ustawień komentarzy dla typu zawartości, zgodnie z sugestią uwe999, zmienia tylko domyślne ustawienia typu zawartości. Oznacza to, że nie zmieni z mocą wsteczną ustawień istniejących treści (ponieważ mogłoby to usunąć istniejące komentarze).

Będziesz musiał odwiedzić widok edycji węzła dla każdego istniejącego węzła, dla którego próbujesz wyłączyć komentarze i zaktualizować tam ustawienia. Jeśli zainstalowałeś moduł, taki jak moduł kolumny formularza Węzeł , który ukrywa / usuwa elementy ze stron dodawania / edycji węzła, będziesz musiał zaktualizować jego konfigurację, pojawi się okno ustawień komentarzy dla węzłów.

David Meister
źródło
3

Żadne z powyższych rozwiązań nie działało dla mnie. Formularz komentarza jest nadal wyświetlany w istniejących węzłach, chyba że zaktualizujesz również wersję node_revision.

Oto implementacja hook_update_N (), która działała dla mnie:

/**
 * 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();
}
Juampy NR
źródło
2

wyłączasz komentarze w „ustawieniach struktury / typów treści / [nazwa typu] / edycji / komentarzy. Ustaw„ Domyślne ustawienie komentarza dla nowych treści ”na ukryte.

Jeśli masz już komentarze, możesz je usunąć w „treści / komentarzach” lub po prostu cofnąć ich publikację.

uwe
źródło
Zrobiłem to, ale link do formularza jest nadal, prawdopodobnie jedyną opcją jest zmiana szablonu lub po prostu css diplay: brak, dziwne
Codium 21.09.11
jakiego szablonu używasz?
uwe
1

Nie jestem pewien co do twojego problemu, ale jedną z brudnych sztuczek może być stworzenie specjalnego szablonu dla twojego typu zawartości i usunięcie części komentarza.

tostinni
źródło
1

Najpierw wyłącz komentarze tutaj:

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

Aby zaktualizować węzły, niestety musisz ponownie zapisać każdy węzeł. Użyj hook_update poniżej:

/**
 * 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'];
  }
}

Nie zapomnij zastąpić „node_type” typem swojego węzła.

mrded
źródło
1

Najprostszym sposobem na wyłączenie komentarzy w formularzu internetowym jest przejście do formularza internetowego EDYCJA, a na dole opcji EDYCJA znajduje się opcja Ustawienia komentarzy .

Przez domyślnie jej zawsze OPEN więc uczynić go zamknął i sekcja komentarz z formularza internetowego będą znikać ...

Nitesh Sethia
źródło
1

Możesz użyć CSS, aby ukryć sekcję komentarzy, aby komentarze retrospektywne się nie wyświetlały.

Dodaj kod CSS do karty Administrator> Wygląd> Zaawansowane> Niestandardowa karta CSS. Będziesz musiał spojrzeć na nazwy klas div dla poszczególnych typów stron witryny. Oto przykład z mojej witryny testowej, która używa typu strony z wiadomościami (nazwa maszyny „artykuł”):

.node-article .comment-wrapper{
 visibility: hidden;
 display: none;
 }
Emma
źródło
0

Użyj widoków Operacje zbiorcze, z domyślną operacją: „Modyfikuj / Zmień wartości encji”. Tutaj możesz ustawić komentowanie jako zamknięte dla istniejących węzłów.

giorgio79
źródło
0

To całkiem proste, wykonaj następujące kroki:

  1. Przejdź do Struktura> Typy treści> Formularz internetowy
  2. Następnie edytuj formularz internetowy i kliknij Ustawienia komentarzy w ustawieniach po lewej stronie.
  3. Zmień wartość „Domyślne ustawienie komentarza do nowej treści” na „Zamknij” i zapisz ustawienie.

Dzięki

Sandesh Manghale
źródło
0

Zdarzyło mi się to z około 50 000 rekordów zaimportowanych do 4 różnych typów treści. Nie chciałem wymazywać, ponownie importować ani mieszać się z zapytaniami SQL w bazie danych. Jeśli chcesz usunąć funkcję komentowania ze wszystkich węzłów, po prostu wyłącz moduł komentarzy.

MascotDB
źródło