Ich habe einen Wortschatz mit vielen Begriffen, die Duplikate sind. Wie kann ich diese Begriffe entfernen?
Ich habe viele Duplikate; Ich brauche eine Möglichkeit, sie zu löschen, die sie nicht einzeln löscht.
Ich habe einen Wortschatz mit vielen Begriffen, die Duplikate sind. Wie kann ich diese Begriffe entfernen?
Ich habe viele Duplikate; Ich brauche eine Möglichkeit, sie zu löschen, die sie nicht einzeln löscht.
Antworten:
Führen Sie diesen Code einmal in hook_init oder einem benutzerdefinierten PHP-Block oder mit Drush aus
<?php
$vid = 1; // Replace 1 by vocabulary id for which you want to remove duplicates.
$terms = taxonomy_get_tree($vid, $parent = 0, $max_depth = NULL, $load_entities = FALSE);
// Loop through all terms in vocabulary
foreach ($terms as $term) {
// Get all matching terms by term name
$matching_terms = taxonomy_get_term_by_name($term->name);
foreach ($matching_terms as $matching_term) {
/* Check matching term belongs to vocabulary we are searching and matching term should not be exact term that first found so that duplicate can be removed */
if ($matching_term->vid == $vid && $matching_term->tid != $term->tid) {
// Do Term Delete
taxonomy_term_delete($matching_term->tid);
}
}
}
?>
Wichtiger Hinweis: Erstellen Sie eine Datenbanksicherung, bevor Sie den obigen Code ausführen, damit Sie ihn wiederherstellen können, wenn etwas schief geht!
Das Term Merge- Modul könnte Ihnen helfen.
Wenn Sie die Taxonomie für kostenlose Tagging-Zwecke verwenden, können leicht mehrere Begriffe mit derselben Bedeutung verwendet werden. Dies kann an Rechtschreibfehlern liegen oder daran, dass verschiedene Benutzer unterwegs einfach auch Begriffe erfinden.
Als Administrator möchten Sie dann möglicherweise solche Fehler korrigieren oder auch Begriffe vereinheitlichen, um die Taxonomie auf einen überschaubareren Satz zu reduzieren. Mit diesem Modul können Sie mehrere Begriffe zu einem zusammenführen und gleichzeitig alle Felder aktualisieren, die auf diese Begriffe verweisen, um stattdessen auf den Ersatzbegriff zu verweisen.
Sie können dies mit den Regeln tun, um dies zu tun:
**Event**
After updating existing content
Ich habe nach dem Aktualisieren eines Inhalts ausgewählt, dass Sie alle Knoten auswählen und Aktualisieren auswählen können, das nicht veröffentlicht / veröffentlicht werden kann - URL-Alias aktualisieren, jeder funktioniert.
**Conditions**
Content is of type
und geben Sie Ihren Inhaltstyp ein
**Actions**
Add loop
Stellen Sie sicher, dass die Schleife Ihre Tags durchläuft. Mein Maschinenname lautet "field-basic-tags", sodass Sie in der Schleifen-Datenauswahl so etwas wie "node: field-basic-tags" auswählen.
dann würden Sie dieser Schleife eine Aktion hinzufügen,
Add an item to a list
Wählen Sie "Listenelement: Eltern" aus der Datenauswahl
Aktivieren Sie das Kontrollkästchen Eindeutigkeit erzwingen, und fügen Sie möglicherweise auch Folgendes hinzu:
Show a message on the site
um sicherzustellen, dass Ihr Code funktioniert.
Hier ist ein Export der Regel.
{ "rules_enforce_uniqness_tag" : {
"LABEL" : "Enforce Uniqness Tag",
"PLUGIN" : "reaction rule",
"REQUIRES" : [ "rules" ],
"ON" : [ "node_update" ],
"IF" : [
{ "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "page" : "page" } } } }
],
"DO" : [
{ "LOOP" : {
"USING" : { "list" : [ "node:field-basic-tags" ] },
"ITEM" : { "list_item" : "Current list item" },
"DO" : [
{ "list_add" : {
"list" : [ "list-item:parent" ],
"item" : [ "list-item" ],
"unique" : 1
}
}
]
}
},
{ "drupal_message" : { "message" : "Done" } }
]
}
}