Ich habe eine Ansicht, die mehrere Knoten anzeigt. Ich möchte das Knotenformular unter jedem angezeigten Knoten platzieren. Beide node_add
y drupal_get_form
direkt in template.php funktioniert gut, aber ich erhalte Formulare mit der gleichen Formular-ID von NODETYPE_node_form
und die Validierung und Übermittlung funktioniert nicht wie erwartet.
Wenn Sie mehrere Knotenformulare auf einer Seite unterbringen müssten, wie würden Sie generell vorgehen?
Bisherige Fortschritte...
in template.php bei der Vorverarbeitung des Knotens $author_profile und $content werden vorher festgelegt.
$unique = $vars['node']->nid;
$node = new StdClass();
$node->uid = $vars['user']->uid;
$node->name = $vars['user']->name;
$node->type = 'review';
$node->language = '';
$node->title = t('Review of ') . $vars['node']->realname . t(' by ') . $vars['user']->realname . t(' on ') . $content->title;
$node->field_review_to_A[0]['nid'] = $nodeA->nid;
$node->field_review_to_B[0]['nid'] = $vars['node']->nid;
$node->field_review_to_profile[0]['nid'] = $author_profile->nid;
if(!function_exists("node_object_prepare")) {
include_once(drupal_get_path('module', 'node') . '/node.pages.inc');
}
//$vars['A_review_form'] = drupal_get_form('review_node_form', $node);
$vars['A_review_form'] = mymodule_view($node, $unique);
im Modul mymodule
function mymodule_view($node, $unique) {
if(!function_exists("node_object_prepare")) {
include_once(drupal_get_path('module', 'node') . '/node.pages.inc');
}
$output = drupal_get_form('review_node_form_' . $unique, $node);
return $output;
}
function mymodule_forms($form_id, $args) {
$forms = array();
if (strpos($form_id, "review_node_form_") === 0) {
$forms[$form_id] = array('callback' => 'node_form');
}
return $forms;
}
function mymodule_form_alter(&$form, $form_state, $form_id) {
if (isset($form['type']) && isset($form['#node']) && $form_id != $form['type']['#value'] .'_node_form' && $form['type']['#value'] == 'review') {
$type = content_types($form['#node']->type);
if (!empty($type['fields'])) {
module_load_include('inc', 'content', 'includes/content.node_form');
$form = array_merge($form, content_form($form, $form_state));
}
$form['#pre_render'][] = 'content_alter_extra_weights';
$form['#content_extra_fields'] = $type['extra'];
//$form['#id'] = $form_id;
//$form['#validate'][0] = $form_id . '_validate';
$form['title']['#type'] = 'value';
$form['field_review_to_A']['#type'] = 'value';
$form['field_review_to_B']['#type'] = 'value';
$form['field_review_to_profile']['#type'] = 'value';
}
}
Fragen
Meine Meinung zur Zusammenfassung unklarer Fragen...
- Ist dies gute allgemeine Ansatz für die Anzeige von mehreren Knoten Formen auf derselben Seite?
- Ist es OK, den Code von
content
Module inhalt_form_alter Funktion in Funktionmymodule_form_alter
? Wird es die Dinge nicht bremsen, wenncontent
Modul aktualisiert wird? - Soll ich die
$form['#id']
? Ohne sie haben alle Formulare die gleiche HTML-Formular-ID vonnode_form
, damit ist die ID eindeutig, wiereview_node_form_254
. Die Sache ist die, dass es keinen Unterschied macht, wie das Formular eingereicht wird. Einstellung$form['#validate'][0]
scheint die Dinge nicht zu beeinflussen. Vielleicht sollte ich einstellen$form[button]['#submit'][0]
zu etwas anderem? Jetzt seinenode_form_submit
. - Warum funktioniert die Validierung nicht, auch wenn die Formular-ID eindeutig ist und die Funktion form validate verwendet wird? Wenn ich das letzte Formular ohne Pflichtfeld abschicke, werden alle vorherigen Formulare mit roten Feldern angezeigt. Sollte ich meine eigene Validierungsfunktion erstellen? Irgendwelche Tipps, wo ich anfangen soll?