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

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

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

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

پیش از این در مقاله «برنامه نویسی ماژول دروپال در 5 گام ساده»، پیاده سازی یک ماژول ساده در دروپال 7 را بررسی کردیم. در مقاله جاری نیز همان کار را انجام می دهیم با این تفاوت که این بار ماژول دروپال 8 می نویسم. بنابراین مطالعه مقاله ذکر شده نیز می تواند برای مقایسه تفاوت های برنامه نویسی در هر دو نسخه دروپال، به خواننده کمک کند. پیش از این نیز، در دروپالیکا مقالات دیگری در مورد برنامه نویسی در دروپال 7، منتشر کرده ام که می توانید آنها در صفحه «برنامه نویسی دروپال» مطالعه کنید.

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

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

در اینجا برای نمونه همان نامی را که در آموزش ماژول بری دروپال 7 استفاده کردم، یعنی drupalika_module را به کار می برم.

ساختار فایل ها و فولدر های دروپال 8 تغییر زیادی نسبت به دروپال 7 و دروپال 6 داشته است. تمام فایل های مربوط به هسته دروپال در فولدر core قرار گرفته اند و بر خلاف نسخه های قبلی دروپال، فولدر modules که در فولدر اصلی دروپال قرار دارد، برای ماژول هایی که دانلود می کنیم و همچنین ماژول هایی که می نویسیم اختصاص یافته است. بنابراین می توانیم فولدر ماژولی که داریم می نویسیم را در اینجا قرار بدهیم.

البته پیش از این در دروپال 6 و دروپال 7 می توانستیم ماژول ها را در مسیر sites/all/modules قرار بدهیم. در دروپال 8 هنوز هم می توانیم این کار را انجام دهیم. فعلا ما از همین روش جدید استفاده می کنیم که ماژول خود را در فولدر modules که در ریشه دروپال قرار دارد، بگذاریم. بنابراین به فولدر modules رفته و یک فولدر جدید به نامی که برای ماژول انتخاب کردیم (در اینجا drupalika_module)  می سازیم.

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

برای اینکه دروپال ماژول ما را تشخیص بدهد باید یک فایل با پسوند .info.yml در فولدر ماژول داشته باشیم. در دروپال 7 این فایل پسوند .info داشت. اطلاعات این فایل در دروپال های 6 و 7 و 8 کم و بیش یکسان هستند. ولی در دروپال 8 قالب این اطلاعات کمی متفاوت است.

بنابراین باید یک فایل که نام با نام ماژول شروع شده و به پسوند .info.yml ختم می شود در فولدر ماژول بسازیم. برای نمونه در اینجا که نام ماژول ما drupalika_module است باید نام فایل به این صورت باشد:

drupalika_module.info.yml

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

name: Drupal 8 Test Module
description: 'This module is developed by drupalika.'
package: Drupalika
type: module
version: 1.0
core: 8.x

همانطور که می بینید، اطلاعات مشابهی را در اینجا قرار می دهیم ولی در گذشته به جای : از = استفاده می کردیم. توضیح اطلاعاتی که در این فایل است را در جدول زیر مطالعه می کنید:

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

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

ماژول دروپال 8 در صفحه مدیریت ماژول های دروپال

گام سوم: ایجاد فایل composer.json

برای تعریف ماژول باید یک فایل به نام composer.json نیز به فولدر ماژول اضافه کنیم. در صورتی که ماژول دارای وابستگی به کتابخانه خارجی است، می توان  آن وابستگی ها را در این فایل را معرفی نمود. جامعه توسعه دهندگان PHP از Composer برای آنچه که مدیریت پکیج (Package Management)  می نامیم، استفاده می کنند. به همین دلیل دروپال نیز از نسخه 8 خود با این نظام خود را هماهنگ کرده است.

فعلا خیلی ساده کد زیر را درون این فایل قرار می دهیم:

{
    "name": "drupal/drupalika_module",
    "description": "This module is developed by drupalika.",
    "type": "drupal-module",
}

کلید های name و description برای نام و توضیح ماژول هستند. کلید type مشخص می کند که پکیج ما از چه نوعی است که می تواند یکی از انواع زیر باشد:

  • drupal-module
  • drupal-theme
  • drupal-library
  • drupal-profile
  • drupal-drush

چون ما در حال توسعه ماژول هستیم، نوع را drupal-module قرار دادیم.

اینها حداقل هایی بودند که باید در فایل composer.json وجود داشته باشد.

گام چهارم: افزودن کد های تولید صفحه به ماژول

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

یک دایرکتوری به نام src در ماژول خود درست کنید. در این دایرکتوری، یک دایرکتوری به نام Controller بسازید. حالا در دایرکتوری جدید یعنی Controller یک فایل با پسوند php ایجاد می کنیم که نام آن به Controller ختم می شود. مثلا من نام فایل را DrupalikaDevelopController.php قرار می دهم.

برای تولید محتوای صفحه ما باید یک کلاس بنویسیم که حاوی تابع content باشد. این کلاس در اینجا باید از کلاس ControllerBase ارث بری کند. یا به اصطلاح دقیقتر کلاس جدید ما باید کلاس ControllerBase را توسعه دهد (extends).
بنابراین یک نکته مثبت در توسعه ماژول در دروپال 8 این است که هسته دروپال در مسیر شی گرایی قدم گذاشته است. نام کلاس با نام فایل منطبق است مثلا در اینجا ما کلاس DrupalikaDevelopController را می نویسیم که در فایل DrupalikaDevelopController.php قرار می گیرد.

کد نمونه ما برای این کلاس به صورت زیر است:

namespace Drupal\drupalika_module\Controller;

use Drupal\Core\Controller\ControllerBase;

class DrupalikaDevelopController extends ControllerBase {
	
  public function content() {
    return array(
        '#type' => 'markup',
        '#markup' => t('First Drupal 8 module developed by Drupalika!'),
    );
  }
  
}

کد را هم درون تگ های <?php و ?> قرار می دهیم.

پیش نیاز این کار این است که شما با مفاهیم برنامه نویسی شی گرا به صورت عمومی و روش ها و تکنیک های برنامه نویسی Object Oriented در زبان PHP آشنا باشید.

خط اول این فایل، معرفی namespace ای است که کلاس جدید ما در آن قرار می گیرد.

خط دوم مشخص کرده ایم که در این فایل از چه namespace دیگری استفاده کرده ایم. این کار در توسعه ماژول در دروپال 8 بسیار مهم است. چون شما معمولا از کلاس های هسته و یا کامپوننت های دیگر مثل سیمفونی 2 در دروپال 8 استفاده می کنید.

خط سوم کلاسی که توضیح دادیم را تعریف می کنیم. درون این کلاس یک تابع contnet باید باشد که مسئول نهایی تولید صفحه است و خروجی آن توسط دروپال برای نمایش صفحه استفاده می شود. بنابراین هر چه کد باید برای تولید صفحه اجرا شود در این تابع قرار می گیرد. خروجی این تابع مهم است. در اینجا به روش سنتی دروپال، یک آرایه renderable درست کرده و برگردانده ایم که برای نمایش یک عبارت روی صفحه به کار می رود.

گام پنجم: افزودن یک صفحه جدید در سایت از طریق ماژول

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

http://drupalika.org/drupalika/develop

قسمتی از آدرس که بعد از آدرس اصلی سایت می آید، مسیر صفحه است. در اینجا مسیر صفحه drupalika/develop است. بنابراین ما باید این مسیر جدید را به دروپال معرفی کنیم.

قبلا در دروپال 6 و  دروپال با پیاده سازی hook_menu در ماژول خود، این کار را انجام می دادیم ولی در دروپال 8 می توانیم با استفاده از روش متفاوتی این کار را انجام بدهیم. برای این منظور اول باید یک فایل با پسوند routing.yml به ماژول خود اضافه کنیم. نام این فایل همان نام ماژول است. بنابراین برای ماژولی که در این مقاله می نویسم باید اسم این فایل drupalika_module.routing.yml باشد.

نمونه کدی که در این فایل می نویسم به صورت زیر است:

drupalika_module_develop:
  path: '/drupalika/develop'
  defaults:
    _controller: '\Drupal\drupalika_module\Controller\DrupalikaDevelopController::content'
    _title: 'Drupalika Module'
  requirements:
    _access: 'TRUE'
    

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

مثلا در یک مسیریابی که در این فایل می بینید، مشخص کرده این که مسیر(path) عبارت از drupalika/develop است. در مقابل _controller مسیر کنترلر مورد نظر را مشخص کرده ایم. در قسمت _requirements یک خط اضافه کرده ایم که دسترسی این صفحه را مشخص کنیم. کلید _access را برابر TRUE قرار داده ایم که صفحه عموما در دسترس باشد.

گام ششم: نصب ماژول

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

افزودن یک صفحه جدید در سایت از طریق ماژول به دروپال 8

نظرات

ایجاد فایل composer.json (گام سوم) برای تعریف ماژول ضروری نیست.

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

ارسال نظر