در ماژول‌های جوملا، فایل helper.php نقش مهمی در پردازش داده‌ها و ارائه اطلاعات به خروجی ماژول دارد. این فایل معمولاً حاوی یک کلاس کمکی (helper class) است که وظیفه آن به دست آوردن داده‌هایی است که قرار است در خروجی ماژول نمایش داده شوند. در ادامه با کارکردهای فایل helper و نحوه استفاده اژ آن در ماژول جوملا آشنا می شوید.

کارکردهای اصلی فایل helper.php در ماژول جوملا:

  • پردازش داده‌ها: این فایل می‌تواند شامل کدهای PHP باشد که داده‌ها را از منابع مختلف مانند بانک‌های اطلاعاتی بازیابی و پردازش می‌کنند.
  • اتصال به دیتابیس: در صورت نیاز، می‌توان کدهای اتصال به دیتابیس را در این فایل قرار داد تا داده‌های مورد نیاز را از دیتابیس بازیابی کند.
  • ارائه داده‌ها به خروجی: داده‌های پردازش شده در این فایل به سایر بخش‌های ماژول مانند فایل‌های تمپلیت (template) ارسال می‌شوند تا در خروجی نهایی نمایش داده شوند.

در مدل MVC (Model-View-Controller) که در ساختار ماژول‌های جوملا استفاده می‌شود، فایل helper.php به عنوان مدل (Model) عمل می‌کند و داده‌ها را برای نمایش در قالب (View) آماده می‌کند.

اضافه کردن فایل helper

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

در این تمرین ما از یک فایل helper برای یافتن نام کاربری کسی که در وبسایت لاگین Log-in کرده، استفاده می کنیم و سپس خروجی آنرا بصورت "<Hello "<username نمایش می دهیم. اگر کاربر لاگین نکرده باشد ، ما خروجی "Hello Guest" را نمایش می دهیم.

بر اساس مستندات جوملا ما فایل helper خود را HelloHelper می نامیم و آن را در src/helper/HelloHelper.php ذخیره می کنیم. این بدان معنی است که باید فضا-نام namespace و تعاریف کلاس ما به این صورت باشد:

namespace My\Module\Hello\Site\Helper;

class HelloHelper { ... }

قصدداریم در فایل helper نامکاربری کسی که در وبسایت log-in کرده است را بدست آوریم. در ادامه کد کامل کلاس helper آمده است:

<?php

namespace JoomlaBoy\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)  // found a logged-on user
        {
            return $user->username;
        }
        else
        {
            return $default;
        }
    }
}

dispatcher

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

<?php

namespace JoomlaBoy\Module\Hello\Site\Dispatcher;

\defined('_JEXEC') or die;

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

class Dispatcher implements DispatcherInterface
{
    public function dispatch()
    {
        $username = HelloHelper::getLoggedonUsername('Guest');

        $hello = "Hello {$username}";

        require ModuleHelper::getLayoutPath('mod_hello');
    }
}

بروزرسانی فایل مانیفست

آز آنجاکه پوشه و فایل helper در پوشه src قرار دارند نیاز به اضافه کردن جداگانه آنها در فایل mod_hello.xml نیست. تنها نیاز است نسخه افزونه مان را کمی بالا ببریم:

<?xml version="1.0" encoding="UTF-8"?>
<extension type="module" client="site" method="upgrade">
    <name>Joomla module tutorial</name>
    <version>5.3.0</version>
    <author>MasoudNicksefat</author>
    <authorEmail>این آدرس ایمیل توسط spambots حفاظت می شود. برای دیدن شما نیاز به جاوا اسکریپت دارید</authorEmail>
    <authorUrl>https://MasoudNicksefat.ir</authorUrl>
    <creationDate>1404/08/19</creationDate>
    <description>Code used in the Joomla module tutorial</description>
    <namespace path="src">JoomlaBoy\Module\Hello</namespace>
    <files>
        <folder module="mod_hello">services</folder>
        <folder>src</folder>
        <folder>tmpl</folder>
    </files>
</extension> 

نصب نسخه جدید

یک بار دیگر ، دایرکتوری mod_hello خود را zip کنید و ماژول به روز شده را در جوملا نصب کنید. وقتی به صفحه سایت می روید ، اکنون باید ببینید:

"<Hello "<username هنگام ورود به سیستم توسط ماژول نمایش داده می شود.

"Hello Guest" وقتی وارد سیستم نشده اید.