Membuat Module

Untuk membuat module pada framework esoftplay, anda harus membuat sebuah folder di dalam directory "modules/" dengan persyaratan nama sebagai berikut
  1. nama module minimal 3 karakter atau lebih, jika nama module hanya menggunakan 2 karakter maka akan membuat rancu jika website menggunakan multi language
  2. nama module tidak boleh sama dengan nama folder yang ada di doc root, berikut adalah nama nama yang tidak boleh digunakan untuk penamaan module:
    • admin
    • blocks
    • images
    • includes
    • modules
    • repair
    • templates
  3. module bisa diakses melalui browser apabila memiliki file dengan nama "_switch.php" dan sudah ter-register kedalam table database `bbc_module` dengan status active=1
  4. _switch.php adalah file yang wajib jika ingin membuat module yang bisa diakses melalui browser, sedangkan admin/_switch.php hanya perlu dibuat jika anda ingin membuat admin panel untuk module tersebut
  5. contoh pembuatan file _switch bisa anda copas dari file lain seperti modules/user/_switch.php dan berikut adalah contoh sederhana pembuatan file _switch.php
    <?php	if ( ! defined('_VALID_BBC')) exit('No direct script access allowed');
    
    // Text yang akan muncul ketika ingin menambah menu public dan memilih module ini di admin panel "Control Panel / Menu Manager"
    switch($Bbc--->mod['task'])
    {
        case 'main': // Ini adalah task utama ketika user mengakses BaseURL/{namamodule}/ 
            # script di sini
            break;
        case 'list': // Ini akan diakses jika user mengkakses BaseURL/{namamodule}/list/
            # script di sini
            break;
        case 'list_edit':
            # script di sini (karena tidak ada comment setelah case maka opsi tidak akan muncul ketika create/edit menu di "Control Panel / Menu Manager")
            break;
    
        default:
            echo 'Invalid action '.$Bbc->mod['task'].' has been received...';
            break;
    }

Nama nama file tambahan dalam module

saya asumsikan anda membuat module dengan nama "coba" maka anda harus membuat semua file dalam module tersebut di dalam folder "modules/coba/", jika anda membuat file-file dengan nama di bawah maka framework akan memperlakukan berbeda:
  • _function.php
    • file ini digunakan untuk menyimpan SEMUA function yang terdapat dalam module
    • semua function yang dibuat harus mempunyai nama dengan awalan (prefix) nama module tersebut. contoh {namamodule}_{namafungsi}
  • _class.php
    • ini adalah file yang digunakan untuk membuat class utama dalam module
    • nama class yang dibuat harus dengan struktur nama {namamodule}_class dan file ini tidak terload otomatis
    • karena tidak tereload secara otomatis maka setiap kali anda menggunakan harus menggunakan code script $obj = _class('{namamodule}'); kemudian $obj bisa anda gunakan sebagai object untuk mengeksekusi method di dalam class tersebut
  • _setting.php
    • ini adalah file yang akan diinclude sebelum file _switch di include
    • digunakan untuk menambah variable tertentu atau merubah variable global sebelum digunakan oleh file _switch.php
  • _config.php
    • file ini akan diinclude di semua module yang ada di project dengan ketentuan tabel `bbc_module` dengan field `is_config`=1 AND `name`={namamodule}
    • jika kondisi table `bbc_module` seperti di atas maka file _config.php ini bisa menjadi hook di semua module dan di eksekusi sebelum module di load
    • biasa nya file ini digunakan untuk merubah routing dengan cara menggunakan pengkondisian seperti modules/manual/_config.php pada web ini
      <?php	if ( ! defined('_VALID_BBC')) exit('No direct script access allowed');
      
      if(isset($_seo['URI']))
      {
          $r = explode('/', $_seo['URI']);
          if (!file_exists(_ROOT.'modules/'.$r[0]))
          {
              $_seo['URI'] = 'manual/'.$_seo['URI'];
          }
          unset($r);
      }
              
    • contoh penggunaan _config.php dengan kondisi table `bbc_module` diatas juga bs di lihat pada module content, yaitu mem-publish atau unpublish content berdasarkan schedule yang telah ditentukan
  • admin/_switch.php
    • berfungsi sebagai index.php untuk module yang dibuat, hanya saja berlaku untuk admin panel
  • admin/_function.php
    • file ini menyimpan semua function yang ada dalam module yang bisa di eksekusi hanya pada script yang ada di admin panel
    • penulisan nama fungsi harus dengan pola penamaan {namamodule}_{namafungsi}
  • admin/_class.php
    • file ini berisi class yang hanya bisa diakses oleh script yang ada di admin panel
    • penulisan nama class harus dengan pola penamaan {namamodule}_class
    • karena tidak tereload secara otomatis maka setiap kali anda menggunakan harus menggunakan code script $obj = _class('{namamodule}'); kemudian $obj bisa anda gunakan sebagai object untuk mengeksekusi method di dalam class tersebut
  • admin/_setting.php
    • ini adalah file yang akan diinclude sebelum file admin/_switch di include
    • digunakan untuk menambah variable tertentu atau merubah variable global sebelum digunakan oleh file _switch.php

Membuat module sebagai library baru dalam project

Jika anda ingin membuat module yang hanya berisi kumpulan function yang akan digunakan oleh module lain, maka anda hanya cukup membuat folder di dalam directory modules/, Semisal module yang kita buat adalah "coba" maka kita hanya perlu membuat file modules/coba/_function.php jd kita tidak perlu membuat file modules/coba/_switch.php karena kita tidak perlu meregistrasikan halaman baru pada module tersebut. Berikut adalah contoh apabila kita membuat function dengan nama "ok":
<?php if (!defined('_VALID_BBC')) exit('No direct script access allowed');

function coba_ok($value='')
{
    echo $value;
};
dengan membuat file modules/coba/_function.php dengan isi content di atas, maka semua module yang ada pada framework bisa memanggil function tersebut dengan cara:
_func('coba'); coba_ok('nama saya');
kode _func('coba'); diatas berfungsi untuk meng-include modules/coba/_function.php jika file tersedia atau jika tidak, maka akan meng-inlclude file includes/function/coba.php (hanya jika file tersedia). silahkan baca _func untuk keterangan lebih lanjut. Anda juga bisa meng-include sekaligus meng-eksekusi function coba_ok dengan cara
_func('coba', 'ok', 'nama saya');
dengan output dan proses yang sama seperti script sebelumnya diatas

Merubah function atau class utama pada framework

apabila anda ingin merubah fungsi utama dalam framework contoh function "sendmail" pada contoh script di bawah:
_func('sendmail');
sendmail($destinations, '[subject]', '[content]', $from);
maka anda harus membuat module dengan nama "sendmail" lalu membuat file "_function.php" yang berisi function "sendmail" itu sendiri untuk menggantikan function utama

Hook Function (menambahkan script tambahan pada proses utama framework)

ini adalah fitur dimana anda bisa membuat function dengan nama tertentu yang telah ditentukan oleh framework dan akan menambahkan proses utama pada framework, adapun penempatan function sendiri bisa anda tempatkan di module mana saja selama masih menggunakan pola penamaan {namamodule}_{namafunction} dan ditaruh pada file modules/{namamodule}/_function.php. Jadi function hook ini tidak seperti di framework lain yang menggantikan function utama, melainkan hanya menambahkan proses yang ada pada proses utama framework.

berikut adalah function function yang akan dipanggil ketika function utama pada framework di panggil, ini berlaku untuk semua module, meskipun module tersebut tidak ada di table database `bbc_module`.
  • alert_add($data)
    • dipanggil ketika ada penambahan notifikasi, sedangkan $data adalah row yang ada di table bbc_alert
  • alert_view($data)
    • dipanggil ketika ada notifikasi untuk module tertentu dan diklik, $data adalah row yang ada di table bbc_alert harus return URL di field params, eg: params = '{"url":"public_url", "url_admin":"admin_url"}'
  • site_url($string='', $add_URL=true)
    • dipanggil ketika ingin mengconvert url misal index.php?mod=modulename.taskname menjadi _URL+'modulename/taskname'
  • seo_uri($id='none')
    • dipanggil ketika ingin mengetahui path url saat itu, jika input ke1 di isi angka (contoh: 2) maka akan mengambil value dari path tsb (contoh hasil: taskname)
  • url_parse($txt_url)
    • dipanggil ketika menambah menu di "Control Panel / Menu Manager" $txt_url sendiri adalah apa yg diinputkan di field "Real Link"
  • user_create_validate($data)
    • dipanggil sebelum user dibuat untuk me-validasi apakah data params sudah sesuai kebutuhan ataukah tidak dan return HARUS boolean jika false maka user tidak jadi dibuat, gunakan function user_create_validate_msg($msg); untuk menulis pesan error, dan user_create_validate_msg() untuk menampilkan
  • user_create($user_id)
    • dipanggil ketika user dibuat / ketika user konfirmasi email / admin menyetujui pendaftaran
  • user_change($user_id)
    • dipanggil ketika user melakukan perubahan data diri di user/account
  • user_delete($user_ids)
    • dipanggil ketika user dihapus. input1 dalam fungsi tersebut berisi kumpulan user_id yang akan dihapus (bisa array atau beberapa id yg dipisahkan dengan koma)
  • user_login($user_id)
    • dipanggil ketika user login.
  • user_logout($user_id)
    • dipanggil ketika user berstatus logout (dengan ketentuan selama batas kemampuan server menyimpan session).
Contoh penggunaan function hook, semisal anda ingin menghapus semua data dari user di dalam module anda ketika user tersebut dihapus:
function {namamodule}_user_delete($user_ids)
{
    ids($user_ids); // ini akan meng implode dengan koma "," hanya jika variable adalah array
    if (!empty($user_ids))
    {
        global $db;
        $db->Execute("DELETE FROM `{namamodule}` WHERE `user_id` IN ($user_ids)");
    }
}

selamat mencoba! wink

Tags : Module

0 Komentar

Berikan komentar anda