Mam istniejący typ zawartości z wieloma węzłami. Właśnie dodałem nowe pole boolowskie z domyślną wartością „off”.
Jednak do momentu ponownego zapisania każdego węzła wartość domyślna nie jest ustawiona, więc widok, który powinien pokazywać tylko te węzły, w których nowe pole używa wartości domyślnej, jest obecnie pusty.
Jak mogę zaktualizować istniejące węzły utworzone przed dodaniem pola, aby ustawić jego wartość domyślną?
Odpowiedzi:
Niestety, nie ma bardzo prostego sposobu na zrobienie tego (oprócz VBO / reguł), ale oto kod, którego używam w funkcjach aktualizacji w moich plikach instalacyjnych modułu niestandardowego, gdy muszę dodać wartości pól dla określonego typu węzła po dodaniu nowego pola ( w tym przypadku węzły „page”):
Inna metoda ręczna wymieniona w tej odpowiedzi używa EntityFieldQuery i ładuje / zapisuje każdy węzeł. Więcej Drupal-y, ale znacznie mniej wydajne ... (wymaga pełnego załadowania węzła i zapisania operacji dla każdego węzła!).
źródło
entity_get_controller('node')->resetCache($nids);
- w przeciwnym razie kolejnanode_load()
może załadować nieaktualne dane z pamięci podręcznej, a wszelkienode_save()
tego obiektu byłoby napisać , że dane nieświeży powrotem do bazy danych.Najlepszy zakład znajduje się bezpośrednio w MySQl. Tabele wyglądałyby następująco:
Jeśli spojrzysz na nie, jest to całkiem proste - czy potrzebujesz mnie, aby zacząć od tego, jak będzie wyglądać zapytanie, czy wszystko w porządku?
źródło
Po prostu wypróbuj poniższą logikę. jest znacznie szybszy i omija wszystkie implementacje haczykowe. więcej szczegółów . możesz napisać proste bezpośrednie zapytanie db_select, aby uzyskać wszystkie identyfikatory NID i zapętlić je za pomocą tego przykładowego kodu.
źródło
używając sql, biorąc pod uwagę, że węzły z wartością pola nie są ustawione
field_data_field_pr_choix_du_document będący tabelą odpowiadającą mojemu polu i zawierającą jeden zestaw wartości pozycji par z identyfikatorem bytu odnoszącym się do węzła
zrobiłem przy użyciu wstawiania SQL ... wybierz składnię
https://dev.mysql.com/doc/refman/5.5/en/insert-select.html
ź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ą.
Zapisz widok i przejdź do utworzonej strony. Jeśli masz więcej niż jedną stronę wyników, możesz 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 ustawiasz wartość domyślną i zapisujesz ją.
źródło
Znalazłem prosty sposób na aktualizację pól w typie zawartości za pomocą tego modułu: Domyślne pola
Zobacz zrzut ekranu. Możesz zaktualizować istniejącą zawartość o wartości domyślne lub zachować istniejące wartości.
Przetestowałem to na D7 i działa.
źródło