Dodałem nowe pole (tekstowe) do typu zawartości Drupal 7, który ma już wiele węzłów.
Jak mogę wypełnić pole wartością domyślną dla wszystkich tych węzłów?
Możesz użyć, EntityFieldQuery
aby pobrać listę węzłów, a następnie zaktualizować pola węzła za pomocą node_save()
:
$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type
$query = new EntityFieldQuery;
$result = $query
->entityCondition('entity_type', 'node')
->propertyCondition('type', $node_type)
->execute();
if (!empty($result['node'])) {
$nodes = entity_load('node', array_keys($result['node']));
foreach($nodes as $node) {
// Replace field_foo with the machine name of the field to update.
// - 0 refers to specific value within the field array, for when the field contains
// multiple values. If the field only has one value, it should be 0.
$node->field_foo[$lang][0]['value'] = 'New Value';
node_save($node);
}
}
Jeśli jest to jednorazowa operacja, możesz użyć funkcji Wykonaj PHP modułu Devel , aby uruchomić powyższe: w przeciwnym razie możesz utworzyć prosty niestandardowy moduł.
Użyłbym Odwiedzin zbiorczego Operacje i korzystać z „wykonać dowolny skrypt PHP” zrobić zasadniczo pozycje wyżej, ale nie trzeba robić wszystko dodatkowy kod, tylko mały fragment, który robi to, co chcesz (jak
$object->field_foo['und'][0]['value'] = 'some_value'
)źródło
Jeśli chcesz tylko zaktualizować pole o pewną wartość, bardziej wydajną alternatywą dla zaakceptowanej odpowiedzi jest:
Różnica polega na bezpośrednim korzystaniu z funkcji
field_attach_presave
ifield_attach_update
funkcji, które poprawnie aktualizują tylko pole węzła i pomijają resztę procesu zapisywania węzła. Ma to wpływ na to, że nie zostaną wywołane żadne przechwytywania / zapisywania węzłów, data „zmieniona” nie zostanie zaktualizowana do bieżącej daty itp. W zależności od przypadku użycia może być lepszy niż cały proces node_save ().źródło
Rzeczywiście VBO (Views Bulk Operations) to dobre rozwiązanie. Ponadto w najnowszych wersjach znajdziesz opcję „Modyfikuj wartości encji”, która zapewnia bardzo łatwy sposób aktualizacji języka węzłów w ramach jednej operacji.
źródło
Zainstaluj i włącz moduł Views Bulk Operations i utwórz widok z wyświetlaniem strony.
Dodaj => Operacje zbiorcze: pole Treść (treść) w widoku.
Odnosić się
Wybierz pola, które chcesz ustawić wartość domyślną.
W twoim przypadku jego tytuł. Na obrazie są to tagi.
Zapisz widok i przejdź do utworzonej strony. Jeśli masz więcej niż jedną stronę wyników, możesz wybrać, aby wybrać wszystkie elementy na bieżącej stronie, wszystkie elementy na wszystkich stronach lub możesz ręcznie zaznaczyć pola odpowiadające poszczególnym węzłom. Aby kontynuować, należy zaznaczyć przynajmniej jedno pole wyboru.
Teraz ustaw wartość domyślną i zapisz ją.
źródło