Content you want the user to see goes here.

Kamis, 19 Juli 2012

Memuat/Me-Load File Javascript Secara Terpisah

Assalamu'alaikum Wr Wb dan salam sejahtera
kali ini mpu-nya blog mau bagi2 pengetahuan lagi mengenai ExtJS...
yang kali ini akan di share kepada kodinger yaitu bagaimana caranya kita membangun sebuah aplikasi dengan ExtJS secara terorganisir file-nya...

Jika para kodinger sudah pernah membuat program dengan menggunakan framework ExtJS, maka kodinger pun tahu seperti apa kendala yang di hadapi dalam menggunakan framework ini???

......

Yes!!! Mungkin ada beberapa kodinger yang masih bingung dalam mengorganisasikan file-nya. Kebanyakan masih menempatkannya dalam satu file ^_^

Ok! disini mpu-nya blog akan men-share caranya untuk me-load/memuat file javascript biar lebih terorganisir, untuk yang sudah tahu silahkan untuk share pengerahuannya ^_^

Chek This Code :

First of all, yaelah lagak loe tong... tong...
buat script berikut...

----------------------------------------------------------
//Script untuk memanggil kelas manager
Ext.ux.ScriptManager = Ext.extend(Ext.util.Observable, {
    // The timeout in seconds to be used for requests
    timeout : 30,
 
   //array yang fungsinya private, dijalankan jika ada yang memanggilnya ^_^???
    scripts : [],
    disableCaching : false,
 
    /**
     * @constructor
     * Component constructor
     */
    constructor: function(config){
        Ext.apply(this, config);
        Ext.ux.ScriptManager.superclass.constructor.call(this, config)
    },
    loadJs : function(o){
        if (!o) { return;  }
        if (o.debug) {
            this.addAsScript(o);
            return;
        }
        if (!Ext.isArray(o.scripts)) {  o.scripts = [o.scripts]; }
        o.url = o.scripts.shift();
        if (o.scripts.length == 0) {  this._loadUrl(o);  }

        else {
            o.scope = this;
            this._loadUrl(o, function(){  this.loadJs(o); });
        }
    },
    loadCss : function(o) {
        var id = o.id || '';
        var file;
 
        if (!Ext.isArray(o.scripts)) { o.scripts = [o.scripts];  }
 
        for (var i = 0; i < o.scripts.length; i++) {
            file = o.scripts[i];
            id = '' + Math.floor(Math.random() * 100);
            Ext.util.CSS.createStyleSheet('', id);
            Ext.util.CSS.swapStyleSheet(id, file);
        }
 
        if(o.callback && Ext.isFunction(o.callback)){
            o.callback.createDelegate(o.scope || window).call();
        }
    },
    addAsScript : function(o) {
        var count = 0;
        var script;
        var files = o.scripts;
        if (!Ext.isArray(files)) {  files = [files]; }
        var head = document.getElementsByTagName('head')[0];
        Ext.each(files, function(file) {
            script = document.createElement('script');
            script.type = 'text/javascript';
            if (Ext.isFunction(o.callback)) {
                script.onload = script.onreadystatechange = function() {
                    count++;
                    if (count == files.length) {
                        o.callback.call();
                    }
                }
            }
            script.src = file;
            head.appendChild(script);
        });
    },
    _loadUrl : function(url, callback) {
        var cfg, callerScope;
        if (typeof url == 'object') { // must be config object
            cfg = url;
            url = cfg.url;
            callback = callback || cfg.callback;
            callerScope = cfg.scope;
            if (typeof cfg.timeout != 'undefined') {
                this.timeout = cfg.timeout;
            }
            if (typeof cfg.disableCaching != 'undefined') {
                this.disableCaching = cfg.disableCaching;
            }
        }

 
        if (this.scripts[url]) {
            if(callback && Ext.isFunction(callback)){
                callback.createDelegate(callerScope || window).call();
            }
            return null;
        }


        Ext.Ajax.request({
            url : url,
            success : this.processSuccess,
            failure : this.processFailure,
            scope : this,
            timeout : (this.timeout * 1000),
            disableCaching : this.disableCaching,
            argument : {
                'url' : url,
                'scope' : callerScope || window,
                'callback' : callback,
                'options' : cfg
            }
        });
        return null;
    },
    processSuccess : function(response) {
        this.scripts[response.argument.url] = true;
        window.execScript ? window.execScript(response.responseText) : window
        .eval(response.responseText);
        if (response.argument.options.scripts.length == 0) {
        }
        if (typeof response.argument.callback == 'function') {
            response.argument.callback.call(response.argument.scope);
        }
    },
    processFailure : function(response) {
        Ext.MessageBox.show({
            title : 'Application Error',
            msg : 'Script library could not be loaded.',
            closable : false,
            icon : Ext.MessageBox.ERROR,
            minWidth : 200,
            buttons: Ext.Msg.OK
        });
        /*setTimeout(function() {
            Ext.MessageBox.hide();
        }, 2000);*/ //yang ini saya komentar, kalo mau tahu fungsinya kodinger buka aja komennya ^_^
    }
});

---------------------------------------------------------- 
mpu-nya blog mendapatkannya dari si master Swarnendu @_@


Selanjutnya masukkan script berikut kedalam fungsi Ext.onReady()
--------------------------------------------------------------------
ScriptMgr = new Ext.ux.ScriptManager();
    ScriptMgr.loadJs({
        scripts : ['file yang mau di load ke-1','
file yang mau di load ke-2'],
        debug : true,
        callback : function(){ console.log('Berhasil Memuat File...'); }
});

--------------------------------------------------------------------
disini kodinger bisa memuat lebih dari satu file, tapi ingat!!! tempatkan skrip diatas sesuai dengan kebutuhannya, yang sudah mpu-nya coba untuk skrip diatas hanya bisa memuat untuk file yang windownya berbeda, bila ingi memuat beda file tapi fungsi yang terkait harus ada didalam satu file maka tidak bisa. Si ExtJS tidak akan mengenali fungsi yang ada di beda file tersebut.... ^_^v


jika kodinger hanya ingin memuat satu file saja, maka tinggal tuliskan seperti ini :
----------------------------------------
scripts : ['file yang mau di load'],
----------------------------------------
Mudah kok! kalo udah paham sih... ^_^


Hokeh!!! Sekian tutor yang bisa mpu-nya blog kasih, kalo ada kekurangan dan kesalahan mohon di maafkan, tapi kalo ada kelebihan tolong masukkin ke kotak amal aja ^_^

Wassalamu'alaikum Wr Wb dan sampai jumpa.


Sumber : Swarnendu De

Jumat, 13 Juli 2012

Assalamu'alaikum wr wb bagi yang muslim dan salam sejahtera untuk semuanya...
kali ini mpu-nya blog mau men-share ilmu lagi nih bagi yang membutuhkan, yang akan di share khususnya bagi para programmer adict yaitu bagaimana cara membuat login sederhana dengan bahasa Java->Javascript yang strict-nya lagi ExtJS.

Langsung kita mulai... ;-)

Pertama buat terlebih dahulu file login.html
-------------------------------------------------------------------------
<html>
<head>
    <!--Header File ini cari path tempatnya ExtJS itu nyimpen-->

    <link href="ext-all.css" type="text/css" rel="stylesheet">
    <script type="text/javascript" src="bootstrap.js"></script>
    <script type="text/javascript" src="ext-all.js"></script>
    <script type="text/javascript" src="login.js"></script>
</head>
<body></body>
</html>
-------------------------------------------------------------------------

Kemudian buat file login.js
didalam file login.js buat dulu script untuk menjalankan semua fungsi yang utamanya
-------------------------------------------------------------------------
Ext.onReady(function(){

});
-------------------------------------------------------------------------

setelah itu, masih didalam file login.js buat kelas Ext window-nya dan masukkan didalam skrip yang diatas, jadinya seperti ini...
-------------------------------------------------------------------------
Ext.onReady(function(){
    var win = new Ext.Window({
        layout:'fit',
        style:'text-align:left;',
        title: 'Admin Login',
        width:340,
        height:230,
        closable: false,
        resizable: false,
        movable: false,
        draggable : false,
        margin: false,
        plain: true,
        border: false,
        items: [login]
    });
    win.show();
});
-------------------------------------------------------------------------

buat lagi skrip untuk panel dimana komponen akan di taruh
-------------------------------------------------------------------------
Ext.onReady(function(){
    var login = new Ext.FormPanel({

    });

    var win = new Ext.Window({
        layout   : 'fit',
        style    : 'text-align:left;',
        title    : 'Admin Login',
        width    : 340,
        height   : 230,
        closable : false,
        resizable: false,
        movable  : false,
        draggable: false,
        margin   : false,
        plain    : true,
        border   : false,
        items    : [login]
    });
    win.show();
}); 
-------------------------------------------------------------------------

setelah itu buat komponen didalam panel
-------------------------------------------------------------------------

Ext.onReady(function(){
    var login = new Ext.FormPanel({
        url:'loginProcess.php',
        frame:true,
        monitorValid:true,
        items:[{
             xtype      : 'label',
             id         : 'label1',
             style      : 'text-align:left;',
             text       : 'Silahkan anda login dahulu untuk masuk kedalam Admin Tools.',
             margin     : '0 0 0 0'
          },{
             xtype      : 'textfield',
             margin     : '30 30 5 30',
             fieldLabel : 'Username',
             height     : '30',
             name       : 'Usr',
             allowBlank : false,
          },{
             xtype          : 'textfield',
             margin         : '0 30 0 30',
             fieldLabel     : 'Password',
             name           : 'Pass',
             inputType      : 'password',
             height         : '30',
             allowBlank     : false,
             enableKeyEvents: true,
             listeners: {
               'keypress': {
                  fn: function(tf, e){

                    //jika tombol enter yang ditekan
                    if(e.getKey()==13){
                       login.getForm().submit({
                         method:'POST',
                         waitTitle:'Connecting',
                         waitMsg:'Sending data...',
                           success:function(){                                                 var redirect = 'sukses.html';
                             window.location = redirect;
                           },
                           failure:function(form, action){
                             if(action.failureType == 'server'){
                                Ext.Msg.alert('WARNING','Username or Password Incorrect!');
                                        }else{
                                            Ext.Msg.alert('WARNING!', 'Authentication server is unreachable : ' + action.response.responseText);
                                        }
                                        login.getForm().reset();
                                    }
                                });
                            }
                        }
                    }, delay : 100
                }   
         }],

         buttons:[{
            iconCls: 'login',
            text:'Login',
            margin: '0 17 10 0',
            scale: 'medium',
            formBind: true,
            handler:function(){
              login.getForm().submit({
                 method:'POST',
                 waitTitle:'Connecting',
                 waitMsg:'Sending data...',
                 success:function(){
                    var redirect = 'sukses.html';
                    window.location = redirect;
                 },
                 failure:function(form, action){
                    if(action.failureType == 'server'){
                      Ext.Msg.alert('WARNING!','Username or Password Incorrect!');
                    }else{
                      Ext.Msg.alert('WARNING!', 'Authentication server is unreachable : ' + action.response.responseText);
                    }
                    login.getForm().reset();
                 }
              });
            }
        }]
    });

    var win = new Ext.Window({
        layout   : 'fit',
        style    : 'text-align:left;',
        iconCls  : 'icon-title',
        title    : 'Admin Login',
        width    : 340,
        height   : 230,
        closable : false,
        resizable: false,
        movable  : false,
        draggable: false,
        margin   : false,
        plain    : true,
        border   : false,
        items    : [login]
    });
    win.show();
});
catatan : tolong rapihin sendiri yah baris kodenya, blum handal nulis kode di blog :D
-------------------------------------------------------------------------

kemudian buat file loginProcess.php untuk mem-verifikasi login itu cocok atau tidak
kenapa dengan PHP? karena mpu-nya blogger lagi ngoding pake bahasa ini xixixixixixi....
-------------------------------------------------------------------------
 <?php
$loginUsername = isset($_POST["Usr"]) ? $_POST["Usr"] : "";
$loginPassword = isset($_POST["Pass"]) ? $_POST["Pass"] : "";
if($loginUsername == "admin" && $loginPassword == "admin"){
    $result["success"] = true;
}else{
    $result["success"] = false;
    $result["errors"]["reason"] = "Gagal Login! Ulangin Gih!!!.";
}
echo json_encode($result);
?>
json_encode disini fungsinya untuk men-encoding nilai string yang dikirimkan sesuai dengan format ExtJS
dari format PHP, contohnya : untuk array di php $arr = array('a' => 1'b' => 2'c' => 3); ketika di encode untuk ExtJS menjadi {"a":1,"b":2,"c":3}
-------------------------------------------------------------------------

Ok! untuk sentuhan terakhir tinggal buat file sukses.html untuk menampilkan bahwa login itu berhasil
-------------------------------------------------------------------------
<html>
<head></head>
<body>

Login Sukses!!!
</body>
</html>
-------------------------------------------------------------------------

Sekian dan Terima Kasih... Semoga tutorial diatas dapat bermanfaat bagi kita semua... ^_^v