forms - crear - formularios en drupal 8
¿Editar formulario en el módulo drupal? (1)
Tengo un problema al crear el módulo Drupal. Creé un formulario para agregarlo a la base de datos pero no estoy teniendo suerte con la creación de formularios para editar algunos registros. Este es mi problema. El problema es cuando cargo los valores en la carga de formulario de la base de datos y los cambio y luego hago clic en enviar actualización de formulario de botón antes de enviar nuevos valores. Así que se actualiza en la base de datos lo mismo que era. Aquí hay un código:
function edit_form($form, &$form_state) {
$query = db_select(''activity'', ''f'')
->fields(''f'')
->condition(''IDA'', $_GET[''edit'']);
$thefile = $query->execute();
$title = "";
$desc = "";
$file = "";
$privacy = "";
while($record = $thefile->fetchAssoc())
{
$title = $record[''title''];
$desc = $record[''description''];ick submit button form refresh before it submit new values. So it updates into database same thing as it was. Here is a good :
function edit_form($form, &$form_state) {
$query = db_select(''activity'', ''f'') ->fields(''f'') ->co
$file = $record[''trainingresource''];
$privacy = $record[''privacy''];
}
$form[''activity''] = array(
''#type'' => ''fieldset'',
''#title'' => t(''Create a new activity''),
''#tree'' => TRUE,
);
$form[''activity''][''title''] = array(
''#type'' => ''textfield'',
''#title'' => t(''Title''),
''#description'' => t(''Please enter the title here.''),
''#value'' => t($title),
);
$form[''activity''][''description''] = array(
''#type'' => ''textarea'',
''#title'' => t(''Enter Description''),
''#value'' => t($desc),
''#description'' => t(''Please put description here.''),
);
/* $form[''activity''][''date''] = array(
''#type'' => ''date'',
''#title'' => t(''Enter activity date''),
''#description'' => t(''Please put activity date in here.''),
); */
$form[''activity''][''file''] = array(
''#type'' => ''file'',
''#title'' => t(''Submit activity file''),
''#value'' => t($file),
''#description'' => t(''Please files in here.''),
);
$form[''activity''][''security''] = array(
''#type'' => ''radios'',
''#title'' => t(''Privacy''),
''#value'' => t($privacy),
''#options'' => array(''True''=>t(''True''),''False''=>t(''False'')),
);
// Description
$form[''hidden''] = array(''#type'' => ''value'', ''#value'' => ''is_it_here'');
$form[''submit''] = array(''#type'' => ''submit'', ''#value'' => t(''Save''));
return $form;
}
Y aquí hay un código de formulario de envío:
function edit_form_submit($form, $form_state) {
$idt = $_GET[''edit''];
$title = trim($form_state[''values''][''activity''][''title'']);
$desc = trim($form_state[''values''][''activity''][''description'']);
//$date = trim($form_state[''values''][''activity''][''date''][''year'']."-".$form_state[''values''][''activity''][''date''][''month'']."-".$form_state[''values''][''activity''][''date''][''day'']);
$file = "file";
$privacy = trim($form_state[''values''][''activity''][''security''][''#value'']);
$nid = db_update(''activity'') // Table name no longer needs {}
->fields(array(
''title'' => $title,
''description'' => $desc,
//''date'' => $date,
''trainingresource'' => $file,
''privacy'' => $privacy,
))
->condition(''IDA'', $idt,''='')
->execute();
drupal_set_message($idt);
drupal_set_message("Added into database");
drupal_goto(''activity'', array(''query''=>array(
''activ''=>$_GET[''activ''],
)));
}
Si alguien tiene el mismo problema o sabe cómo resolver este problema, ayúdeme.
Gracias por adelantado.
En primer lugar, me gustaría señalar que su código de ejemplo se ha pegado incorrectamente. Veo dos declaraciones de la misma función edit_form.
Supongo que la primera declaración fue una copia incorrecta y continúo respondiendo esto.
El principal problema que he visto en su declaración de formulario es que está utilizando "#value" para almacenar el valor predeterminado. Por favor, use "# valor_predeterminado".
Si usa #value, ignora los valores enviados por el usuario.
Por ejemplo cambio,
$form[''activity''][''description''] = array(
''#type'' => ''textarea'',
''#title'' => t(''Enter Description''),
''#value'' => t($desc),
''#description'' => t(''Please put description here.''),
);
a
$form[''activity''][''description''] = array(
''#type'' => ''textarea'',
''#title'' => t(''Enter Description''),
''#default_value'' => t($desc),
''#description'' => t(''Please put description here.''),
);
También le recomiendo que consulte este enlace, que es un módulo que proporciona muchos ejemplos para interactuar con Drupal.