উত্তর:
আপনি অবশ্যই ব্যবহার 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()।