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

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

فرم در صفحات وب

در صفحات سایت فرم های مختلفی برای ورود داده ها توسط بازدیدکنندگان سایت و مدیر سایت وجود دارد. ثبت نام، لاگین، ارسال کامنت، تماس با ما و فراموشی پسورد از طریق فرم هایی در سایت انجام می شود که کاربران سایت می توانند از آنها استفاده کنند. ارسال محتوا، تنظیمات سایت و تعداد زیادی از کارهای مدیریتی سایت نیز از طریق فرم ها انجام می شوند.

فرم HTML

فرم ها نیز مانند سایر اجزای صفحات وب با زبان HTML درست می شوند. هر فرم، تعدادی ورودی (input) برای وارد کردن داده ها دارد که هر یک با تگ HTML خاصی ایجاد می شود. برای نمونه به کد زیر توجه کنید:

<form method="post" action="/drupalika/form">
<input type="text" name="name" />
<input type="submit" value="ارسال" name="op" id="edit-save-button" />
</form>

همه عناصر یک فرم در یک تگ form قرار می گیرند. بیشتر ورودی ها با تگ input درست می شوند و خصوصیت type آنها مشخص می کند که از چه نوعی می باشند.

ایجاد یک فرم در زبان HTML کار چندان سختی نیست ولی موضوع مهمتر، ارسال داده های فرم به سایت (برنامه در سمت سرور) است. ارسال داده ها های یک فرم به سرور توسط برنامه مرورگر انجام می شود، و برنامه سایت شما در سمت سرور باید، این اطلاعات را بگیرد و عملیات لازم را انجام دهد مثلا داده های ارسالی را از حیث اعتبار آنها کنترل کند و در دیتابیس ذخیره کند.

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

فرآیند ایجاد فرم های یک سایت تا دریافت داده ها در سمت سرور و بررسی اعتبار داده های ارسالی، یک بخش اساسی در طراحی فریم ورک های مدیریت سایت و سیستم های مدیریت محتوا (CMS) است. بنابراین رویکرد برنامه نویس وب، برای ساخت فرم و دریافت اطلاعات آنها در چنین سیستم هایی وابسته به معماری آنها است و باید بر اساس قواعدی که مستندات آنها تعیین می کنند، انجام بشود.

دروپال نیز به عنوان یک فریم ورک مدیریت محتوا که معماری داخلی آن بسیار قدرتمند و انعطاف پذیر طراحی شده است، از این قاعده مستثنی نیست. برنامه نویسی دروپال باید دقیقا به تمام مراحل کار با فرم ها در دروپال آشنا باشد و از امکانات هسته دروپال به درستی برای هدف خود استفاده کند.

دروپال بستر خاصی را برای تولید فرم ها در اختیار برنامه نویس قرار می دهد که آن را به عنوان Drupal Form API می شناسیم. در ادامه به صورت مقدماتی بعضی مراحل مهم در فرآیند تولید فرم ها و بازیابی اطلاعات ارسالی از آنها را در دروپال مطالعه می کنید.

پیش نیاز مطالعه بخش های بعدی این مطلب، آشنایی با برنامه نویسی ماژول در دروپال است. فرض بر این است که خواننده، بر مطالب بیان شده در برنامه نویسی ماژول دروپال در 5 گام ساده مسلط باشد.

افزودن یک صفحه جدید به دروپال

فرم های دروپال را می توان در یک بلوک و یا یک صفحه ایجاد کرد. در مطالب گذشته سایت به نحوه ایجاد یک صفحه جدید در دروپال و نحوه ایجاد بلوک در دروپال با برنامه نویسی پرداختیم. در این مطلب یک فرم را با استفاده از Drupal Form API در یک صفحه جدید می سازیم.

نام ماژولی که به صورت نمونه در مطالب یاد شده، کار کردیم، drupalika_module بود. برای ایجاد یک صفحه جدید یک ایندکس جدید به آرایه آدرس های ماژول در تابع drupalika_module_menu که hook_menu را پیاده سازی کرده است، می افزائیم:

function drupalika_module_menu() {
  $items = array();
  
  $items['drupalika/develop'] = array(
    'title' => 'Developing a new module',
    'page callback' => 'drupalika_develop_page',
    'delivery callback' => 'drupalika_custom_delivery_callback',
    'access callback' => TRUE,
  );
  
  $items['drupalika/form'] = array(
    'title' => 'Developing a form',
    'page callback' => 'drupalika_develop_form',
    'access callback' => TRUE,
  );
  
  return $items;
}

همانطور که می بینید آدرس جدید drupalika/form را به این آرایه از آدرس ها اضافه کرده ایم. برای آن عنوانی در نظر گرفته ایم (title)، نام تابع تولید کننده محتوای صفحه (page callback) را به آن داده ایم و مجوز دسترسی به صفحه را (access callback) به صورت عمومی تعریف کرده ایم.

شروع استفاده از Drupal Form API

برای صفحه مورد نظر خود یک تابع معرفی کردیم که تولید محتوای صفحه را بر عهده دارد. نام این تابع را drupalika_develop_form قرار داده ایم. بنابراین باید این تابع را پیاده سازی کنیم:

function drupalika_develop_form() {
  return ' ';
}

این تابع (drupalika_develop_form) باید محتوای صفحه را بازگرداند. محتوای این صفحه یک فرم است که باید با استفاده از API دروپال آن را بسازیم.

در این جا باید یک نام به عنوان Form ID برای فرم خود در نظر بگیریم تا به عنوان مشخصه فرم به دروپال معرفی کنیم. این نام، نام تابعی است که ورودی های فرم را در آن مشخص می کنیم. بنابراین باید تمام قواعد نام یک تابع در PHP را رعایت کنیم. در این نمونه نام تابع فرم ساز که به عنوان Form ID نیز استفاده می شود را drupalika_form_builder_function در نظر می گیریم.

باید تابع drupalika_develop_form که تولید کننده اصلی محتوای صفحه است، را تغییر بدهیم و در آن Form ID مورد نظرمان را به تابع drupal_get_form ارسال کرده و خروجی آن را که فرم مورد نظر ما است را باز گردانیم. به این صورت:

function drupalika_develop_form() {
  return drupal_get_form('drupalika_form_builder_function');
}

تابع drupal_get_form مقدمات لازم برای ایجاد فرم را در دروپال فراهم می کند و در ضمن آن تابع فرم ساز ما را که در آن عناصر فرم را مشخص می کنیم، صدا می زند.

ساخت عناصر فرم درون تابع فرم ساز در دروپال

همانطور که گفتیم، یک تابع باید داشته باشیم که در آن عناصر فرم و ورودی های آن مشخص می شوند. نام این تابع را برای مثال drupalika_form_builder_function در نظر گرفتیم و به drupal_get_form دادیم. اکنون زمان پیاده سازی این تابع است:

function drupalika_form_builder_function($form, &$form_state) {

  // inputs

  return $form;
}

این تابع باید حداقل دو ورودی داشته باشد که معمولا آن را با نام های form و form_state می شناسیم. تابع فرم ساز ما توسط تابع دیگری که در هسته دروپال قرار دارد، صدا زده می شود و این ورودی ها را به تابع فرم ساز ما ارسال می کند.

آرایه $form چیزی است که از این تابع بازگردانده می شود، بنابراین باید حاوی ورودی های فرم و عناصر دیگری که می خواهیم در این فرم نمایش داده شود، باشد. فهرست کاملی از آیتم هایی که می توان با استفاده از Drupal Form API به فرم اضافه کرد در این سایت API دروپال معرفی شده است. به صورت مقدماتی فقط دو نوع از این عناصر را معرفی می کنیم.


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

نظرات

با سلام و احترام
واقعاً سایت عالی دارید و از همه مهمتر تسلط و شیوایی بیان شماست که در نوشته هاتون احساس میشه
خواهشی که از شما دارم اینه که مطالب رو به همین شیوه ادامه بدید

تصویر admin
هاشم جان، ممنون که نظر لطف خود را در مورد سایت بیان کردید. حتما سعی می کنم مطالب با کیفیتی را در اختیار خوانندگان عزیز سایت قرار بدهم.

ارسال نظر