راهنمای ساده ساخت فرم در دروپال (بخش دوم)

راهنمای ساده ساخت فرم در دروپال

افزودن ورودی متنی به فرم در دروپال

یک فیلد متنی ساده برای ورود نام کاربر، به فرم اضافه می کنیم. بنابراین ایندکس جدیدی از آرایه $form را مقدار دهی می کنیم. برای نمونه:

$form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Name'),
);

رشته ای که به عنوان ایندکس استفاده می شود، برای بازیابی اطلاعات فرم اهمیت دارد، بنابراین بهتر است یک نام قابل فهم باشد. در این جا آن را name در نظر گرفته ایم. هر خانه از آرایه $form خود یک آرایه است که تنظیمات مختلف هر جزء فرم را در آن مشخص می کنیم. ایندکس های این آرایه دوم، از قبل در API دروپال مشخص شده اند و باید دقیقا بر طبق آنها عمل کرد. مثلا برای اینکه مشخص کنیم، این جزء از فرم ها یک ورودی متنی ساده است، نوع آن را در ایندکس #type مشخص کرده ایم. مقدار textfield را به #type داده ایم. مقادیری که به #type داده می شود نیز از قبل مشخص هستند. می توانید انواع عناصر فرم که هسته دروپال ارائه می کند را در سایت API دروپال بیابید.

در ایندکس #title عنوان لیبل این ورودی متنی را مشخص می کنیم. همانطور که می بینید مقدار این ایندکس، به صورت دلخواه است و آن را به تابع t در دروپال ارسال کرده ایم که در صورت وجود ترجمه ای برای رشته مورد نظر، آن عبارت را به عنوان لیبل در نظر بگیرد.

نمایش این ورودی را در زیر مشاهده می کنید:

افزودن ورودی متنی به فرم در دروپال

افزودن دکمه ارسال به فرم در دروپال

برای اینکه مقادیری که کاربر در ورودی های فرم تایپ کرده است قابل ارسال به سرور باشد، مثل همه فرم های دیگر در وب باید یک دکمه داشته باشیم. دکمه ارسال از نوع submit است. نمونه ای از افزودن یک دکمه ارسال به $form را در کد زیر می بینید:

$form['save-button'] = array(
  '#type' => 'submit',
  '#value' => t('Submit'),
);

با ایندکس #type در بخش قبلی آشنا شدید. در اینجا باید مقدار submit را به آن بدهیم که یک دکمه ارسال در فرم ایجاد شود. ایندکس #value مشخص می کند که عبارتی که روی دکمه مشاهده می شود، چه چیزی است. برای اینکه عبارت مورد نظر ترجمه شود آن را به تابع t ارسال کرده ایم.

افزودن دکمه ارسال به فرم در دروپال

تابع فرم ساز و نمایش آن در دروپال

همانطور که گفته شد تابع فرم ساز باید یک آرایه ($form) که ساختار خاصی دارد را بازگرداند. توابع موجود در هسته دروپال این آرایه را تفسیر کرده و کد HTML آن را تولید کنند.

تا اینجا تابع فرم ساز ما به صورت زیر شد:

function drupalika_form_builder_function($form, &$form_state) {
  
  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Name'),
  );
  
  $form['save-button'] = array(
    '#type' => 'submit',
    '#value' => t('Submit'),
  );
  
  return $form;
}

و نمایش آن در صفحه نیز به این صورت مشاهده می شود:

تابع فرم ساز و نمایش آن در دروپال

بازیابی اطلاعات ارسال شده فرم ها در دروپال

فرم ها برای این ساخته می شوند که کاربر اطلاعاتی را در آن وارده کرده و به سایت ارسال کند. بنابراین بخش مهم کار با فرم ها بازیابی اطلاعات ارسال شده در برنامه سایت است.

داده های ارسالی فرم ها در زبان PHP در یکی از آرایه های سراسری $_GET و $_POST موجود است. با این حال بهتر است، از روش دروپال برای بازیابی داده های فرم ها استفاده کرد.

زمانی که داده های یک فرم به دروپال ارسال می شود، سیستم مدیریت فرم های دروپال عملیات هایی را انجام می دهد که یکی از مراحل آن رساندن داده ها ارسال شده به دست شما است. پیش فرض دروپال این است که اگر تابع فرم ساز شما یا همان Form ID به نام drupalika_form_builder_function است، شما یک تابع دیگر به نام drupalika_form_builder_function_submit داشته باشید که آن را صدا بزند. در واقع نام تابعی که داده های ارسال شده فرم ها را دریافت می کند، از افزودن رشته _submit به نام تابع فرم ساز به دست می آید. اگر این تابع وجود داشته باشد، دروپال آن را صدا می زند. بنابراین برای بازیابی داده های ارسال شده در فرم، این تابع را در ماژول خود می نویسیم:

function drupalika_form_builder_function_submit($form, &$form_state) {

}

آرگومان های ورودی این تابع مشابه آرگومان هایی هستند که تابع فرم ساز دارد. آرایه $form_state در این حالت حاوی اطلاعاتی در مورد فرم است و در یکی از ایندکس های آن به نام values داده های ارسالی قرار دارد.
برای این فرم، در تابع submit دستور نمایش مقادیر $form_state['values'] را می نویسیم. برای این کار از روشی که در مطلب «مشاهده مقادیر متغیر ها و آرایه ها در برنامه نویسی ماژول دروپال» بیان شد، استفاده می کنیم:

function drupalika_form_builder_function_submit($form, &$form_state) {
  custom_dpm($form_state['values']);
}

بازیابی اطلاعات ارسال شده فرم ها در دروپال

مقادیر موجود در آرایه $form_state['values'] را در قسمت پیام ها، نمایش می دهیم. داده های ارسال فرم در آن قرار دارد. اگر به خاطر داشته باشید، ایندکس ورودی متنی ما در آرایه $form رشته name بود و همانطور هم که در تصویر بالا می بینید، ایندکس name از آرایه $form_state['values'] حاوی مقداری است که کاربر درون فیلد متنی وارد کرده است. یعنی به طور دقیقتر می گوئیم که مقدار فیلد متنی که در فرم داشتیم را باید در $form_state['values']['name'] بیابیم.

پس از اینکه داده ها را در این تابع بازیابی کردیم، می توانیم عملیات لازم را روی آن انجام دهیم. برای نمونه داده ها را در دیتابیس ذخیره کنیم و یا ...

ارسال نظر