Ist es möglich, einem mit hook_node_info deklarierten Knotentyp Felder hinzuzufügen? Muss ich die Felder separat hinzufügen? Wenn ja, welchen Haken würde ich dafür verwenden?
Sie müssen die Felder separat anhängen, sie können nicht hinzugefügt werden hook_node_info()
. Normalerweise tun Sie dies in einer hook_install()
Funktion in der Installationsdatei Ihres Moduls.
Ein schönes einfaches Beispiel aus dem Drupal-Kern finden Sie in der Installationsdatei des Blog-Moduls:
function blog_install() {
// Ensure the blog node type is available.
node_types_rebuild();
$types = node_type_get_types();
node_add_body_field($types['blog']);
}
Die Funktion erstellt einfach die Knotentypen neu (damit der neu hinzugefügte Typ verfügbar ist) und fügt ihr dann mithilfe der node_add_body_field()
Funktion ein Textfeld hinzu . Diese Funktion an sich bietet ein hervorragendes Beispiel dafür, wie Sie ein Feld, eine Instanz dieses Felds, erstellen und dann mit den Funktionen field_create_field()
und an einen Inhaltstyp anhängen field_create_instance()
.
Der Code ist nicht so lang, deshalb werde ich ihn hier als Beispiel einfügen:
function node_add_body_field($type, $label = 'Body') {
// Add or remove the body field, as needed.
$field = field_info_field('body');
$instance = field_info_instance('node', 'body', $type->type);
if (empty($field)) {
$field = array(
'field_name' => 'body',
'type' => 'text_with_summary',
'entity_types' => array('node'),
);
$field = field_create_field($field);
}
if (empty($instance)) {
$instance = array(
'field_name' => 'body',
'entity_type' => 'node',
'bundle' => $type->type,
'label' => $label,
'widget' => array('type' => 'text_textarea_with_summary'),
'settings' => array('display_summary' => TRUE),
'display' => array(
'default' => array(
'label' => 'hidden',
'type' => 'text_default',
),
'teaser' => array(
'label' => 'hidden',
'type' => 'text_summary_or_trimmed',
),
),
);
$instance = field_create_instance($instance);
}
return $instance;
}