Jak podejść do implementacji następujących elementów w Drupal 7?
To, co muszę zrobić, to utworzyć moduł, który definiuje nowy obiekt z możliwością zmiany nazwy, zwany „Firmą”. Mam listę, powiedzmy, 20 pól, które należy wypełnić w każdej instancji firmy. Te pytania są predefiniowane, a niektóre mogą zawierać niestandardowe sprawdzanie poprawności.
W tej chwili jestem w momencie, gdy mogę dodać nowe pola do podmiotu Spółki. W tej chwili to działa dobrze. Mój problem polega na tym, że potrzebuję wszystkich tych pól, gdy tylko moduł zostanie zainstalowany, więc dodanie ich przez interfejs nie jest opcją.
Zastanawiałem się, jak mogę do tego podejść? Zakładam, że sprowadza się to do możliwości robienia tego, co można zrobić za pomocą interfejsu użytkownika „Zarządzaj polami” programowo.
node_type_set_defaults()
inode_type_save()
, jak również, oczywiściehook_install()
.Odpowiedzi:
Użyj field_create_field (), aby utworzyć samo pole, i field_create_instance (), aby mieć instancję dla danego pakietu encji.
Podczas tworzenia pól w ramach modułu niestandardowego możesz chcieć usunąć pole po odinstalowaniu modułu. Aby to zrobić, możesz użyć field_delete_field (), jeśli chcesz usunąć pole i całą instancję pola, lub jeśli chcesz usunąć określone instancje, możesz użyć field_delete_instance () .
źródło
Przykład, jak programowo dodawać pola do profilu użytkownika i jak je wykorzystać, czy nie, w formularzu rejestracji użytkownika.
źródło
Jeśli chcesz szybko utworzyć / usunąć pola z istniejącego typu treści lub encji, bez użycia interfejsu użytkownika ani programowania, możesz użyć tych mało znanych poleceń Drush:
Np .: Utwórz dwa nowe pola dla artykułu:
Inne polecenia:
źródło
Jak wskazują inni, możesz użyć funkcji API Field z implementacji hook_install () modułu, aby utworzyć pola i ich instancje dla swojego typu zawartości. Zobacz node_example_install () na przykład użycie funkcji.
Innym rozwiązaniem jest użycie modułu Funkcje . Funkcje mogą eksportować różne składniki witryny do kodu w module. Typy treści i pola można eksportować. Możesz albo wygenerować moduł Funkcje i zastąpić istniejący kod, wówczas Funkcje dołożą wszelkich starań, aby uniknąć złamania kodu. Lub możesz wygenerować fikcyjny moduł i skopiować / wkleić kod związany z polami do swojego modułu. Wymaga to podstawowej wiedzy na temat działania Funkcji.
źródło
W pliku instalacyjnym musisz zdefiniować zarówno „hook_install”, jak i „hook_uninstall”. Przykład zawarty, ale przeczytaj wszystko o dodatkowych kluczach w odwołaniach API (kod jest testowany, więc mogą tam być literówki).
W polu
hook_install
możesz dodać pola za pomocą:field_create_field , Ta funkcja buduje szablon dla pola.
field_create_instance Można użyć po utworzeniu pola w celu dodania go do typów_treści (znanych również jako pakiety).
UWAGA Nazwy różnych typów pól można znaleźć w modułach, które je generują (jest to klucz elementu tablicy w ich informacji o polu_pola). Wszystkie podstawowe moduły implementujące pola można znaleźć w folderze modułów / pól / modułów.
Ustawienia można również wyprowadzić z modułów polowych. Ustawienia, które określisz,
field_create_field
dotyczą wszystkich witryn. Te, które ustawisz,field_instance_create
są specyficzne dla typu węzław
hook_uninstall
field_delete_instance i field_delete_field mogą być użyte do ich ponownego usunięcia,
field_delete_field
jest wywoływany automatycznie, jeśli usuniesz ostatnią instancję (normalnie).źródło
Ostatnio miałem podobną potrzebę projektu, oto jak do niego podszedłem, mam nadzieję, że komuś to pomoże.
Zasadniczo utworzysz potrzebne pola za pomocą interfejsu użytkownika pól, wyeksportujesz je do kodu, a następnie umieścisz w niestandardowym module. Musisz włączyć moduł Devel.
Stworzyłem także Gist z tymi informacjami.
No to ruszamy....
Ustaw pierwsze 3 zmienne, a następnie kliknij przycisk Wykonaj
Otrzymasz 2 tablice, coś w tym stylu, miejmy nadzieję, że wszystkie właściwości zostaną wypełnione.
Teraz dodaj następujący kod do pliku .install. Zamień wszystkie wystąpienia mymodułu na rzeczywistą nazwę modułu. Wklej kod z wyjścia devel do _mymodule_field_data i _mymodule_instance_data, jak zauważono w odpowiednich funkcjach poniżej. Możesz to zrobić dla dowolnej liczby pól, po prostu umieść wszystkie tablice $ fields w funkcji _mymodule_field_data i wszystkie instancje $ w funkcji _mymodule_instance_data.
źródło
Możesz również rozważyć użycie modułu Funkcje do utworzenia pól w czasie instalacji.
Ponieważ Funkcje generują kod dla pól, opcją jest po prostu użycie modułu Funkcji do wygenerowania kodu do modułu zastępczego, a następnie skopiowanie i wklejenie do pliku .install modułu.
Korzyścią jest to, że moduł nie zależy od modułu Funkcje w środowisku docelowym.
źródło
Możesz użyć kodu customcompanymodule podanego poniżej, aby programowo utworzyć typ zawartości z różnymi polami.
Możesz dodać ten kod do pliku .install modułu niestandardowego. Programowo doda typ zawartości o nazwie „firma” i jego różne typy pól (tekstowy, numeryczny, data (uwaga: musisz zainstalować moduł Data, ponieważ pole Data nie jest domyślnie dostarczane), obraz, lista).
Dodałem również kod odinstalowujący, który usunie typ zawartości „firma” wraz ze wszystkimi jego polami i danymi, kiedy odinstalujesz moduł „customcompanymodule”.
Możesz zmodyfikować / usunąć te pola zgodnie ze swoimi potrzebami:
źródło