برنامه نویسی ماژول دروپال برای ایجاد بلوک

برنامه نویسی ماژول دروپال برای ایجاد بلوک

بلوک ها در ساختار یک سایت دروپالی

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

صفحه مدیریت بلوک ها در دروپال

ایجاد بلوک در دروپال با برنامه نویسی

سیستم انعطاف پذیر دروپال این امکان را به برنامه نویسان می دهد که در ماژولی که پیاده سازی می کنند، بلوک و یا بلوک هایی را به دروپال معرفی کنند و محتوای آن بلوک ها را نیز تولید کنند. توسعه امکانات دروپال معمولا از طریق پیاده سازی هوک ها (hook) انجام می شود. برای افزودن بلوک ها به دروپال به صورت برنامه نویسی شده، نیز تعدادی هوک در API دروپال تعریف شده است. این هوک ها عبارتند از:

نام هوک توضیح هوک
hook_block_info فهرستی از بلوک هایی که ماژول ارائه می کند را بر می گرداند.
hook_block_view نمایش بلوک هایی که ماژول تعریف کرده است را مشخص می کند.
hook_block_configure یک فرم برای تنظیمات بلوک فراهم می کند.
hook_block_save عملیات لازم برای ذخیره تنظیمات را در بر می گیرد.

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

معرفی بلوک ها به دروپال

برای شناساندن بلوک های جدید به دروپال باید hook_block_info را پیاده سازی کنیم. برای پیاده سازی این هوک در ماژولی که برنامه نویسی می کنیم، باید یک تابع داشته باشیم که نام آن hook_block_info باشد که به جای کلمه hook، نام ماشین ماژول قرار می گیرد. نام ماشینی ماژول همان نام فایل info ماژول است. مثلا اگر نام ماژول ما drupalika_module باشد، باید تابعی به نام drupalika_module _block_info در کد های ماژول خود داشته باشیم.

برای نمونه به تابع زیر توجه کنید:

function drupalika_module_block_info() {
  
  $blocks['hello'] = array(
    'info' => t('Hello'),
  );
  
  return $blocks;
}

این تابع باید یک آرایه برگرداند که حاوی اطلاعات بلوک های این ماژول است. هر خانه از این آرایه دارای یک کلید است که به آن دلتا (delta) گفته می شود و مقدار آن، یک آرایه است که اطلاعات یک بلوک را تعریف می کند. چون هر ماژول می تواند بلوک های متعددی را تعریف کند، بنابراین باید هر بلوک یک وجه تمایزی با سایر بلوک ها داشته باشد. برای ایجاد چنین تفاوتی از دلتا استفاده می کند. بنابراین به صورت کلی در دروپال، هر بلوک با دو مشخص، تعیین می شود: نام ماژول + نام دلتا.

آرایه داخلی که حاوی اطلاعات یک بلوک است خود حاوی چند جفت کلید-مقدار است. در اینجا فقط کلید info که اجباری است، نوشته شده است. می توانید اطلاعات کاملتری در مورد این کلید ها را در سایت API دروپال بیابید.

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

صفحه مدیریت بلوک ها در دروپال

تولید محتوای بلوک در دروپال

با پیاده سازی هوک block_info، فهرستی از بلوک های ماژول را به دروپال معرفی می کنیم ولی کار هنوز تمام نشده است. بخش مهم کار باقی مانده است و باید محتوای هر بلوک را نیز تولید کنیم. برای اینکه محتوای هر بلوک را برای نمایش به دروپال بدهیم باید تابع هوک دیگری را پیاده سازی کنیم. این هوک hook_block_view است. بنابراین در ماژول نمونه که نام آن drupalika_module است باید تابعی به نام drupalika_module_block_view داشته باشیم. این تابع باید یک ورودی بگیرد که مقدار آن دلتا است و آرایه ای را نیز بازگرداند. نمونه ای از آن را در کد زیر مشاهده می کنید:

function drupalika_module_block_view($delta = '') {
  
  $block = array();

  switch ($delta) {
    case 'hello':
      $block['subject'] = t('Hello');
      $block['content'] = 'Hello! This is my new block.';
      break;

  }
  return $block;
}

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

آرایه خروجی دارای دو خانه است که کلید آن در جدول زیر مشخص شده است:

کلید مقدار
subject عنوان (title) پیش فرض بلوک را مشخص می کند.
content محتوای بلوک را مشخص می کند که می تواند دو حالت داشته باشد. یا می تواند یک رشته متن یا کد HTML باشد و یا یک آرایه قابل render شدن در دروپال باشد.

همانطور که در کد بالا نیز می بینید، با استفاده از دستور سوئیچ روی متغیر دلتا، مشخص کرده ایم که محتوای کدام بلوک باید تولید شود. سپس می بینید که در آرایه خروجی از تابع، ایندکسcontent را با محتوای مورد نظر خود پر کرده ایم. همین طور در ایندکس subject عنوان بلوک را تعیین کرده ایم. در شکل زیر نحوه نمایش این بلوک را مشاهده می کنید.

نمایش بلوک ها در دروپال

به چند نکته توجه کنید:

  • اگر ماژول جدیدی نوشته اید، ابتدا آن را فعال کنید و سپس به صفحه مدیریت بلوک ها بروید و بلوک ساخته شده را یافته و در ناحیه (region) مورد نظر خود قرار بدهید.
  • این راهنمای برای دروپال 7 تهیه شده است. نحوه معرفی بلوک ها در ماژول های دروپال 6 متفاوت است.

ارسال نظر