form_set_value für 6.x
am 22.11.2008 - 03:47 Uhr in
Hallo und guten Abend.
Ich hoffe, mir kann jemand weiterhelfen, ich suche jetzt schon seit Stunden Foren durch aber komme nicht klar.
Mein Problem: Ich hab ein Modul, das einen Contenttyp definiert. Ich möchte den Titel eines neu eingegebenen Nodes nach dem Submit automatisch verändern. Das sollte (meiner Meinung nach) mit form_set_value bei der Validierung möglich sein.
Erstmal Code:
<?php
/**
* Implementation of hook_{form}().
*/
function simple_form( &$form_state) {
// We need to define form elements for the node's title and body.
$form['title'] = array(
'#type' => 'textfield',
'#title' => check_plain($type->title_label),
'#required' => TRUE,
);
$form['body'] = array(
'#type' => 'textarea',
'#title' => t('body'),
'#default_value' => $node->body,
'#description' => t('Body Field.'),
'#required' => TRUE,
);
return $form;
}
?>
und die validate-Funktion:
<?php
/**
* Implementation of hook_{validate}().
*/
function simple_validate( $form, &$node) {
// global $logger;
// $logger->log('form: ');
// $logger->log($form);
// $logger->log('node: ');
// $logger->log($node);
$titleString = 'Neuer Titel';
form_set_value( ...??...);
}
?>
Hier möchte ich praktisch den Titel des Formulars neu setzen.
Alle Beispiele die ich gefunden habe beziehen sich scheinbar auf Drupal 5.x. Ich habe mir auch schon die Argumente ausgeben lassen, aber werde nicht schlau aus dem Aufbau des Arrays und wüsste vor allem nicht wo ich was zu ändern hätte.
Bin für jeden Tip dankbar!
- Anmelden oder Registrieren um Kommentare zu schreiben
form_set_value
am 22.11.2008 - 11:52 Uhr
Moin!
Naja, ist eigentlich ganz simpel.
Das erste Argument ist das Formularelement, dessen Wert Du ändern möchtest, das zweite Argument ist der neue Wert und das letzte Argument ist
$form_state
.In Deinem Fall also:
<?php
/**
* Implementation of hook_{validate}().
*/
function simple_validate( $form, &$node) {
$titleString = 'Neuer Titel';
form_set_value($form['title'], $titleString, $form_state);
}
?>
hth,
Stefan
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Danke für die Antwort. Ich
am 22.11.2008 - 16:26 Uhr
Danke für die Antwort.
Ich habe den Code nun folgendermassen geändert:
<?php
function simple_validate( &$form, &$form_state) {
$titleString = 'Neuer Titel';
form_set_value($form['title'], $titleString, $form_state);
}
?>
Ich bekomme so aber immer den Fehler
Fatal error: Cannot use object of type stdClass as array in /home/punkx/Web/www/drupal/sites/all/modules/simple/simple.module on line 77
um die Ohren. Ich habe mich aber mal ein wenig im Drupal-Qellcode umgeschaut. Dort wird die Methode genauso aufgerufen. Was mache ich falsch??
Dein 2. Parameter $titleString
am 27.11.2008 - 12:08 Uhr
Ofensichtlich bezieht sich
Fatal error: Cannot use object of type stdClass as array in /home/punkx/Web/www/drupal/sites/all/modules/simple/simple.module on line 77
Heisser Kanidat fuer den Fehler.
Dein 2. Parameter bei
form_set_value($form['title'], $titleString, $form_state);
Das ist bei Dir $titleString
$titleString = 'Neuer Titel';
Dir Funktion erwarte aber ein Array. Erkennbar in der Funktion form_set_value():
_form_set_value($form_state['values'], $form_item, $form_item['#parents'], $value);
Das bedeutet, Dein 2. Parameter muesste sich aendern. Z. Bsp:
<?php
$titleString = array(
'#title' => 'Neuer Titel',
);
?>
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.