تقریبا همه افزونه های جوملا دارای بخش تنظیمات یا پیکربندی ( configuration یا به اختصار config ) هستند. در بخش پیکربندی ماژول های جوملا شما می توانید منبع و نحوه نمایش اطاعات را مشخص کنید. مسلما پیکربندی های هر ماژول به ماژول دیگر بنابر عملکرد آن فرق دارد. در این مرحله یک پارامتر پیکربندی به ماژول mod_hello اضافه می کنیم که سطح هدر پیام خوشآمدگویی "سلام" را مشخص می کند. با کلیک بر روی ماژول در Content / Site Modules ، یک سرپرست قادر خواهد بود نوع هدر را بین H3 و H6 تنظیم کند.
اگر توجه گرده باشید می دانید پارامترهایی در برگه Advanced فرم ویرایش ماژول mod_hello وجود دارد. اینها توسط جوملا به طور خودکار به هر ماژول اضافه می شوند.
حالا میخواهیم یک پارامتر پیکربندی به ماژول mod_hello اضافه کنیم تا بتوانیم نوع هدر پیام خوشآمدگویی "سلام" را بین H3 و H6 تنظیم کنیم
بروز رسانی فایل مانیفست
پیکربندی مورد نظر با اضافه کردن یک بخش به پرونده مانیفست پیاده سازی می شود:
<?xml version="1.0" encoding="UTF-8"?>
<extension type="module" client="site" method="upgrade">
<name>MOD_HELLO_NAME</name>
<version>1.0.5</version>
<author>me</author>
<creationDate>today</creationDate>
<description>MOD_HELLO_DESCRIPTION</description>
<namespace path="src">My\Module\Hello</namespace>
<files>
<folder module="mod_hello">services</folder>
<folder>src</folder>
<folder>tmpl</folder>
<folder>language</folder>
</files>
<config>
<fields name="params">
<fieldset name="basic">
<field
name="header"
type="list"
label="MOD_HELLO_HEADER_LEVEL"
>
<option value="h3">MOD_HELLO_HEADER_LEVEL_3</option>
<option value="h4">MOD_HELLO_HEADER_LEVEL_4</option>
<option value="h5">MOD_HELLO_HEADER_LEVEL_5</option>
<option value="h6">MOD_HELLO_HEADER_LEVEL_6</option>
</field>
</fieldset>
</fields>
</config>
</extension>
جوملا مکانیسمی برای تعریف فرم های HTML در XML فراهم می کند ، که می توانید در بخش های Forms و Ford Fields در مورد آن بخوانید. این شامل چارچوبی برای رسیدگی به پارامترهای فرم http post ، دقیقا برای ذخیره این موارد در دیتابیس (پایگاه داده) است.
همه اینها باعث می شود تا بدون نیاز به کپی کردن متون تکراری و زیاد ، فرم های جوملا را به سرعت توسعه دهید، کمی با اینها سر و کله بزنید نحوه کارشان دست تان می آید.
در این ماژول، بخش <config>
یک لیست کشویی در برگه basic تنظیمات ماژول اضافه می کند. این قسمت به بخشی از فرم تبدیل می شود و وقتی یک مدیر روی این ماژول در Content / Site Modules کلیک می کند ، نمایش داده می شود. (این فرم در واقع در Administrator/Component/Com_modules/Forms/Module.xml تعریف شده است).
برخی از قسمت های این بخش <config>
در زیر شرح داده شده است:
<"fields name="params>
منجر به ارسال داده ها (در پارامترهای HTTP POST) در آرایه ای به نام params می شود. این اطلاعات در ستونی به نام params در جدول دیتابیس modules__#
ارسال می شود، جایی که پارامترها به عنوان یک رشته JSON ذخیره می شوند.
<"fieldset name="basic>
باعث میشود که برگه ای به نام basic در تنظیمات ماژول mod_hello اضافه شود. اگر به جای آن Advanced را بنویسید، فیلد پیکربندی در زبانه Advanced ظاهر می شود.
داخل تگ <field>
چند atribute (خصیصه) وجود دارد:
"name="header
برای دریافت نام فیلد استفاده می شود. نام فیلد ما header است.
خصیصه "type="list
نوع فیلد را مشخص می کند. نوع فیلد ما list است. در اصل یک پنجره کشویی یااصطلاحا drop-down است.
خصیصه "label="MOD_HELLO_HEADER_LEVEL
لیبل فرم مان را مشخص می کند. همانطور که احتمالا متوجه شده اید، مقدار این خصیصه قابل ترجمه است. بعدا در فایل زبان، ثابت MOD_HELLO_HEADER_LEVEL اضافه و متغیر مورد نظرمان را باتوجه به زبان موردنظرمان می نویسیم.
از آنجاکه فیلد header باید لیستی از گزینه ها را نمایش دهد (در این ماژول قرار است لیست هدر ها از H3 تا H6 را نمایش دهد) پس هر کدام از گزینه های این لیست داخل یک تگ <option> مجزا نوشته می شود. خصیصه value مقدار هر گزینه را در خود نگه میدارد و همانطور که از ظاهرش پیداست، این گزینه ها قابل ترجمه هستند.
به دست آوردن مقدار پارامترها
هنگامی که جوملا کلاس Dispatcher شما را نمونه سازی می کند، به یک ساختار 3 پارامتری منتقل می شود:
public function __construct(\stdClass $module, CMSApplicationInterface $app, Input $input)
بیایید با جزئیات بیشتری به هر پارامتر نگاه کنیم.
پارامتر module
پارامتر module$
ساختاری با چندین فیلد مربوط به ماژول است و تعدادی از آنها را می توان در جدول پایگاه داده modules__#
پیدا کرد. به طور خاص، پارامترهای پیکربندی در فیلدی به نام params در یک رشته JSON نگهداری می شوند.
برای دسترسی به پارامترهای منفرد می توانید از کلاس رجیستری جوملا استفاده کنید که یک کلاس کاربردی برای دستکاری ساختارهای داده است.
در سازنده Dispatcher ما module$
را به عنوان یک متغیر نمونه ذخیره می کنیم و بعداً به پارامتر header با این کد دسترسی خواهیم داشت:
use Joomla\Registry\Registry;
$params = Registry($this->module->params);
// and in the tmpl file:
$h = $params->get('header', 'default');
برای جزئیات بیشتر به مستندات API رجیستری مراجعه کنید.
پارامتر Application
کلاس Application کلاس مرکزی برنامه جوملا است و دسترسی به آن ما را قادر می سازد تا به بسیاری از نمونه های کلاس دیگر جوملا مانند کلاس Language در مرحله آموزش قبلی دسترسی داشته باشیم.
در سازنده Dispatcher ما آن را به عنوان یک متغیر نمونه app$
ذخیره می کنیم و سپس از آن برای جایگزینی خط استفاده می کنیم:
$language = Factory::getApplication()->getLanguage();
با:
$language = $this->app->getLanguage();
پارمتر input
این پارامتر می تواند برای دسترسی به پارامترهای URL ، همانطور که در مستندات input توضیح داده شده است ، استفاده شود ، اما نیازی به استفاده از آن در mod_hello نیست.
بروزرسانی فایل dispatcher
<?php
namespace JoomlaBoy\Module\Hello\Site\Dispatcher;
\defined('_JEXEC') or die;
use Joomla\CMS\Dispatcher\DispatcherInterface;
use Joomla\CMS\Helper\ModuleHelper;
use Joomla\CMS\Factory;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Application\CMSApplicationInterface;
use Joomla\Input\Input;
use Joomla\Registry\Registry;
use JoomlaBoy\Module\Hello\Site\Helper\HelloHelper;
class Dispatcher implements DispatcherInterface
{
protected $module;
protected $app;
public function __construct(\stdClass $module, CMSApplicationInterface $app, Input $input)
{
$this->module = $module;
$this->app = $app;
}
public function dispatch()
{
$language = $this->app->getLanguage();
$language->load('mod_hello', JPATH_BASE . '/modules/mod_hello');
$username = HelloHelper::getLoggedonUsername('Guest');
$hello = Text::_('MOD_HELLO_GREETING') . $username;
$params = new Registry($this->module->params);
require ModuleHelper::getLayoutPath('mod_hello');
}
}
بروزرسانی فایل tmpl
به یاد داشته باشید که فایل tmpl در همان زمینه تابع dispatch() اجرا می شود، بنابراین ما می توانیم به متغیر params$ که در آنجا تعریف کرده ایم دسترسی داشته باشیم.
<?php
defined('_JEXEC') or die;
$h = $params->get('header', 'h4');
$greeting = "<{$h}>{$hello}</{$h}>"
?>
<?php echo $greeting; ?>
بروزرسانی فایل زبان
; language strings used inside mod_hello
MOD_HELLO_NAME="Joomla Module Tutorial"
MOD_HELLO_DESCRIPTION="Source code for the Joomla module tutorial"
MOD_HELLO_GREETING="Hello "
MOD_HELLO_HEADER_LEVEL="Header level of greeting"
MOD_HELLO_HEADER_LEVEL_3="Header level 3"
MOD_HELLO_HEADER_LEVEL_4="Header level 4"
MOD_HELLO_HEADER_LEVEL_5="Header level 5"
MOD_HELLO_HEADER_LEVEL_6="Header level 6"
پس از نصب فایل ZIP به روش معمول ، می توانید به ماژول های محتوای / سایت Administrator بروید و برای ویرایش آن روی ماژول Mod_Hello کلیک کنید. این به شما امکان می دهد سطح هدر را بین H3 و H6 تغییر دهید. پس از ذخیره تغییرات ، یک صفحه سایت را نمایش داده و از DevTools مرورگر خود برای بررسی عنصر HTML استفاده کنید.
جدول های Extensions and Modules
اگر به دیتابیس سرک کشیده باشید احتمالا متوجه شده اید که mod_hello هم در جدول پایگاه داده extensions__# و هم در modules____# ظاهر می شود و ممکن است تعجب کنید که چرا.
جدول extensions__# حاوی رکوردهایی برای همه افزونه هایی است که در جوملا نصب شده اند. فقط یک رکورد برای هر افزونه در این جدول وجود خواهد داشت.
جدول modules____# حاوی رکوردهایی برای هر ماژول است که برای نمایش در قسمت مدیریت یا کاربری سایت نصب شده است، یک رکورد برای هر ماژول. می توانید چندین نمونه از mod_hello (یا هر ماژول) ایجاد کنید تا در موقعیت های مختلف (یا حتی یکسان) قالب در صفحات وب ظاهر شوند. سپس چندین نمونه از آن ماژول را در جدول پایگاه داده modules____# خواهید دید.
هنگامی که جوملا mod_hello را نصب میکند، نه تنها رکورد extensions__# را ایجاد میکند، بلکه سعی میکند با ایجاد یک رکورد modules____# ، کار را برای شما آسان کند. فرض بر این است که چون در حال نصب این ماژول هستید، می خواهید از آن در یک صفحه وب استفاده کنید. البته، نمیداند میخواهید آن را کجا قرار دهید (موقعیت قالب) و مطمئن نیست که واقعاً آن را در یک صفحه میخواهید، بنابراین آن را در حالت منتشرنشده ایجاد میکند و انتساب منو روی «بدون صفحات» تنظیم شده است.
پیکربندی که ما در اینجا پیاده سازی کرده ایم به پیکربندی نمونه های ماژول جداگانه مربوط می شود. بنابراین میتوانید چندین نمونه از mod_hello را با Content / Site Modules ایجاد کنید که هر کدام پارامترهای پیکربندی خاص خود را دارند.