Piszę niestandardowy moduł, co zrobiłem wcześniej, ale po raz pierwszy próbowałem utworzyć typ zawartości z polami. Zaimplementowałem hook_node_info, a typ zawartości pojawia się na liście typów zawartości w menu rozwijanym z menu admin_menu, jednak gdy przeglądam, admin/structure/types
nie ma go na liście.
Zaimplementowałem hook_install i wziąłem kod, który znalazłem w innym pytaniu SO. Mam kod, który wypisał niektóre informacje debugowania do mojego dziennika błędów i wygląda na to, że wszystko działa, ale kiedy przeglądam typ zawartości struktury, nie pokazuje dodanego pola.
Oto haki:
function mymod_node_info() {
return array(
'mymod_content' => array(
'name' => t('My Mod'),
'base' => 'mymod_content',
'description' => t('A Description'),
)
);
}
function mymod_install() {
error_log('mymod_install');
$types = node_type_get_types();
if ( ! field_info_field('field_mymod_myfile') ) {
$field = array(
'field_name' => 'field_mymod_myfile',
'type' => 'file',
);
$created_field = field_create_field($field);
error_log('---- field_create_field -----');
error_log(var_export($created_field, true));
}
$instance = array(
'field_name' => 'field_mymod_myfile',
'entity_type' => 'mymod_content',
'bundle' => 'mymod_content',
'required' => TRUE,
);
$created_instance = field_create_instance($instance);
error_log('---- field_create_instance -----');
error_log(var_export($created_instance, true));
}
Widzę tabelę wywoływaną field_data_field_mymod_myfile
w bazie danych, więc wiem, że pierwsza część zadziałała. Tabela jest jednak pusta.
Dziennik błędów pokazuje, że field_create_instance()
metoda zwróciła to:
array (
'field_name' => 'field_mymod_myfile',
'entity_type' => 'mymod_content',
'bundle' => 'mymod_content',
'required' => true,
'field_id' => '5',
)
Dlaczego moje pole nie wyświetla się w przypadku tego typu treści?
źródło
Odpowiedzi:
To nie tyle odpowiedź, co rozwinięcie poprzedniej odpowiedzi.
Te dwa łącza okazały się bardzo pomocne w ustaleniu, czego potrzebuje system, aby pola niestandardowe zostały dodane do niestandardowego typu węzła modułu.
Najlepsze: http://www.sitepoint.com/creating-a-new-drupal-node-type/
Dobre dodatkowe informacje: http://public-action.org/content/drupal-7-field-api-drupal-7-adding-custom-content-type-custom-fields-field-api
Problem, który miałem, polegał na tym, że te (i każdy inny przykład, który mogę znaleźć w Internecie) są bardzo konkretnymi przykładami bez wystarczającej dokumentacji, która pomogłaby mi znaleźć rozwiązanie mojego własnego przypadku użycia.
Pomógł w tym komentarz Tenkena do OP dotyczący używania modułu Funkcje do uzyskiwania tablic dla pól niestandardowych.
Pobrałem więc moduł Funkcje i włączyłem go: https://drupal.org/project/features
Następnie utworzyłem pola na moim typie zawartości, używając interfejsu administratora w Drupal, tak jak normalnie, że chcę, aby moduł został utworzony. Następnie przejrzałem do Struktura> Funkcje> Utwórz element i wprowadziłem fałszywą nazwę (użyłem „testu”) dla tej funkcji, a następnie w obszarze komponentów kliknij „Instancje pola” i zaznacz pola pól niestandardowych. Wszystkie pola są nazywane czymś w rodzaju węzła- [nazwa komputera typu węzła] - [nazwa pola], więc w moim przypadku, ponieważ chciałem, aby pole obrazu było węzłem-nazwa_sekcji-pole_obraz.
Po wybraniu niestandardowych pól dla mojego typu węzła kliknąłem „Funkcja pobierania” i zapisałem plik .tar na pulpicie, otworzyłem go, otworzyłem folder „test”, a następnie przejrzałem test.features.field_base.inc i przetestowałem. features.field_instance.inc, aby uzyskać tablice potrzebne do moich pól.
Potem użyłem struktury opisanej w pierwszym linku, który opublikowałem, a potem działała idealnie. Dla mnie.
Nie mogłem znaleźć żadnej dokumentacji dotyczącej struktur tablic potrzebnych do takich rzeczy, jak pola obrazu i pola odniesienia taksonomii, i wydawało się, że wszystkie inne samouczki i prośby o pomoc online skupiają się na konkretnych rzeczach, takich jak pola tekstowe.
Mam nadzieję, że każdy, kto miał ten sam problem, co ja, zobaczy to i będzie mógł sprawić, by ich konfiguracja działała na podstawie tych przykładów i modułu Funkcje, tak jak ja.
Dzięki tenken za wskazanie tej funkcji modułu Funkcje nigdy jej nie użyłem i nie wiedziałem, że to zrobi.
źródło
Ten kod, który zostanie utworzony nowy typ zawartości, który powinien zostać dodany do pliku .install.
Dodanie hook_install ():
Powinieneś wysłać komunikat drupal i zapisać to zdarzenie w dzienniku:
Podaj hook_uninstall (), aby usunąć typ zawartości :
źródło
admin/structure/types
Ten post jest nieco przestarzały, ale jeśli to pomaga, uważam, że ten artykuł jest bardzo jasny. Pokazuje krok po kroku sposób tworzenia nowego typu treści.
Link do samouczka
źródło