Привет, я хотел бы создать пользовательскую форму Drupal, в которой есть текстовый файл, в который я ввожу некоторые данные, и они сохраняются в таблице переменных.
Мое требование заключается в том, что форма должна содержать только Add
,Remove
и Add More
кнопка для добавления дополнительного текстового файла.
Когда текстовый файл пуст, он должен показывать кнопку «Добавить» рядом с текстовым файлом (при вводе данных и нажатии кнопки «Добавить» следует сохранять данные в таблице переменных), когдатекстовый файл не пустой, он должен показывать кнопку удаления рядом с текстовым файлом (при нажатии кнопки «Удалить» он должен удалять данные в переменной таблице)
При нажатии кнопки Add More
необходимо создать пустой текстовый файл с кнопкой Add
рядом сit.
Все это должно происходить без перезагрузки страницы.
Мне удалось выполнить задачу с помощью кнопок Add
, Remove
, Add More
и Submit
.
Я изучил доступные ресурсы и примеры модулей, но не смог найти полезный ресурс.
Может ли кто-нибудь помочь мне изменить код?e, чтобы можно было удалить кнопку Submit
.
Мой код выглядит следующим образом :
<?php
function mymodule_menu() {
$items = array();
$items['admin/mymodule'] = array(
'title' => t('Example form'),
'type' => MENU_CALLBACK,
'page callback' => 'drupal_get_form',
'page arguments' => array('mymodule_ajax_example_add_more'),
'access callback' => TRUE,
);
return $items;
}
function mymodule_ajax_example_add_more($form, &$form_state) {
$mymodule_ajax_events = variable_get('mymodule_ajax_example_content', array());
$mymodule_ajax_events_count = count($mymodule_ajax_events);
if ($mymodule_ajax_events_count == 0) {
$mymodule_ajax_events_count = 1;
}
$form = array();
$form['#tree'] = TRUE;
$form['mymodule_ajax_events'] = [
'#type' => 'container',
'#weight' => 80,
'#tree' => TRUE,
// Set up the wrapper so that AJAX will be able to replace the fieldset.
'#prefix' => '<div id="js-ajax-elements-wrapper">',
'#suffix' => '</div>',
];
$form_state['field_deltas'] = isset($form_state['field_deltas']) ? $form_state['field_deltas'] : range(0, $mymodule_ajax_events_count-1);
$field_count = $form_state['field_deltas'];
foreach ($field_count as $delta) {
$form['mymodule_ajax_events'][$delta] = [
'#type' => 'container',
'#attributes' => [
'class' => ['container-inline'],
],
'#tree' => TRUE,
];
$form['mymodule_ajax_events'][$delta]['event_url'] = [
'#type' => 'textfield',
'#title' => t('Event URL' . ($delta + 1)),
'#size' => 40,
'#default_value' => (isset($mymodule_ajax_events[$delta])) ? $mymodule_ajax_events[$delta] : '',
];
$form['mymodule_ajax_events'][$delta]['remove_event_url'] = array(
'#type' => 'submit',
'#value' => t('Remove'),
'#submit' => ['mymodule_ajax_example_add_more_remove'],
'#ajax' => [
'callback' => 'mymodule_ajax_example_add_more_remove_callback',
'wrapper' => 'js-ajax-elements-wrapper',
],
'#weight' => 50,
'#attributes' => [
'class' => ['button-small'],
],
'#name' => 'remove_event_url_' . $delta,
);
}
$form['mymodule_ajax_events']['add_event_url'] = array(
'#type' => 'submit',
'#value' => t('Add one more'),
'#submit' => ['mymodule_ajax_example_add_more_add_one'],
'#ajax' => [
'callback' => 'mymodule_ajax_example_add_more_add_one_callback',
'wrapper' => 'js-ajax-elements-wrapper',
],
'#weight' => 1,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Submit'),
'#weight' => 100,
);
return $form;
}
function mymodule_ajax_example_add_more_remove($form, &$form_state) {
$delta_remove = $form_state['triggering_element']['#parents'][1];
$k = array_search($delta_remove, $form_state['field_deltas']);
unset($form_state['field_deltas'][$k]);
$form_state['rebuild'] = TRUE;
drupal_get_messages();
}
function mymodule_ajax_example_add_more_remove_callback($form, &$form_state) {
return $form['mymodule_ajax_events'];
}
function mymodule_ajax_example_add_more_add_one($form, &$form_state) {
$form_state['field_deltas'][] = count($form_state['field_deltas']) > 0 ? max($form_state['field_deltas']) + 1 : 0;
//mymodule_ajax_example_add_more_validate();
$form_state['rebuild'] = TRUE;
// drupal_get_messages();
}
function mymodule_ajax_example_add_more_add_one_callback($form, $form_state) {
return $form['mymodule_ajax_events'];
}
function mymodule_ajax_example_add_more_validate($form, $form_state) {
dpm($form_state);
foreach ($form_state['values']['mymodule_ajax_events'] as $key => $item) {
//dpm($item);
dpm($item['event_url']);
if (!empty($item['event_url'])) {
if (!preg_match('/https:\/\/example.com.*/i', $item['event_url'])) {
form_set_error("mymodule_ajax_events][$key][event_url", 'Enter a valid Event URL.' . ($key + 1));
//
}else{
drupal_set_message('URL ' . ($key + 1) . ' Created' );
}
}
}
}
function mymodule_ajax_example_add_more_submit($form, $form_state) {
$events_content = array();
$events_count = 0;
foreach ($form_state['values']['mymodule_ajax_events'] as $key => $item) {
if (!empty($item['event_url'])) {
$events_content[] = $item['event_url'];
$events_count++;
}
}
variable_set('mymodule_ajax_example_content', $events_content);
variable_set('mymodule_ajax_example_count', $events_count);
}