برنامه نویسی ماژول دروپال در 5 گام ساده

برنامه نویسی ماژول دروپال در 5 گام

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

این مطلب سطح مقدماتی دارد و حداقل نیاز آن، آشنائی با دروپال و زبان برنامه نویسی php است. این مطلب بر اساس آخرین نسخه دروپال یعنی دروپال 7 نوشته شده است. اگر چه نوشتن ماژول ساده ای مانند آنچه در این محتوا بیان شده است، در دروپال 6 نیز تفاوت چندانی ندارد. برای نوشتن ماژول به یک ادیتور مثل notepad++ نیاز دارید.

این ماژول دارای یک صفحه با آدرس drupalika/develop است که در آن یک رشته به کاربر نمایش داده می شود.

گام اول: تعیین نام ماژول و ایجاد فولدر آن

هر ماژول یک نام دارد که توسط سیستم دروپال به آن نام شناخته می شود. این نام باید با حروف کوچک لاتین(lowercase) نوشته شود. شروع آن باید با یک حرف لاتین باشد و در ادامه آن استفاده از زیرخط (underline) و کاراکتر های عددی بلامانع است.

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

برای نمونه در اینجا نام drupalika_module را برای این ماژول انتخاب می کنیم.

پس از اینکه نام مورد نظر خود را برای نوشتن ماژول انتخاب کردید، یک فولدر جدید در مسیر زیر از فایل های سایت دروپالی خود بسازید.

sites/all/modules

نام این فولدر را به نامی که انتخاب کرده اید، تغییر دهید. بنابراین تاکنون باید فولدری با مسیر زیر داشته باشیم:

sites/all/modules/drupalika_module

گام دوم: شناساندن ماژول به دروپال

در این مرحله برای معرفی و شناساندن ماژول به دروپال، باید یک فایل حاوی اطلاعات ماژول ایجاد کنیم و در فولدر ماژول قرار بدهیم.

نام این فایل باید با نام ماژول که در مرحله قبل تعیین کردیم یکسان باشد و پسوند آن نیز .info باشد. بنابراین در نمونه ای که کار کردیم باید فایل drupalika_module.info را در فولدر drupalika_module درست کنیم.

برای شروع، در این فایل متن زیر را قرار می دهیم:

name = Drupalika First Module
description = This is a short description about module
core = 7.x
package = Drupalika

این اطلاعات شامل name، description،core و package می شود:

مقداری که مقابل name قرار می گیرد، نامی است که مدیر سایت در لیست ماژول ها در صفحه مدیریت ماژول های سایت مشاهده می کند. این نام می تواند حاوی فاصله نیز باشد. name
مقداری که در مقابل description قرار می گیرد، توضیح خلاصه ای از ماژول و کارکرد آن است که فقط جهت نمایش به مدیر سایت در لیست ماژول ها در صفحه مدیریت ماژول های سایت است. description
مقداری که مقابل core قرار می گیرد، شماره نسخه ای از دروپال را معین می کند که این ماژول برای آن نوشته شده است. در اینجا مقدار 7.x نشان می دهد که این ماژول برای تمام نسخه های دروپال 7 کار می کند. core
مقداری که مقابل package قرار می گیرد، نام گروه ماژول است. در صفحه مدیریت ماژول ها در سایت، ماژول ها در گروه هایی نمایش داده می شوند. در اینجا این گروه را تعیین می کنیم. package

بنابراین تا اینجا، در فولدر ماژول، یک فایل حاوی اطلاعات ماژول با پسوند .info داریم.
نام ماژول در لیست ماژولهای دروپال

گام سوم: ایجاد فایل حاوی کد های PHP

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

این فایل که اصلی ترین فایل حاوی کد های ماژول است، باید دارای پسوند .module باشد. بنابراین در نمونه ای که کار کردیم باید چنین فایلی را به فولدر ماژول خود اضافه کنیم:

drupalika_module.module

در این فایل، تگ شروع کننده کد های PHP را می نویسم:

<?php

فایل های ماژول

گام چهارم: ایجاد یک صفحه در سایت با برنامه نویسی PHP

در این مرحله، باید امکاناتی که از ماژول توقع داریم را بر اساس Drupal API و با زبان برنامه نویسی PHP مشخص کنیم. در این ماژول تصمیم داریم یک صفحه جدید به سایت اضافه کنیم که آدرس آن drupalika/develop است. مثلا در این سایت چنین آدرسی داشته باشیم:

http://drupalika.org/drupalika/develop

سیستم پیاده سازی ماژول دروپال بر اساس پیاده سازی hook ها جهت توسعه امکانات دروپال استوار است. در اینجا برای اینکه یک آدرس جدید را به دروپال معرفی کنیم باید hook_menu را پیاده سازی کنیم. این به این معنی می باشد که ما باید تابعی در کد های ماژول خود داشته باشیم که نام آن drupalika_module_menu است. اگر دقت کنید به جای رشته hook نام ماژول خود را قرار داده ایم. بر اساس Drupal API این تابع باید یک آرایه از اطلاعات مربوط به آدرس های جدیدی که می خواهیم به سایت دروپالی اضافه شود، برگرداند.

برای نمونه به پیاده سازی این تابع در ماژول drupalika_module توجه نمائید:

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

در این تابع یک آرایه ($items) تعریف کرده ایم که اطلاعات آدرس های ماژول را در آن نگهداری می کنیم و در نهایت آن را از تابع برمی گردانیم. زمانی که این ماژول نصب می شود، دروپال این تابع را فراخوانی می کند و آدرس هایی که معرفی کرده اید را در سیستم ثبت می کند (در دیتابیس ذخیره می کند).

ایندکس های این آرایه، آدرس هایی که ماژول ثبت می کند هستند. مقدار هر خانه از این آرایه یا مقدار هر کلید، خود یک آرایه است که اطلاعات آن آدرس را مشخص می کند. برای نمونه

  $items['drupalika/develop'] = array(
    'title' => 'Developing a new module',
    'page callback' => 'drupalika_develop_page',
    'access callback' => TRUE,
  );

در این کد، آدرس مورد نظر ما یعنی drupalika/develop معرفی شده است. جدول زیر توضیح بیشتری در مورد ایندکس های آرایه اطلاعات یک آدرس می دهد:

عنوان صفحه را مشخص می کند. title
نام تابعی که تولید محتوای صفحه را بر عهده دارد. page callback
نحوه دسترسی به صفحه را مشخص می کند. فعلا برای اینکه صفحه به صورت عمومی در دسترس همه قرار دارد، مقدار TRUE را برای آن در نظر گرفته ایم. access callback

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

function drupalika_develop_page() {
  return "This is the content of drupalika/develop page.";
}

در این نمونه ساده، ما فقط یک رشته را برگردانده ایم. شما می توانید هر کد HTML دیگر را تولید کنید و از این تابع برگردانید.

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

گام پنجم: نصب ماژول در دروپال

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

پس از نصب ماژول، آدرس آن را در مرورگر وارد کرده و اینتر می کنیم تا صفحه را ملاحظه کنیم.
مشاهده صفحه ماژول در مرورگر

نظرات

سلام مهندس
بسيار عالي و مرحله به مرحله توضيح داديد و واقعا جاي تقديرو تشکر دارد.
جسارتا ميخواستم عرض کنم برنامه نويسي ماژول ادامه دارد يا به همين مقدار بسنده شده است؟
منظورم اينه که بعد از ايجاد يک صفحه با php‌افزودن قابليتهاي بيشتر را هم آموزش خواهيد داد؟
من خيلي تو سايت هاي مختلف جستجو کردم اين موضوع و اين نوع آموزش اصلا وجود ندارد اگه امکانش هست همين بحث را ادامه بديد تا مرحله ماژول نويسي حرفه اي
البته پيشاپيش از زحمتي که ميکشيد کمال قدرداني را دارم و کاري از دست ما برنمياد غير از دعاي خير
موفق و پيروز باشيد

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

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

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

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

تصویر admin
علی آقا! در واقع حرف برای گفتن در حوزه برنامه نویسی دروپال زیاد است. منتها هنوز استقبال خوبی از این قسمت نشده است.

وقتی سایت شما رو دیدم نمیدونید چقد خوشحال شدم.
سایت های فارسی خیلی کمی وجود دارن که در مورد دروپال مطلب مینویسن.بخصوص ماژول نویسی دروپال که اصلا پیدا نمیشه.
با آرزوی موفقیت برای شما و گسترش بخش برنامه نویسی دوپال سایتتون!

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

واقا سایتتون عالییه

تصویر admin
ممنون آقا میثم. لطف دارید.

تشکر بابت این قسمت ... خیلی خوبه اگه ادامه بدید ... ماژول نویسی خیلی مهمه و خیلی بهش نیاز دارم ... مرسی

تصویر admin
عی آقا! حتما این دست مطالب را ادامه می دهیم. البته شما نیز پیشنهاد بدهید که در مورد ماژول نویسی چه موضوعاتی مهم هستند برای شما و یا فکر می کنید چه ابهماتی وجود دارد که بهتر است شفاف شود.

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

تصویر admin
علی آقا! از اینکه می بینم این دست مطالب هم، طرفدار دارد، خوشحال می شوم. در حقیقت چون خودم به ماژول نویسی دروپال علاقه زیادی دارم و تقریبا هر هفته با آن سر و کار دارم، بیشتر به این بخش علاقه مند هستم. حتما بررسی می کنم که ماژول مناسبی پیدا کنم و به صورت یک case study آن را مورد مطالعه قرار بدهیم. این جور کارها در عمل نکات بیشتری را شفاف می کند.

با سلام
واقعا عالی هستش
لطفا ادامه بدید
با تشکر

تصویر admin
ستار خان، حتما سعی می کنم به زودی مطالب بیشتری در مورد ماژول نویسی در سایت منتشر کنم.

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

سلام خسته نباشید
مطالبتون خیلی عالیه
من با دروپال نسخه 7.20 کار میکنم و در دروپال ابتدایی هستم. متاسفانه تمام مراحل این بخش ماژول نویسی که در همین صفحه توضیح دادین رو وقتی انجام دادم وقتی آدرس drupalika/develop تست میکنم صفحه مورد نظر رو نشون نمیده. باید چیکار کنم؟ آیا ماژول دیگه ای باید فعال باشه!

تصویر admin
اگر کد ماژول را دقیق نوشته اید و اطمینان دارید که مشکلی ندارد. باید cache های دروپال را پاک کنید. برای این کار باید به صفحه admin/config/development/performance بروید و روی دکمه اول که clear all caches است کلیک کنید. سپس احتمالا مشکل حل می شود.

با عرض سلام و خسته نباشید،
از مطالب جالبتون خیلی خیلی ممنونم و از اینکه ادامش میدین خیلی خوشحالم.

اگه امکانش باشه یه راهنمایی درمورد نوشتن ماژول برای ارسال SMS انبوه از سایت که لیست نفرات و شماره های آنها در سایت ثبت و گروهبندی شده ،بدین.

البته من یه کد php نمونه که به وب سرویس پنل وصل میشه رو گرفتم و اونجا با قرار دادن لیست شماره موبایل ها در یه آرایه و ست کردن یوزر،پسورد ،متن پیغام و شماره ارسال کننده SMS میتونه در یه حلقه پیغام رو ارسال کنه و بعدش هم چک میکنه ببینه درست ارسال شد یا نه؟
اگه لازم باشه فایل رو براتون میفرستم.
همیشه شاد و سربلند باشید

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

درود بر شما،
من چند سال جوملا کار کردم ولی از هیچ آموزشی نتونستم ماژول بنویسم، البته وقت هم زیاد صرف نکردم.
ولی با آموزش شما موفق شدم!!!
واقعاً مفید و ساده بود.

ممنونم

سلام و خسته نباشید , من دانشجوی ای تی هستم و پروژ ه ی درس مهندسی ای تی بهمون افزونه نویسی دروپال دادند , من دروپال 7 رو به صورت لوکال هاست نصب کردم و می خوام شروع کنم برای نوشتن ماژول , با زبان php اصلا آشنایی ندارم و ممنون می شم کمک کنید
مثلا میشه بگید برای شروع باید چه نرم افزارهایی داشته باشم ؟
ایا بایدنرم افزار php رو نصب کنم ؟؟؟؟
این کدهایی که شما نوشتید در قسمت بالا کجا تایپ شده اند ؟؟
در محیط برنامه نویسی php به صورت جداگانه یا در خود وبسایت دروپال قسمت php ؟؟؟؟؟
ممنون می شم راهنمایی کنید تایم کمی دارم

سلام .روز بخیر
در یک ماژول اگر برای کاهش حجم تصاویر از یک سری پیشوند استفاده شود، این پیشوند ها بهتر است با آندرلاین از نام عکس جدا شود یا با "خط تیره"؟
و استفاده از هر "دش" یا "آندرلاین" تاثیری در سئو دارد یا خیر؟
در این مثال منظور جدا شدن
sp1
از green-apple
است

مثال:

ارسال نظر