حذف ابزار resize زیر textarea در دروپال 7

آموزش حذف ابزار resize زیر textarea در دروپال 7

در فرم های دروپال، در زیر فیلد های متنی طولانی (textarea) یک نوار دیده می شود که با گرفتن آن با ماوس و کشیدن آن به سمت بالا یا پایین سایز textarea بزرگ و کوچک می شود. در غالب textarea های موجود در دروپال، این نوار دیده می شود.

ابزار resize یک textarea  در دروپال

معمولا هم بسیاری از افراد به این نوار تمایلی ندارند و تلاش می کنند آن را غیر فعال کنند و یا دست کم مخفی نمایند. از طرف دیگر این امکان در مرورگر های مدرن که از CSS3 پشتیبانی می کنند به طرز شکیل تری وجود دارد. بنابراین وجود چنین نواری برای Resize فیلد متنی طولانی برای برخی از سایت ها توجیهی ندارد.

عدم نمایش یا غیر فعال کردن این نوار در دروپال، مثل همه مسائل دروپالی دیگر راه حل های مختلفی دارد.

مخفی کردن ابزار resize یک textarea با CSS

در تصویر زیر مشخص شده است که آنچه که به عنوان ابزار Resize در زیر textarea دیده می شود چیزی جز یک div خالی نیست. این div یک کلاس خاص دارد: grippie

مخفی کردن ابزار resize یک textarea با CSS در دروپال

بنابراین اولین روش عدم نمایش این نوار با استفاده از CSS است. می توانیم در پوسته سایت و در کد های CSS، قانونی بنویسیم که تگی که کلاس grippie دارد مخفی شود. به این صورت این تگ حذف نمی شود ولی در صفحه نمایش داده نمی شود.

این قانون CSS می تواند به این صورت باشد:

form .grippie {
    display: none;
}

غیر فعال کردن خاصیت تغییر سایز textarea در دروپال با hook_form_alter

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

برای غیر فعال کردن نوار resize از زیر textarea ها در دروپال، می توانیم این هوک را در قالب سایت پیاده سازی کنیم.

مثلا اگر بخواهیم نوار resize را از زیر فیلد پیغام در فرم تماس، حذف کنیم، این کد را می نویسیم:

function drupalika_form_alter(&$form, &$form_state, $form_id) {
	if($form_id == 'contact_site_form') {
		$form["message"]["#resizable"] = FALSE;
	}
}

در این کد مشخص است که نام قالب drupalika است، بنابراین شما باید در هر پوسته این نام را به نام پوسته خود تغییر بدهید. با این تابع می توانیم هر فرمی را در دروپال تغییر بدهیم. به همین علت در دستور if در خط اول این تابع بررسی کرده ایم که آیا فرمی که در حال تغییر آن هستیم، فرم تماس با ما است یا خیر. اگر این شرط صادق بود، برنامه وارد بدنه شرطی می شود که خصوصیت #resizable عنصر پیغام در فرم را FALSE می کند. اجرای این کد باعث می شود که Form API دروپال، برای این textarea خاص، نوار resize را ایجاد نکند.

از طریق این تابع به روش پیچیده تری می توان تمام textarea های همه فرم ها را یافت و ابزار resize آنها را به روش ذکر شده در بدنه شرط بالا، غیر فعال کرد. کد این تابع باید در فایل template.php قالب سایت قرار بگیرد.

حذف resize از textarea در دروپال با پیاده سازی تابع theme_textarea

توابع سیستم تم دروپال، مسئول تولید کد HTML برای عناصر مختلف نمایشی هستند. مثلا تابع theme_textarea تابعی است که با گرفتن ورودی های مشخص، رشته حاوی کد HTML (تگ textarea) را باز می گرداند. دروپال از این نوع توابع برای تولید HTML استفاده می کند.

پیاده سازی این تابع به این شکل است:

function theme_textarea($variables) {
  $element = $variables['element'];
  element_set_attributes($element, array('id', 'name', 'cols', 'rows'));
  _form_set_class($element, array('form-textarea'));

  $wrapper_attributes = array(
    'class' => array('form-textarea-wrapper'),
  );

  // Add resizable behavior.
  if (!empty($element['#resizable'])) {
    drupal_add_library('system', 'drupal.textarea');
    $wrapper_attributes['class'][] = 'resizable';
  }

  $output = '<div' . drupal_attributes($wrapper_attributes) . '>';
  $output .= '<textarea' . drupal_attributes($element['#attributes']) . '>' . check_plain($element['#value']) . '</textarea>';
  $output .= '</div>';
  return $output;
}

خط 10 تا 14 این تابع، قابلیت resizable عنصر ورودی را بررسی کرده و در صورت نیاز، عملیات لازم برای افزودن آن به textarea را انجام می دهد. بنابراین کافی است که این خطوط را از این تابع حذف کنیم.

لازم به ذکر است که در دروپال به کد های هسته و ماژول های دیگر دست نمی زنیم و از راه های متعددی که دروپال برای تغییر رفتار خود در اختیار برنامه نویس قرار داده، استفاده می کنیم.

توابع سیستم تم دروپال، در تم یا پوسته سایت قابل پیاده سازی مجدد (override یا بازنویسی) هستند. یعنی با بازنویسی این تابع در تم می توانیم کد HTML را خودمان تولید کنیم.

برای بازنویسی این تابع در پوسته ای که نام آن drupalika است، باید در فایل template.php تابعی به نام drupalika_textarea داشت.

ما هم کد بدنه تابع theme_textarea را عینا کپی می کنیم و فقط خطوطی که باید حذف شوند را از بدنه تابع drupalika_textarea حذف می کنیم که نتیجه آن به این صورت است:

function drupalika_textarea($variables) {
  $element = $variables['element'];
  element_set_attributes($element, array('id', 'name', 'cols', 'rows'));
  _form_set_class($element, array('form-textarea'));

  $wrapper_attributes = array(
    'class' => array('form-textarea-wrapper'),
  );


  $output = '<div' . drupal_attributes($wrapper_attributes) . '>';
  $output .= '<textarea' . drupal_attributes($element['#attributes']) . '>' . check_plain($element['#value']) . '</textarea>';
  $output .= '</div>';
  return $output;
}

بنابراین برای حذف کامل ابزار resize از textare ها در دروپال کافی است تابع بالا را در تم سایت خود قرار بدهیم.

نظرات

با سلام
باز هم ممنون بابت به اشتراک گذاری علمتون.

با تشکر

ارسال نظر