Welcome to Abdul Malik Ikhsan's Blog

Zend Framework – Custom View Rendering

Posted in Teknologi, Zend Framework by samsonasik on February 26, 2011

Adalah sebuah risiko, di mana bumi dipijak, di situlah langit dijunjung. Begitu pula ketika kita menggunakan Framework, maka aturan main harus kita ikuti. Hm.., tapi salah satu dari 7 Hukum alam semesta adalah Hukum Substitusi, di mana sesuatu bisa digantikan dengan hal lain selama tidak menghilangkan nilai-nilai luhur di dalamnya. Halah, saya bijak banget ya 😀
Zend Framework adalah framework yang sangat flexibel dalam penggunaanya, dalam aturan view rendering, ia mempunyai aturan default, tapi kita bisa mengubah jika kita mau, dengan meng-override aturan yang ada ( bukan mengubah core nya lho… ).
Sebagai contoh, kita ingin mengubah suffix extension di script view kita, dan juga mengubah file yang harusnya otomatis dirender, maka kita lakukan seperti berikut (di controller yang kita buat) :

<?php

class TestcustomviewController extends Zend_Controller_Action
{

 public function init()
 {
 /* Initialize action controller here */
 //set suffix for view extension
 $this->getHelper('viewRenderer')->setViewSuffix('php');
 }

 public function indexAction()
 {
 // action body
 //data will be catch in view ..
 $this->view->persons = array(
 array('id'=>0,'name'=>'abdul malik ikhsan'),
 array('id'=>1,'name'=>'adi sucipto'),
 );

 //render custom view file --> if default must be index.phtml
 $this->render('testcustomview-index');
 }

}

Ok, karena kita buat custom render filenya  testcustomview-index . maka di view nya harus seperti ini :

Referensi :
http://till.klampaeckel.de/blog/archives/92-Zend-Framework-Slow-automatic-view-rendering.html
http://framework.zend.com/manual/en/zend.controller.action.html
http://www.inspiratio.web.id/?p=328

Zend Framework : Zend_Soap and JSON – Handling Complex Data

Posted in Tutorial PHP, Zend Framework by samsonasik on February 19, 2011

(Sebelum membaca artikel ini, sebaiknya baca dulu artikel sebelumnya tentang web services – red). Point paling penting dari web services adalah INTEROPERABILITY aplikasi, di mana teknologi yang berbeda dapat saling dikaitkan tanpa terikat bahasa pemrograman. Lalu, data-data yang berhubungan bersifat MASHUP di mana tempat penyimpanan data bisa bersifat outsource. Nah, bagaimana cara mengambil data yang bersifat kompleks ? Seperti array atau object ? Kali ini kita akan membahas tentang pemanggilan kompleks data tersebut dengan Zend Framework (komponen Zend_Soap).

Anggap saja kita mempunyai sebuah kelas yang akan memanggil data kompleks :

class Person
{
   /** @var string[] */
   public $name;
   /** @var string[] */
   public $address;
}

class Model_Soaps
{
     /**
     * @param string
     * @return object|array
     */
     public function getData($caller="json")
     {

        $data = array(
		    array('name'=>'abdul malik ikhsan', 'address'=>'jalan sukabumi 15'),
		    array('name'=>'doni iskandar', 'address'=>'jalan petak umpet'),
		    array('name'=>'banu sucipto', 'address'=>'jalan riau 25')
                );
        if ($caller=="json")
	   return  json_encode($data);
        else
           return $data;

     }

    /**
      * @return Person
     */
     public function getComplex()
     {
        $person = new Person();
        $person->name[] = "abdul malik ikhsan";
        $person->address[] = "jalan sukabumi 15";

        $person->name[] = "doni iskandar";
        $person->address[] = "jalan petak umpet";

        $person->name[] = "banu sucipto";
        $person->address[] = "jalan riau 25";

        return $person;
     }
}

Function getData() mengembalikan nilai array atau object json, sedangkan getComplex() adalah fungsi yang mengembalikan instance dari class Person. Nah, yang kita butuhkan adalah Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence yang kita pakai sebagai strategi yang dilewatkan pada saat instansiasi kelas Zend_Soap_AutoDiscover seperti berikut :

....
  $autodiscover = new Zend_Soap_AutoDiscover('Zend_Soap_Wsdl_Strategy_ArrayOfTypeSequence');
....

Nah, anggaplah kita punya 2 function untuk memanggil return data tadi dan menghasilkan json encode.

....
    private $wsdlurl = 'http://service.com?wsdl';
    public function clientAction()
    {
        $client = new Zend_Soap_Client($this->wsdlurl);
        //isi variable...
        $strofclient =  $client->getData("json");
	print_r($strofclient);

	die;
    }

    public function client2Action()
    {
        $client = new Zend_Soap_Client($this->wsdlurl);
        //isi variable...
        $strofclient =  $client->getComplex();

	print_r( json_encode( $strofclient ));

	die;
    }
....

Dan kita akan coba tampilkan hasil responsenya di view :

<script type="text/javascript" src="<?php echo $this->baseUrl(); ?>/js/jquery-1.4.2.js"></script>
<script type="text/javascript">
  $(document).ready(function(){
      $("#testcall").click(function(){
           $.get('<?php echo $this->baseUrl('/index/client'); ?>?'+(new Date()).getTime(), function(data){
              for(var i=0;i<=2;i++){
                    $("#nameoutput_"+i).html( data[i].name );
                    $("#addressoutput_"+i).html( data[i].address );
               }
           },"json");
      });

      $("#testcallobject").click(function(){
           $.get('<?php echo $this->baseUrl('/index/client2'); ?>?'+(new Date()).getTime(), function(data){
              for(var i=0;i<=2;i++){
                    $("#nameoutputobj_"+i).html( data.name.item[i]);
                    $("#addressoutputobj_"+i).html( data.address.item[i]);
               }
           },"json");
      });
  });
</script>
<input type="button" value="testcall simple array" id="testcall" />

<br />
<?php for($i=0;$i<=2;$i++){ ?>
name    <?php echo $i; ?> : <label id="nameoutput_<?php echo $i; ?>"></label> <br />
address <?php echo $i; ?> : <label id="addressoutput_<?php echo $i; ?>"></label> <br />
<?php } ?>

<hr />
<input type="button" value="testcall array object" id="testcallobject" />
<br />

<?php for($i=0;$i<=2;$i++){ ?>
    name    <?php echo $i; ?> : <label id="nameoutputobj_<?php echo $i; ?>"></label> <br />
    address <?php echo $i; ?> : <label id="addressoutputobj_<?php echo $i; ?>"></label> <br />
<?php } ?>

Jika berhasil, maka akan tampil seperti berikut :

Baca juga :
https://samsonasik.wordpress.com/2010/06/16/zend-framework-create-web-services-using-zend-soap/

Referensi :
http://framework.zend.com/manual/en/zend.soap.wsdl.html#zend.soap.wsdl.types.add_complex
http://publib.boulder.ibm.com/infocenter/wsdatap/v3r8m1/index.jsp?topic=/xi50/xmlfirewalldevelopersguide10.htm
http://en.wikipedia.org/wiki/Mashup_(web_application_hybrid)
http://yetanotherprogrammingblog.com/node/12
http://stackoverflow.com/questions/2287282/using-of-zend-soap-wsdl-strategy-arrayoftypecomplex-with-string

Codeigniter 2.0 and Zend Framework Integration

Posted in Tutorial PHP, Zend Framework by samsonasik on February 3, 2011

Codeigniter adalah Framework PHP yang mempunyai performance paling cepat dibandingkan Framework-framework yang lain, sedangkan Zend Framework adalah Framework PHP yang mempunyai jumlah komponen yang luar biasa banyak ( paling banyak ) dibanding Framework yang lain, dengan pendekatan Use at will ( Use What you Need, Forget Everything Else). Bagaimana kalau keduanya itu kita gabungkan, hasilnya, so so so powerfull.

Yang kita butuhkan adalah mengkopi komponen Zend Framework kita ke folder third party Codeigniter 2.0 seperti berikut :

Kita butuh zf.php di folder zf\libraries untuk loader Zend Component.

<?php
class Zf {
 public function __construct()
 {
   set_include_path(implode
   (
       PATH_SEPARATOR,
       array(realpath( APPPATH.'third_party/zf' ),
       get_include_path()))
    );

    require_once 'Zend/Loader/Autoloader.php';
    require_once APPPATH.'third_party/zf/Zend/Loader/Autoloader.php';
    $autoloader = Zend_Loader_Autoloader::getInstance();
 }
}

Nah, kalau sudah, kita bisa panggil di semua tempat di aplikasi CodeIgniter 2.0 kita, sebagai contoh saya panggil di Controller :

$this->load->add_package_path(APPPATH.'third_party/zf');
$this->load->library('zf');
$arraydebug = array('nama' =>'samsonasik' ,
                    'ciriciri' => 'ganteng'
                    );

//use the zf library 😉
Zend_Debug::Dump($arraydebug);

Baca Juga :
https://samsonasik.wordpress.com/2010/03/05/codeigniter-modular-with-separating-your-own-module-and-core-codeigniter-application-framework/

https://samsonasik.wordpress.com/2009/12/19/zend-framework-modular-application-for-efficient-development-process/

Bahan Referensi :
http://codeigniter.com
http://www.slideshare.net/ccornutt/no-really-its-all-about-you
http://devzone.zend.com/article/1768
http://www.4webby.com/freakauth/tutorials/using-zend-framework-components-in-code-igniter
http://en.wikipedia.org/wiki/Presentation-abstraction-control
Gambar :
http://thegeektips.com/tips-tricks/codeigniter-2-0-is-ready/