نوشتن یک ماژول ساده در دروپال 8

By عرفان بناکار, 13 سپتامبر, 2017

دروپال 8 تغییرات زیادی داشته و نحوه ماژول نویسی در دروپال 8 نیز تغییر کرده. نوشتن ماژول برای دروپال 8 به شکل شی گرایی انجام میشه و از استاندارد PSR-4 پیروی میکند. در این مطلب قصد دارم آموزش نحوه نوشتن یک ماژول ساده یا ؛سلام دنیا؛ رو در دروپال 8 آموزش بدم. بنابراین با ادامه این مطلب همراه باشید.

شروع:

در شروع در نظر میگیریم که شما نحوه نصب و کار با دروپال 8 رو بلدید.

ایجاد پوشه ماژول:

پوشه بندی ماژول ها در دروپال 8 نسبت به گذشته تمیز تر شده. همه ماژول ها در فولدر module که در شاخه اصلی دروپال قرار داره هستند. در داخل این پوشه یک پوشه بسازید و نام اون رو مشخص کنید. من نام اون رو hello_world میزارم. این نام باید با استفاده از کاراکترهای مجاز ساخته بشه. بنابراین بهتره از حروف و اعداد و زیرخط (ـ) استفاده کنید.

drupal-module-directory-structure-1.png

تعریف پارامترها:

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

name: Hello World
type: module
description: Say Hello World
package: Custom
core: 8.x
  • name: Hello World: این عنوان ماژول ماست که در صفحه ماژول ها یا Extend در دروپال 8 نمایش داده میشه
  • type: module: این پارامتر به دروپال میگه که این کدهای نوشته شده یک ماژول در دروپاله.
  • description: Say Hello World: این پارامتر توضیحات ما در مورد ماژول هست که در صفحه Extend نمایش داده میشه
  • package: Custom: این پارامتر مشخص میکنه که ماژول ما در صفحه Extend در کدام دسته بندی قرار میگیرد.
  • core: 8.x: این پارامتر مشخص میکنه که ماژول نوشته شده با کدام نسخه از دروپال سازگار است.

بعد از ایجاد پوشه بالا و تعریف پارامترهای گفته شده در بخش Custom در صفحه Extend شما ماژول Hello World را مشاهده میکنید.

drupal-module-list.png

بنابراین ماژول را نصب و فعال میکنیم.

drupal-module-enabled.png

مسیر ماژول یا Module Route:

در مرحله بعد باید مشخص کنیم که ماژول ما در چه مسیری قابل دسترسی است. این کار با ایجاد فایل Route قابل انجام است. بنابراین در این مثال شما باید فایلی با نام hello_world.routing.yml ایجاد کنید و پارامترهای زیر را در آن قرار دهید

hello_world:
    path: /hello/world
    defaults:
        _controller: Drupal\hello_world\Controller\HelloWorldController::hello
    requirements:
        _permission: 'access content'
  • path: /hello/world: این پارامتر به دروپال میگوید که کدام مسیر برای دسترسی به ماژول نوشته شده ایجاد شده است.
  • _controller: Drupal\hello_world\Controller\HelloWorldController::hello: این متد یک فرآیند را در مسیر ماژول ما صدا میزند.
  • _permission: 'access content': این پارامتر مشخص میکند که تنها کاربرانی که میتوانند به محتواهای سایت دسترسی داشته باشند میتوانند محتوای ماژول ما را مشاهده کنند.

بعد از ایجاد فایل های بالا پوشه ماژول شما باید به شکل زیر باشد.

drupal-module-directory-structure-2.png

نوشتن ماژول:

بعد از تعریف پارامترهای لازم برای ماژول ما هنوز نیاز داریم که یک کارکرد به ماژول اضافه کنیم. کارکرد مورد نظر ما نمایش پیام Hello World است. بدین منظور ما نیاز داریم مقداری کد در قسمت Controller قرار دهیم. از دروپال 8 از استاندارد PSR-4 استفاده میشود بنابراین همه کدها باید در پوشه src قرار گیرند. پس اول این پوشه را بسازید بعد درون پوشه src یک پوشه به نام Controller بسازید در این پوشه کلاس های php تعریف و ساخته میشوند. درون این فولدر یک فایل با نام HelloWorldController.php ایجاد کنید و مقدار زیر را در آن تعریف کنید.

<?php

class HelloWorldController {

}

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

<?php

namespace Drupal\hello_world\Controller;

class HelloWorldController {

}

فراموش نکنید که در فایل route ما به دروپال گفتیم که متد hello را در کلاس Drupal\hello_world\Controller\HelloWorldController صدا بزند. بنابراین باید آن را نیز تعریف کنیم به شکل زیر

<?php

namespace Drupal\hello_world\Controller;

class HelloWorldController {
    public function hello() {

    }
}

همینطور که میدانید دروپال 8 بر پایه symfony نوشته شده بنابراین شی (object) زیر قابل بازگشت است: Symfony\Component\HttpFoundation\Response .اگرچه شما میتوانید یک آرایه که دروپال نیز آن را پردازش میکند در قالب نیز اضافه کنید اما برای صفحه ساده ما میتوانیم یک آرایه با کلیدهای #title و #markup بازگشت دهیم.

<?php

namespace Drupal\hello_world\Controller;

class HelloWorldController {
    public function hello() {
        return array(
                '#title' => 'Hello World!',
                '#markup' => 'Here is some content.',
            );
    }
}

مرحله پایانی:

قبل از اینکه صفحه ایجاد شده را ببینیم شما باید کش دروپال را پاکسازی کنید در غیر اینصورت با صفحه 404 مواجه میشوید. بنابراین از کنترل پنل مدیریت کش دروپال را پاک میکنیم.

drupal-clear-all-caches.png

حالا اگر صفحه http://my_custom_site.com/hello/world را مشاهده کنیم با صفحه زیر مواجه میشویم.

drupal-hello-world.png

وضعیت نهایی پوشه ماژول شما باید به این شکل باشد.

drupal-module-directory-structure-final.png

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