আমি এমন একটি ফর্ম তৈরি করছি যা ফর্ম API '#ajax'
বৈশিষ্ট্যটি ব্যবহার করে এবং $form_state
এজ্যাক্স-সক্ষম হওয়া বোতামটি চাপলে আমার পরিবর্তন করা দরকার । আমি যা পেয়েছি তা এখানে:
আমার ফর্ম বিল্ডার ফাংশনের ভিতরে:
...
$form['some_fieldset']['add_more'] = array(
'#type' => 'button',
'#value' => t('Add more rows'),
'#ajax' => array(
'wrapper' => 'some-fieldset',
'callback' => 'my_module_settings_ajax',
'method' => 'replace',
'effect' => 'fade',
),
);
...
এবং এখানে কলব্যাক ফাংশন:
function my_module_settings_ajax($form, $form_state) {
// Make a change to $form_state
if ($form_state['some_fieldset']['add_more']) {
$form_state['values']['some_fieldset']['table'][] = array('first_field' => '',
'second_field' => '');
}
return $form['some_fieldset'];
}
$form_state
কলব্যাক শেষ হয়ে যাওয়ার পরে আমি যে পরিবর্তনটি দেখেছি তা হারিয়ে গেছে বলে মনে হচ্ছে। $form_state
এই ফাংশনে পরিবর্তন করার কোনও উপায় আছে , বা এর পরিবর্তে আমার অন্য কোনও ফাংশনটি ব্যবহার করা উচিত?
সম্পাদনা
দেখা যাচ্ছে যে এই যুক্তিটি করার জন্য কলব্যাকটি ভুল জায়গা। পরিবর্তে, ফর্ম নির্মাতা ফাংশনের শীর্ষে, আমি এটি যুক্ত করেছি:
// Respond to AJAX-triggger:
// Add new row
if ($form_state['triggering_element']['#name'] == 'add_more') {
$form_state['values']['some_fieldset']['table'][] = array('first_field' => '',
'second_field' => '');
}
অবশ্যই, আমি বোতামটির নামটি দিতে হয়েছিল:
$form['some_fieldset']['add_more'] = array(
'#type' => 'button',
'#name' => 'add_more', // <-- Right here
'#value' => t('Add more rows'),
'#ajax' => array(
'wrapper' => 'some-fieldset',
'callback' => 'my_module_settings_ajax',
'method' => 'replace',
'effect' => 'fade',
),
);
এবং এখন এটি কাজ করে!