Kali ini aku akan bahas mengenai bagaimana caranya membuat addon modules di WHMCS. Telah kita ketahui bahwa kita bisa membuat module sendiri untuk memenuhi kebutuhan kita.

WHMCS

Dalam memulai membuat module tentukan nama module kamu dulu ya, nama module harus unik dan semua harus huruf kecil (lowercase). Nama modul boleh menggunakan huruf dan angka tetapi harus diawali dengan huruf, serta penggunaan spesial karakter hanya underscore yang di bolehkan. Berikut contoh nama module:

mymodulename atau my_module_name atau my_module

Dalam pembuatan directory module harus diikuti dengan nama module yang sama dengan nama directory. Seperti contoh nama directory my_module_name maka akan ditemukan nama module my_module_name.php. Nantinya module ini akan di upload ke server yang berlokasi di directory /modules/addons/ .

 

Pada tutorial ini saya akan membuat module dengan nama imamnawawi. Ikuti langkah berikut:

Membuat Config Module

Hal pertama yang harus dilakukan adalah membuat konfigurasi module yang meliputi name, description, version, author dan  konfigurasi fields.

function imamnawawi_config(){
    return [
        "name" => "Imam Nawawi Module",
        "description" => "This is a sample config function for an addon imamnawawi",
        "version" => "1.0",
        "author" => "Imam Nawawi",
        "fields" => [
            "Text Field Name" => [
                "FriendlyName" => "Text Field Name",
                "Type" => "text",
                "Size" => "25",
                "Description" => "Textbox",
                "Default" => "Default value",
                ],
            "Password Field Name" => [
                "FriendlyName" => "Password Field Name",
                "Type" => "password",
                "Size" => "25",
                "Description" => "Enter secret value",
                ],
            "Radio Field Name" => [
                "FriendlyName" => "Radio Field Name",
                "Type" => "radio",
                'Options' => 'First Option,Second Option,Third Option',
                'Default' => 'Third Option',
                'Description' => 'Choose your option!',
                ],
            "Dropdown Field Name" => [
                "FriendlyName" => "Dropdown Field Name",
                "Type" => "dropdown",
                'Options' => [
                    'option1' => 'Display Value 1',
                    'option2' => 'Second Option',
                    'option3' => 'Another Option',
                ],
                'Default' => 'option2',
                'Description' => 'Choose one',
                ],
            "Textarea Field Name" => [
                "FriendlyName" => "Textarea Field Name",
                "Type" => "textarea",
                "Rows" => "3",
                "Cols" => "50",
                'Default' => 'A default value goes here...',
                'Description' => 'Freeform multi-line text input field',
                ],
        ]
    ];
}

Install dan Uninstall Module

Pada module kita buat fungsi aktivasi dan deactivasi untuk membuat modul kita dapat di aktifkan dan di noaktifkan. Pada fungsi ini saya memberikan return status yang nantinya berguna untuk memberikan alert ketika aktivasi atau deaktivasi di pilih.

Fungsi Aktivasi

function imamnawawi_activate(){
    return array('status' => 'success', 'description' => 'Imam Nawawi Apps - Module Activated');
}

Fungsi Deaktivasi

function imamnawawi_deactivate(){
    return array('status' => 'success', 'description' => 'Imam Nawawi Apps - Module Deactivated');
}

Client Area Output

Pada tahap ini kita buat fungsi imamnawawi_clientarea($vars) untuk generate laman di client area. Laman output yang digunakan berupa template file dengan nama publicpage.tpl yang ada pada directory /templates/publicpage.tpl. Pada fungsi ini juga terdapat inisialisasi kelas ClientDispatcher() yang diambil dari /lib/Client/.

function imamnawawi_clientarea($vars){
    $modulelink = $vars['modulelink']; // eg. index.php?m=imamnawawi
    $version = $vars['version'];

    $configTextField = $vars['Text Field Name'];
    $configPasswordField = $vars['Password Field Name'];
    $configDropdownField = $vars['Dropdown Field Name'];
    $configRadioField = $vars['Radio Field Name'];
    $configTextareaField = $vars['Textarea Field Name'];

    $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';

    $dispatcher = new ClientDispatcher();
    return $dispatcher->dispatch($action, $vars);
}

dan template nya sebagai berikut

<h2>Public Client Area Sample Page</h2>
<p>{ debug }</p>
<hr>

<div class="row">
    <div class="col-sm-3">
        Module Link
    </div>
    <div class="col-sm-7">
        {$modulelink}
    </div>
</div>

<div class="row">
    <div class="col-sm-3">
        Config Text Field Value
    </div>
    <div class="col-sm-7">
        {$configTextField}
    </div>
</div>

<div class="row">
    <div class="col-sm-3">
        Custom Variable
    </div>
    <div class="col-sm-7">
        {$customVariable}
    </div>
</div>

<hr>

<p>
    <a href="{$modulelink}&action=secret" class="btn btn-default">
        <i class="fa fa-lock"></i>
        Go to page that requires authentication
    </a>
</p>

Upgrade Module

Fungsi ini berguna ketika module mengalami upgrade versi dari 1.0 ke 1.2 dst.

function imamnawawi_upgrade($vars){
    $currentlyInstalledVersion = $vars['version'];

    if ($currentlyInstalledVersion < 1.1) {
        $version = "1.2";
    }

    if ($currentlyInstalledVersion < 1.2) {
        $version = "1.3";
    }
}

Setelah semua selesai lakukan upload module ke server kalian, lalu kita lihat dan coba mengaktifkannya.

Aktifkan Module

Untuk melihat ada dan tidaknya modul yang sudah kita upload pilih menu Setup>Addon Modules maka list module akan ditampilkan semua.

1
2

Setelah modul sudah tersedia kia bisa klik Activate, dan kita bisa klik tombol Configure untuk melihat konfigurasi apa saja yang dapat kita lakukan pada module kita.

3

Sekarang module siap digunakan, semoga artikel ini bisa bermanfaat bagi teman-teman pembaca.

Kamu merasa artikel ini menarik dan bermanfaat? Bagikan ke temanmu sekarang yuk!