یک ماژول چیست؟
یک ماژول دروپال عبارت است از مجموعه ای از فایلها که شامل توابع نوشته شده با PHP هستند. یک ماژول به علت اجرا در داخل سایت میتواند به تمام توابع و متغییر ها و ساختار هسته دروپال دسترسی داشته باشد. در واقع یک ماژول با یک فایل منظم PHP که میتواند مستقیماً برای هدایت توابع مختلف، ایجاد تست و اجرا شود، فرقی نمیکند.
این روش به هسته دروپال اجازه میدهد تا در مکانهای خاص توابع خاص که در ماژولهای دیگر نوشته شده اند را فراخوانی کرده و تابع پذیر بودن هسته را افزایش دهد. این موقعیت ها که همان توابع هستند و میتوانند در محلهای دیگر استفاده شوند "hook" نامیده میشوند.
درباره hook ها
hook ها چگونگی تعامل ماژول ها با کدهای هسته دروپال را مشخص میکنند. به عنوان مثال؛ hook ها امکان تعریف آدرس url و صفحات در سایت را با (hook_menu) برای ماژول های مختلف فراهم میکنند. همچنین امکان افزودن محتوا به صفحات با (hook_block و hook_footer و ...) ، ایجاد جداول جدید در دیتابیس با (hook_schema) و غیره را فراهم میکنند.
[url=http://api.drupal.org/api/drupal/includes%21module.inc/group/hooks]این صفحه [/url]hook های هسته را لیست کرده است، همچنین یک ماژول میتواند hookهای جدیدی برای خود تعریف و به دروپال اضافه کند. مثلا ماژول CCK یک hook با نام hook_field_info فراهم کرده است تا ماژولهای دیگر بتوانند فیلدهای جدیدی برای محتوای مختلف ایجاد کنند. به هر حال هر ماژولی که hook های اختصاصی را ارائه میدهد مستندات استفاده از آن را نیر عرضه خواهد کرد.
hook ها در نقاط مختلفِ اجرای کد رخ میدهند؛ دروپال برای این کار از تمام ماژولهای فعال سایت کمک میگیرد.
مثلا وقتی کاربر یک صفحه را که با hook ایجاد صفحه ایجاد میشود را بازدید میکند، دروپال تمام ماژولها را به امید اینکه برای این صفحه، "راهنمای کاربر" تعریف شده باشد سرج میکند.
این کار با جستجو در همه ماژول ها برای یافتن hook با نام mymodule_help صورت میگیرد. شکل این تابع یا همان hook به این صورت است:
mymodule_help($path, $arg)
mymodule نام همان ماژولیست که این هوک در آن قرار دارد. مثلا hook_help در ماژول بلاک به صورت block_help و در ماژول node به صورت node_help نوشته میشود. که _help اصل بخش ثابت و معرفی کننده نوع hook میباشد.
$path و $arg نیز پارامترهایی هستند برای معرفی صفحه یا صفحاتی که میخاهیم برای آنها "راهنمای کاربری" ایجاد کنیم.
یک hook میتواند به عنوان یک سنسور یا حسگر یا شنودگر برای رخ دادهای مختلف باشد و حس کند که یک رخ داد (event) باعث (trigger) یک عملیات (action) میشود.
هر رخ داد (event)ی در دروپال همچون حذف یک گره باعث (trigger) یک hook همچون (hook_delete) میشود.
یعنی اگر یک ماژولی از هوک hook_delete استفاده کند، این تابع هرجا گره ای حذف گردد (حذف گره رخ دهد) اجرا خواهد شد.
به عنوان آخرین مثال؛ تابع هوک ما بایست تعداد کل گره (node) ها را وقتی یک گره حذف میگردد فراخوانی کرده و یکی کم کند.
نظرات