উত্তর:
আপনি অবশ্যই ব্যবহার triggering_element
করুন $form_state['triggering_element']
।
সেরা অনুশীলন হ'ল #name
আপনার বোতামটির জন্য একটি বৈশিষ্ট্য নির্ধারণ করা , যাতে আপনার মধ্যে এই মানটি থাকতে পারে triggering_element
।
উদাহরণ স্বরূপ:
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
আপনি যদি এই বৈশিষ্ট্যটি সংজ্ঞায়িত না করেন triggering_element
তবে বোতামটি ধরে রাখতে হবে #value
(ব্যবহারকারী যে পাঠ্যটি পড়তে পারে) তবে এটি নিরুৎসাহিত করা হবে কারণ অন্যান্য মডিউলগুলি এই মান পরিবর্তন করতে পারে বা স্থানীয়করণের পরিবর্তিত হতে পারে)।
আপনি $form_state['clicked_button']
খুব ব্যবহার করতে পারেন , তবে এটি অবচয় করা হয়েছে ।
আপনি drupal_build_for ফাংশন ডকুমেন্টেশন পৃষ্ঠাতে আরও তথ্য পড়তে পারেন ।
$form_state['clicked_button']['#value']
ফর্মটিতে কোন বোতামটি ক্লিক করা হয়েছিল তা আপনাকে জানাবে।
$form_state['clicked_button']['#value']
:)
এই মানগুলির তুলনা করুন $form_state
আমি ড্রুপাল 6 এ যা করছি এবং দ্রুপাল 7 তেও তা হবে
if($form_state['values']['ok'] == $form_state]['clicked_button']['#value']){
//Process if OK is pressed
}else if($form_state['values']['cancel'] == $form_state]['clicked_button']['#value']) {
//Process if Cancel is pressed
}
#name
বৈশিষ্ট্যযুক্ত বোতামগুলির নাম দিন :
$form['delete'] = array(
'#type' => 'submit',
'#value' => t('Delete'),
'#name' => 'delete',
);
এবং তারপরে ব্যবহার করুন:
$values = $form_state['input'];
if (isset($values['delete'])) // 'delete' button was pressed.
যারা এখনও ট্রিগারযুক্ত ইভেন্টটিতে অ্যাক্সেস করবেন তা নির্ধারণের চেষ্টা করছেন তাদের জন্য ড্রুপাল 8 সমাধান।
$form_state->getTriggeringElement()
এটি ট্রিগার জমা দেওয়ার উপাদানটির অ্যারে প্রদান করে। যদি আপনি কল করা মার্কআপ যুক্ত করেন #name
তবে আপনি নিম্নলিখিত উপায়ে এটি অ্যাক্সেস করতে পারবেন।
$button_clicked = $form_state->getTriggeringElement()['#name']
এই পরিবর্তনের পিছনে কারণটি FormStateInterface
হ'ল এখন এমন একটি readOnly
ফাইল যা কেবলমাত্র বর্ধিত শ্রেণিগুলি FormStateInterface
ভেরিয়েবল অ্যাক্সেস করতে পারে। সুতরাং আপনাকে getTriggeringElement()
ভেরিয়েবল অ্যাক্সেস করার জন্য অ্যাকসেসর পদ্ধতিগুলি ব্যবহার করতে হবে ।
দ্রুপাল 8.4.4 এ $form_state->getTriggeringElement()['#name'];
আপনাকে মান দেয় op
। আপনি যখন ফর্মের রাজ্যের মান অ্যারেতে এই কীটি সন্ধান করেন, আপনি #value
বোতামের ফর্ম উপাদানটির কীটি পেয়ে যাবেন - অন্য কথায়, শেষ ব্যবহারকারীরা পৃষ্ঠার বোতামে যে স্ট্রিংটি দেখেন।
আমি জানি না যে $form_state->getValues()['op']
সমস্ত রূপের জন্য সর্বজনীন কিনা তবে আমি এটি আমার মডিউলের আকারে কঠোরভাবে কোডিং করছি।
ড্রুপাল 8.6.7
নীচের মতো কিছু বোতাম তৈরি করুন।
$form['my_button'] = [
'#type' => 'button',
'#value' => t('Custom Button'),
'#name' => t('customButton'),
'#weight' => 0,
'#attributes' => [
'class' => ['populate-bib-button', 'btn', 'btn-primary'],
],
];
আপনার জমা ফাংশনে নীচের কোডের মতো বোতামের নাম পান।
$input = $form_state->getUserInput();
print $input['_triggering_element_name']; // customButton
তুলনা যেমন করা যেতে পারে
if ($input['_triggering_element_name'] == 'customButton') {
// Do something.
}
# Drupal8
hook_submit()
ফর্ম জমা হ্যান্ডলারের কথা বলছেন ? একটি ফর্ম জমা হ্যান্ডলার বাস্তবায়ন হয় নাhook_submit()
।