it-swarm-eu.dev

hromadné mazání komentářů

jak mohu smazat všechny komentáře najednou? Viděl jsem, jak to udělat s uzly a hromadným modulem, Jak odstranit všechny uzly daného typu obsahu? , ale dívám se na podobné řešení pro komentáře.

Hledám řešení, které nezanechává žádné artefakty v databázi. Je Views Bulk Operations nejlepším řešením?

11
brian_d

AFAIK, VBO by měl být schopen tuto práci vykonat, ale sám jsem se nepokusil odstranit komentáře.

Dalším způsobem je spustit nějaký kód (v modulu nebo v bloku „Provést php“ modulu Devel), který získá seznam všech dotazů z db, vytvoří pole ID komentářů a předá toto pole comment_delete_multiple) funkce. Dokončení této operace může chvíli trvat (v závislosti na výkonu serveru a počtu komentářů), takže se můžete obejít, například pomocí set_time_limit (http://php.net/manual/en/function .set-time-limit.php) nebo Drupal's batch API.

[aktualizace: viz odpověď Chrisa Cohena, například kód založený na tomto přístupu.]

7
marcvangend

Nejedná se o alternativní odpověď, spíš o marcvangendovu, ale nemohl jsem se k jeho odpovědi vyjádřit a nechat příklad kódu. Manuální přístup, využívající develův vykonávací blok kódu, by tedy vypadal trochu takto:


$cids = db_select('comment', 'c')
  ->fields('c', array('cid'))
  ->execute()
  ->fetchCol();

comment_delete_multiple($cids);

Jak marcvangend zdůrazňuje, bude to omezeno na dobu provádění na vašem serveru, takže pokud budete mít mnoho komentářů, budete jej muset dočasně zvýšit. Díky manarth a instanceofjamie za pomoc dbtng.

7
Chris Cohen

Osobně bych šel do modulu Zobrazení Hromadné operace .

Tento modul rozšiřuje pohledy tím, že umožňuje provádět hromadné operace na zobrazených řádcích. Učiní to tak, že před každým uzlem zaškrtne políčko a přidá zaškrtávací políčko obsahující operace, které lze použít. Drupal Akce Core nebo Rule.

2
Karl Jóhann

Tato odpověď je podobná již uvedené odpovědi, ale upravil jsem ji tak, aby nedocházelo k „chybě paměti“ pro asi 27 000 komentářů. Spuštění bude nějakou dobu trvat v závislosti na počtu komentářů. Pouhé zkrácení tabulky komentářů nemusí být dobrý nápad; nejlepší je nechat Drupal) zpracovat mazání obsahu.

Vytvořil jsem skript PHP skript:

$cids = db_select('comment', 'c')
  ->fields('c', array('cid'))
  ->execute()
  ->fetchCol();

foreach($cids as $cid)
{
  comment_delete($cid);
}

... pak spustil skript s Drushem

drush @my_alias php-script my_script.php
0
Parag

Upřímně, když jsem to musel udělat, udělal jsem to jen v databázi. Odstraníte komentáře, opravíte statistiku komentářů a poof, všechny komentáře jsou pryč. Vyhnul bych se tomu, kdybyste moduly reagovaly na komentáře nějakým zvláštním způsobem, jinak by to bylo to, co bych navrhl.

TRUNCATE TABLE comments

UPDATE node_comment_statistics SET comment_count = 0

0
G.Martin

Pomocí modulu Zálohování a migrace bylo odstraněno přibližně 45 000 komentářů. V pokročilém nastavení v části „Vyloučit data z následujících tabulek“ - nejprve stiskněte klávesu Ctrl a poté vyberte komentář v seznamu - (buďte opatrní, protože zde jsou již vybrány zbytečné tabulky mezipaměti) - záloha - obnovení z tohoto zálohovaného souboru. Hurá!

0
VivMajor

Některé nástroje uživatelského rozhraní Můžete nainstalovat níže uvedené moduly

Zobrazení - drupal.org/project/views

Věřím, že každý Drupal web potřebuje ... Vytváří SQL na pozadí a zobrazuje výsledky s konfigurovatelným nastavením, filtry, třídění, stránkování ... atd.

VBO - http://drupal.org/project/views_bulk_operations Povolit hromadné operace (tj. Odstranit komentáře pro toto vlákno)

Pohledy na správu - http://drupal.org/project/admin_views Využijte výhod pohledů a VBO, nahraďte původní contnet, komentář, stránky administrátora menu_alter ...

  1. Po povolení výše uvedených modulů se vraťte zpět na stránku pro správu komentářů
  2. Zaškrtněte výběr všech ( buďte opatrní , ujistěte se, že chcete smazat všechny komentáře ...)
  3. Vyberte "Smazat" a "Odeslat" ( buďte opatrní , už žádné potvrzení později ...)
0
Ck Poon

Obvykle doporučuji používat VBO k hromadnému mazání komentářů nebo uzlů, ale pokud jste v situaci, kdy máte stovky tisíc komentářů a nemáte příliš mnoho času, zde je dotaz sql, který odstraní všechny neschválené komentáře spolu se všemi revizemi a údaji týkajícími se těch komentářů, které v mém případě zabíraly v DB 1,2 Gb prostoru

DELETE c, rcb, dcb
FROM
    comment AS c
JOIN field_revision_comment_body AS rcb ON (c.cid = rcb.entity_id)
JOIN field_data_comment_body AS dcb ON (rcb.entity_id = dcb.entity_id)
WHERE
    c. STATUS = 0
0
Octan