Ich schreibe ein benutzerdefiniertes Modul, das ich zuvor erstellt habe, aber dies ist das erste Mal, dass ich versucht habe, einen Inhaltstyp mit Feldern zu erstellen. Ich habe hook_node_info implementiert und der Inhaltstyp wird in der Liste der Inhaltstypen in der Dropdown-Liste von admin_menu angezeigt. Wenn ich jedoch zu admin/structure/types
ihm navigiere, wird er nicht aufgelistet.
Ich habe hook_install implementiert und mir einen Code geholt, den ich auf einer anderen SO-Frage gefunden habe. Ich habe den Code einige Debug-Informationen in mein Fehlerprotokoll drucken lassen und es sieht so aus, als ob alles funktioniert, aber wenn ich zum Strukturinhaltstyp navigiere, wird das von mir hinzugefügte Feld nicht angezeigt.
Hier sind Haken:
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));
}
Ich kann eine Tabelle field_data_field_mymod_myfile
in der Datenbank sehen, daher weiß ich, dass der erste Teil funktioniert hat. Die Tabelle ist jedoch leer.
Das Fehlerprotokoll zeigt die zurückgegebene field_create_instance()
Methode:
array (
'field_name' => 'field_mymod_myfile',
'entity_type' => 'mymod_content',
'bundle' => 'mymod_content',
'required' => true,
'field_id' => '5',
)
Warum wird mein Feld bei diesem Inhaltstyp nicht angezeigt?
quelle
Antworten:
Dies ist weniger eine Antwort als vielmehr eine Erweiterung der vorherigen Antwort.
Ich fand diese beiden Links sehr hilfreich, um herauszufinden, was das System benötigt, damit benutzerdefinierte Felder zu Ihrem benutzerdefinierten Modulknotentyp hinzugefügt werden können.
Am besten: http://www.sitepoint.com/creating-a-new-drupal-node-type/
Gute zusätzliche Informationen: http://public-action.org/content/drupal-7-field-api-drupal-7-adding-custom-content-type-custom-fields-field-api
Das Problem, das ich hatte, war, dass diese (und jedes andere Beispiel, das ich online finden kann) sehr spezifische Beispiele ohne ausreichende Dokumentation sind, um eine Lösung für meinen eigenen Anwendungsfall zu finden.
Was half, war Tenkens Kommentar an das OP zur Verwendung des Features-Moduls, um die Arrays für die benutzerdefinierten Felder abzurufen.
Also habe ich das Funktionsmodul heruntergeladen und aktiviert: https://drupal.org/project/features
Dann habe ich die Felder in meinem Inhaltstyp mithilfe der Admin-Oberfläche in Drupal erstellt, wie Sie es normalerweise tun würden, die das Modul erstellen soll. Dann habe ich zu Struktur> Features> Feature erstellen navigiert und einen falschen Namen (ich habe "test" verwendet) für das Feature eingegeben und dann im Komponentenbereich auf "Feldinstanzen" geklickt und die Kontrollkästchen für die benutzerdefinierten Felder aktiviert. Die Felder haben alle den Namen node- [Maschinenname Ihres Knotentyps] - [Feldname]. In meinem Fall war es also, da ich ein Bildfeld wollte, node-Novel_Section-Field_image.
Nachdem ich die benutzerdefinierten Felder für meinen Knotentyp ausgewählt hatte, klickte ich einfach auf "Download-Funktion" und speicherte die .tar-Datei auf meinem Desktop, öffnete sie, öffnete den Ordner "test", sah die Datei test.features.field_base.inc an und testete. features.field_instance.inc, um die Arrays abzurufen, die ich für meine Felder benötigte.
Dann habe ich einfach die Struktur verwendet, die in dem ersten Link beschrieben ist, den ich gepostet habe, und danach hat es perfekt funktioniert. Für mich.
Ich konnte keine Dokumentation zu den Array-Strukturen finden, die für Dinge wie Bildfelder und Taxonomie-Referenzfelder benötigt werden, und es schien, dass sich alle anderen Online-Tutorials und Hilfeanfragen auf bestimmte Dinge wie Textfelder konzentrieren.
Hoffentlich wird jeder, der die gleichen Probleme hat wie ich, dies sehen und in der Lage sein, seine Einrichtung anhand dieser Beispiele und des Funktionsmoduls wie ich zum Laufen zu bringen.
Dank Tenken für den Hinweis auf diese Funktionalität des Features-Moduls hatte ich es nie verwendet und wusste nicht, dass es das tun würde.
quelle
Dieser Code wird als neuer Inhaltstyp erstellt, der in die Installationsdatei eingefügt werden soll.
Hook_install () hinzufügen:
Sie sollten eine Drupal-Nachricht erstellen und dieses Ereignis in das Protokoll schreiben:
Geben Sie hook_uninstall () ein, um Ihren Inhaltstyp zu entfernen :
quelle
admin/structure/types
Dieser Beitrag ist etwas veraltet, aber wenn es hilft, habe ich festgestellt, dass dieser Artikel sehr klar ist. Es zeigt Ihnen Schritt für Schritt, wie Sie einen neuen Inhaltstyp erstellen.
Link zum Tutorial
quelle