Hej!
Jag använder hook_form_alter() för att göra några ändringar i node-edit formuläret.
I hook_form_alter så lägger jag till en submit knapp med en egen "submit handler" samt att jag ändrar på några detaljer i #prefix attributet på några av formulär items'n. I "submit handlern" så köra jag bara följande kod snutt för att ladda om formuläret så att ändringarna utförs:
<?php
$form_state['rebuild'] = TRUE;
?>Mina ändring utförs som de ska men resten av formuläret töms på information. Eventuella fält som man fyllt i (Title/Body) blir tomma. Kör jag en dpr() på $form_state så ligger alla värden där men de finns inte med i det renderade formuläret. Måste man göra något mer för att hook_form_alter() skall rendera formuläret med $form_state data vid en rebuild?
Jag har även testat med $form_state['storage'] i submit handlern som tydligen används mycket vid flersidiga formulär men till ingen nytta:
<?php
$form_state['storage']['values'] = $form_state['values'];
?>Ett annat problem med samma formulär är att min knapp inte fungerar om inte Title fältet är ifyllt eftersom det är required. Kan man komma runt detta på något sätt? Jag försökte göra en egen "validate handler" och resetta alla form_set_errors i den men det ville sig inte.
Tacksam för hjälp!
Daniel
Comments
Kan det vara så att man måste
Kan det vara så att man måste sätta värdena manuellt?
// Daniel Kvist
Bara för sakens skull...
Du vill verkligen göra om det till ett multistep formulär?
Rebuild bör sättas i en validator och inte i submit, om submit callbacken körs skapas normalt ett nytt formulär (med ett nytt state).
Ang. titel fältet kan du ju sätta required attributet till false. Men se till att sätta något värde ifall det är tomt, det bör finnas en titel
om inte annat genererad.
Tack för ditt svar men även
Tack för ditt svar men även när jag sätter rebuilden i validate funktionen så tappar formuläret värdena. Jag antar att man får gå igenom alla fält manuellt då för att kunna sätta tillbaka värdena i fälten?
Formuläret är inget multistep formulär egentligen utan bara ett sätt för att visa/gömma fält beroende på vad man väljer i en scroll-lista. Jag har en lösning med JavaScript som funkar fint men tänkte att det kan vara bra att ha en fallback om något går snett.
// Daniel Kvist