آموزش برنامه نویسی ماژول برای WHMCS - مقدماتی

کدنویسی WHMCS به زبان PHP - برنامه نویسی ماژولار
کدنویسی WHMCS به زبان PHP - برنامه نویسی ماژولار

قبل از خوندن این پست حتما باید با whmcs و نحوه عملکردش آشنایی داشته باشین. آشنایی و تجربه لاراول هم مزیت حساب میشه که کارتونو جلو میندازه. خب میریم سر آموزش:

معرفی متدهای ماژول نویسی WHMCS

توی این قسمت از آموزش من چندین نمونه از کدهایی که لازمه کدنویسی ماژول میباشد رو معرفی میکنم :

  • متد config : کار این کد معرفی تنظیمات ماژول میباشد
  • متد activate : با استفاده از این کد ما میاییم ماژولی که کدنویسی کردیم رو با استفاده از گزینه فعال سازی از بخش تنظیمات فعال میکنیم
  • متد deactivate : با استفاده از این کد ما میاییم ماژولی که کدنویسی کردیم رو باستفاده از گزینه غیرفعال سازی از بخش تنظیمات غیرفعال میکنیم
  • متد output : این کد نیز مربوط به خروجی ماژول میباشد که اگر بخواییم بخش تنظیمات برای ماژول رو کدنویسی کنیم باید داخل فانکشن این تابع کدنویسی کنیم.

خب تا اینجای کار فعلا با همین متدها میتونیم ماژول رو کدنویسی کنیم. پس من زیاد شلوغ نمیکنم بحث رو تا قابل درک باشه.

فایل بندی پروژه

اصولا برای کدنویسی یک ماژول با توجه به نوع و حجم ماژول تعداد فایل ها نیز متفاوت هست ولی بیس کدنویسی بدین صورت هست که ما ابتدا باید یک پوشه با نام معین برای ماژول خود بسازیم و سپس یک فایل با پسوند php با همان نام پوشه ایجاد کنیم تا کدنویسی رو داخلش شروع کنیم. بعنوان مثال من میخوام نام پوشه ماژول به نام HelmaModule باشه پس باید داخل این پوشه یک فایل با پسوند php با نام HelmaModule.php بسازم که داخل این فایل شروع به کدنویسی کنم. حال اگر ماژول ما دارای هوک هم هست باید یک فایل دیگر با نام Hooks.php بسازیم.

شروع کدنویسی

خب بریم سراغ کار اصلیمون :

من کار رو از همین ابتدای کار با مثال شروع میکنم.

ما میخواییم یک ماژول بنویسیم که در تنظیمات WHMCS قابل نمایش و فعال سازی باشه و دارای قسمت تنظیماتی باشه که داخل یک فیلد هست که نام ماژول رو بهش میدیم و ذخیره میکنیم. من اسم ماژول رو میزارم : hlmfield ، خب پس یک پوشه با همین نام میسازیم و داخل پوشه یک فایل با نام hlmfield.php ایجاد میکنیم.

همانطور که در بالا عرض کردم با استفاده از فانکشن config کار رو شروع میکنیم تا به معرفی ماژول بپردازیم :

این فانکش شامل موارد زیر میباشد :

  1. آیتم name : نام ماژول
  2. آیتم description : معرفی ماژول
  3. آیتم version : نسخه ماژول
  4. آیتم author : طراح ماژول
  5. آیتم language : زبان ماژول

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

function hlmfield_config() {
    $configarray = array(
    &quotname&quot => &quotماژول من&quot,
    &quotdescription&quot => &quotاین یک ماژول ساده میباشد. که توسط آموزش Reza Karimi در ویرگول ساخته شده است.&quot,
    &quotversion&quot => &quot1.0&quot,
    &quotauthor&quot => &quotReza Karimi&quot,
    &quotlanguage&quot => &quotPersian&quot,
);
    return $configarray;
}

توجه : تمام فانکشن های نوشته شده باید با نام پوشه شروع شوند

خب همانطور که دیدید در مثال بالا من قسمت تنظیمات و معرفی ماژول رو کدنویسی کردم. پس کدهایی ابتدایی یک افزونه با مثال بالا شروع میشه.

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

پس کدهای ما بصورت زیر میشود :


function hlmfield_activate()
{
if (!Capsule::schema()->hasTable(&quothlmfield&quot)) {
Capsule::schema()->create(&quothlmfield&quot, function ($table) {
$table->increments(&quotid&quot)->autoIncrement();
$table->text(&quotfield&quot);
});
}
}

کد بالارو به ماژول اضافه میکنیم و وقتی روی فعال سازی ماژول در تنظیمات whmcs کلیک میکنیم کد بالا اجرا میشود. پس به هنگام کلیک کاربر روی گزینه جدولی با نام hlmfield در دیتابیس ساخته میشود.

در مرحله بعدی ما فانکشن مربوط به غیرفعال سازی افزونه را مینویسیم که این فانکشن نیز با متد deactivate کدنویسی میشود. بدین ترتیب کد ما به صورت زیر میباشد :

function hlmfield_deactivate() {
Capsule::schema()->dropIfExists(&quothlmfield&quot);
}

در واقع ما با استفاده از فانکشن بالا هم افزونه را غیرفعال کرده و هم جدول ساخته شده در دیتابیس را حذف میکنیم.

اکنون زمان آن رسیده است که خروجی افزونه خود و یا همان مدیریت افزونه را کدنویسی کنیم.

جهت نمایش کدهای نوشته شده در مدیریت باید از تابع output در فانکشن طبق نمونه های بالا استفاده کنیم، بدین ترتیب :

function hlmfield_output($vars) {

}

بنابراین برای اینکه در مدیریت افزونه خود خروجی مشاهده کنیم باید کدهای خود را داخل فانکشن بالا بنویسیم.

توجه : از آنجایی که گفته بودم افزونه ما یک افزونه ساده دارای یک فیلد برای وارد کردن نام میباشد من ادامه آموزش را طبق چیزی که تعیین کرده بودیم پیش میبرم.

برای ساخت یک فیلد که بتونیم داخلش یک مقدار وارد کرده و در دیتابیس وارد کنیم ما به یک فرم html و چند خط کد php نیاز داریم.

ابتدا شروع به نوشتن فرم html میکنیم، و از آنجایی که من این کد رو نوشتم بصورت آماده در اینجا قرار میدم.

<form action=&quotaddonmodules.php?module=hlmfield&quot method=&quotPOST&quot>
    <input type=&quottext&quot name=&quothlm_field&quot value=&quot&quot />
    <input type=&quotsubmit&quot name=&quotsubmitform_hlmfield&quot value=&quotذخیره&quot />
</form>

من در فرم بالا که از نوع متد ارسالی هست اومدم یک فیلد با نوع text و یک فیلد با نوع submit نوشتم که بتونیم یک مقدار وارد و در دیتابیس ذخیره کنیم.

خب حالا چون فایل ما از نوع php هست باید کدهای html بالارو داخل متد echo بنویسیم، بصورت زیر :

echo '
<form action=&quotaddonmodules.php?module=hlmfield&quot method=&quotPOST&quot>     <input type=&quottext&quot name=&quothlm_field&quot value=&quot&quot />     <input type=&quotsubmit&quot name=&quotsubmitform_hlmfield&quot value=&quotذخیره&quot /> </form>
';

خب ما تا اینجای کار بخش html کار رو نوشتیم و اکنون زمان آن هست که بخش php رو بنویسیم تا مشخصات به دیتابیس ارسال و در آن جدول مربوطه ذخیره شود.

توجه : من توی کار جهت تلف نشدن زمان از کدنویسی css کار خودداری کردم.

خب کدهای نوشته شده تا اینجای کار بصورت زیر میباشد :

<?php
if (!defined(&quotWHMCS&quot)) {
die(&quotThis file cannot be accessed directly&quot);
}
use Illuminate\Database\Capsule\Manager as Capsule;

function hlmfield_config() {
$configarray = array( &quotname&quot => &quotماژول من&quot, 
&quotdescription&quot => &quotاین یک ماژول ساده میباشد. که توسط آموزش Reza Karimi در ویرگول ساخته شده است.&quot,
&quotversion&quot => &quot1.0&quot,
&quotauthor&quot => &quotReza Karimi&quot,
&quotlanguage&quot => &quotPersian&quot,
);
return $configarray;
}

function hlmfield_activate() {
if (!Capsule::schema()->hasTable(&quothlmfield&quot)) {
Capsule::schema()->create(&quothlmfield&quot, function ($table) {
$table->increments(&quotid&quot)->autoIncrement();
$table->text(&quotfield&quot);
});
}
}

function hlmfield_deactivate() {
Capsule::schema()->dropIfExists(&quothlmfield&quot);
}

function hlmfield_output($vars) {  
echo ' <form action=&quotaddonmodules.php?module=hlmfield&quot method=&quotPOST&quot>     <input type=&quottext&quot name=&quothlm_field&quot value=&quot&quot />     <input type=&quotsubmit&quot name=&quotsubmitform_hlmfield&quot value=&quotذخیره&quot /> </form> ';
}

برای تکمیل کار ما بخش php رو مینویسیم تا مقدار وارد شده در فیلد text به دیتابیس ارسال و ذخیره شود.

ابتدا باید ما یک شرط بنویسیم که درصورتی که کاربر روی گزینه ذخیره کلیک کرد مقدار فیلد به دیتابیس ارسال شود سپس کوئری مربوط به ارسال مقدار وارده به دیتابیس را بنویسیم، پس کدهای ما به شکل زیر خواهد بود :

if($_REQUEST['submitform_hlmfield']){
    Capsule::table(&quothlmfield&quot)->insert([
'field' => $_REQUEST['hlm_field'],
]);
}

در نهایت کدهای ماژول ما تا به اینجای کار میشه :

<?php
if (!defined(&quotWHMCS&quot)) {
die(&quotThis file cannot be accessed directly&quot);
}
use Illuminate\Database\Capsule\Manager as Capsule;

function hlmfield_config() {
$configarray = array( &quotname&quot => &quotماژول من&quot, 
&quotdescription&quot => &quotاین یک ماژول ساده میباشد. که توسط آموزش Reza Karimi در ویرگول ساخته شده است.&quot,
&quotversion&quot => &quot1.0&quot,
&quotauthor&quot => &quotReza Karimi&quot,
&quotlanguage&quot => &quotPersian&quot,
);
return $configarray;
}

function hlmfield_activate() {
if (!Capsule::schema()->hasTable(&quothlmfield&quot)) {
Capsule::schema()->create(&quothlmfield&quot, function ($table) {
$table->increments(&quotid&quot)->autoIncrement();
$table->text(&quotfield&quot);
});
}
}

function hlmfield_deactivate() {
Capsule::schema()->dropIfExists(&quothlmfield&quot);
}

function hlmfield_output($vars) {  
echo ' <form action=&quotaddonmodules.php?module=hlmfield&quot method=&quotPOST&quot>     <input type=&quottext&quot name=&quothlm_field&quot value=&quot&quot />     <input type=&quotsubmit&quot name=&quotsubmitform_hlmfield&quot value=&quotذخیره&quot /> </form> ';
if($_REQUEST['submitform_hlmfield']){    
 Capsule::table(&quothlmfield&quot)->insert([ 'field' => $_REQUEST['hlm_field'], ]); 
}
}

خب امیدوارم تا اینجای کار آشنایی با نحوه کد نویسی رو داشته باشین و یادگرفته باشید و این آموزش مختصر بدردتون خورده باشه. برای راحتی کار با دیتابیس من از کوئری منیجر استفاده کردم!

موفق باشین.