مرحله ۳: اضافه کردن فایل Helper

مقدمه

در این مرحله یک فایل Helper به ماژول اضافه می‌کنیم. فایل‌های Helper در جوملا برای نگهداری منطق پیچیده استفاده می‌شوند تا کد اصلی ماژول ساده بماند.

در این مثال، از فایل Helper برای پیدا کردن نام کاربری کاربر وارد شده (Logged in) استفاده می‌کنیم و سپس "Hello <username>" را نمایش می‌دهیم. اگر کاربر وارد نشده باشد، عبارت "Hello Guest" نمایش داده می‌شود.

کد منبع این مرحله در mod_hello مرحله ۳ موجود است.

فایل Helper

طبق قرارداد جوملا، کلاس Helper ما به نام `HelloHelper` نامگذاری شده و در مسیر `src/Helper/HelloHelper.php` ذخیره می‌شود. بنابراین فضای نام (namespace) و تعریف کلاس باید به صورت زیر باشد:

namespace My\Module\Hello\Site\Helper;

class HelloHelper { ... }

 

در این فایل Helper نام کاربری کاربر وارد شده را می‌گیریم؛ در ادامه کد کامل کلاس Helper آمده است:

**mod_hello/src/Helper/HelloHelper.php**

 
<?php

namespace My\Module\Hello\Site\Helper;

\defined('_JEXEC') or die;

use Joomla\CMS\Factory;

class HelloHelper
{
    public static function getLoggedonUsername(string $default)
    {
        $user = Factory::getApplication()->getIdentity();
        if ($user->id !== 0)  // اگر کاربر وارد شده باشد
        {
            return $user->username;
        }
        else
        {
            return $default;
        }
    }
}

Dispatcher

دو روش برای دسترسی به کلاس HelloHelper داریم. در این مرحله مستقیماً با استفاده از نام‌فضا (Namespacing) به آن دسترسی پیدا می‌کنیم. در مراحل بعدی زمانی که به تزریق وابستگی (Dependency Injection) می‌پردازیم، کد را به روش جایگزین یعنی استفاده از کلاس HelperFactory تغییر خواهیم داد.

mod_hello/src/Dispatcher/Dispatcher.php

<?php
namespace My\Module\Hello\Site\Dispatcher;
\defined('_JEXEC') or die;

use Joomla\CMS\Dispatcher\DispatcherInterface;
use Joomla\CMS\Helper\ModuleHelper;
use My\Module\Hello\Site\Helper\HelloHelper;

class Dispatcher implements DispatcherInterface
{
    public function dispatch()
    {
        $username = HelloHelper::getLoggedonUsername('Guest');
        $hello = "Hello {$username}";
        require ModuleHelper::getLayoutPath('mod_hello');
    }
}
 

به‌روزرسانی فایل manifest

پوشه `/src` را قبلاً در لیست فایل‌هایی که جوملا باید پردازش کند قرار داده‌ایم، بنابراین فقط نسخه ماژول را افزایش می‌دهیم:

mod_hello/mod_hello.xml

 
<?xml version="1.0" encoding="UTF-8"?>
<extension type="module" client="site" method="upgrade">
    <name>Joomla module tutorial</name>
    <version>1.0.3</version>
    <author>me</author>
    <creationDate>today</creationDate>
    <description>Code used in the Joomla module tutorial</description>
    <namespace path="src">My\Module\Hello</namespace>
    <files>
        <folder module="mod_hello">services</folder>
        <folder>src</folder>
        <folder>tmpl</folder>
    </files>
</extension>

نصب

دوباره پوشه mod_hello را زیپ کرده و نسخه به‌روزشده ماژول را در جوملا نصب کنید.

وقتی به صفحه‌ای از سایت مراجعه کنید، اکنون باید ببینید:

- وقتی وارد شده‌اید، ماژول عبارت "Hello <نام کاربری شما>" را نمایش می‌دهد.

- وقتی وارد نشده‌اید، "Hello Guest" نمایش داده می‌شود.