| 
<?php
 // this example shows how you can capsule d3extjs generator and take it as javascript rendering view
 // this example is taken from
 // @see http://docs.sencha.com/ext-js/4-1/#!/api/Ext.grid.Panel
 /**
 Basic idea of this concept:
 As SQL describes data sets,
 d3extjs behaves like a php based language for
 describing extjs components.
 The main goal is to write sophisticated, stable, reusable, dynamic and enhanceable
 code components on top of d3extsj with php.
 */
 
 $showsource = true;
 
 
 include_once '../d3.classes.inc.php';
 include_once '../extjs.class.inc.php';
 
 interface iExt {
 public function getConfig();
 public function getType();
 }
 
 abstract class ExtAbstract implements iExt {
 protected $object;
 protected $type;
 protected $config;
 public function __construct(array $config = array()){
 $this->config = o3($config);
 $this->init();
 }
 public function getType(){
 return $this->type;
 }
 
 public function getConfig(){
 return $this->config;
 }
 
 public function init(){}
 
 public function __toString(){
 return $this->render();
 }
 
 public function render(){
 $this->init();
 return (string)$this->object->colon();
 }
 }
 
 class Ext {
 protected $object;
 public function __construct(){}
 public function create(iExt $type){
 $this->object = ext()->create($type->getType(), $type->getConfig());
 return $this;
 }
 public function get(){
 return $this->object->get();
 }
 public function __toString(){
 return (string)$this->object->colon()->linebreak();
 }
 }
 
 class ExtDataStoreManager extends ExtAbstract {
 protected $type = "Ext.data.StoreManager";
 public function init(){
 $this->object = ext()->data->StoreManager();
 }
 /**
 * @return extjs4_data_StoreManager
 */
 public function get($property=false){
 if($property){
 $this->object = ext()->data->StoreManager(extjs::property);
 }
 return $this->object;
 }
 }
 
 
 class ExtDataStore extends ExtAbstract {
 protected $type = "Ext.data.Store";
 
 /**
 * (non-PHPdoc)
 * @see ExtAbstract::init()
 */
 public function init(){
 $this->object = ext()->data->Store();
 }
 /**
 * @return extjs4_data_Store
 */
 public function get(){
 return $this->object;
 }
 }
 
 class ExtGridPanel  extends ExtAbstract {
 protected $type = "Ext.grid.Panel";
 
 public function init(){
 $this->object = ext()->grid->Panel();
 }
 /**
 * @return extjs4_grid_Panel
 */
 public function get(){
 return $this->object;
 }
 
 }
 
 // init objects
 $storeCreate = new Ext();
 $panelCreate = new Ext();
 $storeManager = new ExtDataStoreManager();
 
 // create store
 $store = $storeCreate->create(new ExtDataStore(array(
 "storeId" => "simpsonsStore",
 "fields" => array("name","email","phone"),
 "data" => o3(array("items" => array(
 o3(array( 'name'=> 'Lisa',  "email"=>"[email protected]",  "phone"=>"555-111-1224" )),
 o3(array( 'name'=> 'Bart',  "email"=>"[email protected]",  "phone"=>"555-222-1234" )),
 o3(array( 'name'=> 'Homer', "email"=>"[email protected]",  "phone"=>"555-222-1244"  )),
 o3(array( 'name'=> 'Marge', "email"=>"[email protected]", "phone"=>"555-222-1254"  ))
 ))),
 "proxy" => o3(array(
 "type" => "memory",
 "reader" => o3(array(
 "type" => "json",
 "root" => "items"
 ))
 ))
 )));
 
 // create panel
 $panel = $panelCreate->create(new ExtGridPanel(array(
 "title" => "Simpsons",
 "store" => $storeManager->get(true)->lookup("simpsonsStore"),
 "columns" => array(
 o3(array("text"=>"name", "dataIndex"=>"name")),
 o3(array("text"=>"Email", "dataIndex"=>"email", "flex"=>1)),
 o3(array("text"=>"phone", "dataIndex"=>"phone")),
 ),
 "height"=>200, "width"=>400, "renderTo" => ext()->getBody()
 )));
 
 echo "<pre>";
 // output
 echo $store;
 echo $panel;
 |