25
Feature SDK / API Presentation By: Kumar Pratik [email protected]

Extend sdk

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Extend sdk

Feature SDK / API

Presentation By:Kumar [email protected]

Page 2: Extend sdk

Overview: Feature Development

• What a developer should know before coding?• How widgets work on editor?• How to create your own feature?

– Creating your first feature ( Hello World! )– Adding components (widget) to your feature

• SDK / API – Quick Overview– Response from feature/widgets to editor & website

• Form • Html

– Code framework functions• Install• setProperty• getProperty• hasProperty• Zend DB API

Page 3: Extend sdk

What should you know before coding?

• HTML & CSS• JavaScript (Jquery framework)• PHP 5.3• MySQL • ZendDB

Page 4: Extend sdk

Youtube widget

Page 5: Extend sdk

Login using your sign-up crendentials

Page 6: Extend sdk

After logging in, you will be re-directed to Dashboard as shown below.

Click on Features Manager to start

Development of features

Page 7: Extend sdk

Creating your first feature (hello world)

click to add the details of the new feature

Since widgets constitute a feature, a widget should be added only after adding the feature

Page 8: Extend sdk

Feature Database

• Every feature has its own database

• When a feature is installed on a domain, it creates a

new database (copying from the feature master

database)

• Developer can access the database using phpMyAdmin

• A feature can have multiple widgets in it, and all the

widgets will use the same database for accessing its

data.

Page 9: Extend sdk

Feature Database Access database using phpMyAdmin

Once a feature is created, a new database is created for the feature with its credentials being displayed on features manager as shown.

Page 10: Extend sdk

Select the feature for the new widget

Click to create the new widget. Clicking on the create

button re-directs to the feature manager dashboard

Page 11: Extend sdk

Public: Feature is visible to all the subdomains on extend.langoor.net

Private: features visible only to the owner of the subdomain.

Click edit to go to feature manager editor.

Page 12: Extend sdk

Thumbnail image for the feature which appears on the feature panel in langoor.net editor.

Main feature class

All the files related to the widgets are stored in the widgets folder

All the error log information associated with the feature can be accessed here

Page 13: Extend sdk

// feature.php - Feature Main Installer Class// Class pratikHelloWorld extends baseFeature { -- You should not write the class name in your code this is added automatically

private $key = ‘d21a868268f8a43b268ee4937a1d8161'; // key of the featurevar $db; // variable for storing database objectvar $instance_id; // instance id of the feature

public function __construct($db, $instance_id = -1){ // feature should have 2 params in constructor, 1st database object (zendDb) & 2nd Instance Id

$this->db = $db; $this->instance_id = $instance_id;

}public function setInstanceId($instance_id){

$this->instance_id = $instance_id;}public function install($data = array()){ // this function is called once the install action is performed

from the feature panel on the editor. if(LFeature::setupComplete($this->key,$this->instance_id)){ // making the feature as installed to

the editor / backend framework$response = array(); // response array is the main message which is passed to the

editor to perform the required steps, please refer the response format for different type of possible message.$response['done'] = 1; $response['action'] = "openWidgetPopup";$response['new_widgets'] = LWidget::getWidgetIdsByFeatureKey($this->key); // API for

getting the widget ids from the feature }else{ throw new Exception('Unable to Complete setup'); }return $response;}

//---------------- Developer Code ------------------ // }

Please read the comments for understanding the code better.

Page 14: Extend sdk

// pratikHelloWorldView/widget.php - Feature Main Installer Class// Class pratikHelloWorldView extends baseWidget { - same as the feature class you should not write the class starting and ending.//---------------- Developer Code ---------------- var $id;public function __construct($id, $params=array(), $db){ $this->db = $db; $this->id = $id;}public function getId() { return $this->id; }public function hasProperty() { return 0; } // to enable / disable the setting button on the widgetpublic function delete() { } // this function will be called, if widget is being delete from the page.private function get() { }public function getData() { }public static function install($params = array()){ // this function is called when a user click on the widget to install on the page, currently this function is returning done = 1, ie installation completed.

$response['done'] = 1;$response['widget_instance_id'] = -1;return $response;

} public function getHtml($extra_class=array(),$extra_in_line_style=''){ // this is called after once the user click on preview/publish to display the page on the browser $html = '<div style="width:100%; padding-bottom:10px;">'; $html .= "Hello world!"; $html .= '</div>'; return $html;}

public function getEditorHtml($extra_class=array(),$extra_in_line_style=''){// its acts exactly as the above the only difference is editor will always call getEditorHtml for getting the widget data on the page. You can just call the gethtml function to send the same data. If you do not want a difference in live and preview version of the widget.return $this->getHtml($extra_class,$extra_in_line_style);} // }

Page 15: Extend sdk

Once the feature is saved, it appears in the feature

panel of the editor.

Page 16: Extend sdk

Once the feature is installed, its constituent widgets appear in the

widget panel.

Page 17: Extend sdk
Page 18: Extend sdk
Page 19: Extend sdk

SDK / API - Response formatcreating a form response (install/getProperty function)

$response = array();$response['done'] = 0;$response['action'] = "openDialog";$response['dialogContent'] = array( "title"=>'User Comment Widget', "contentType"=>'form', "formaction"=>'install',"content" => array( "fields" => array( array(

"label" => 'Name', "name" => 'name', "value" => '', "inputType" => 'input', "class" => 'required' // jQuery Validators ) )

), "buttonLabel"=>"Install", "type" => "centered“);

Page 20: Extend sdk

SDK / API - Responsecreating a html response (install/getProperty function)

$response = array();$response['done'] = 0;$response['action'] = "openDialog";$response['dialogContent'] = array(

"title"=>'User Comment Widget',"contentType"=>‘html',

"content" => “<h2>html content</h2><br /> This is a test content”,"buttonLabel"=>"Install", "type" => "centered“

);

Page 21: Extend sdk

SDK / API - Responsefor opening widget panel (install/getProperty function)

$response = array();$response['done'] = 1;$response['step'] = ++$step;$response['widget_instance_id'] = $this->db->lastInsertId();

Page 22: Extend sdk

SDK / API - Responsecreating a html response with form (install/getProperty

function)$html = “<h2>html content</h2><br /> This is a test content <form action=“addcomment”><table>

<tr> <td>Name</td><td><input type = “text” name=“name”></td>

</tr><tr><td>Age</td><td><input type = “text” name=“age” class=“required

number”></td></tr>

</table></form>“;

$response = array();$response['done'] = 0;$response['action'] = "openDialog";$response['dialogContent'] = array(

"title"=>'User Comment Widget',"contentType"=>‘html',

"content“ => $html,"buttonLabel"=>“Add Entry",

"type" => "centered“);

Page 23: Extend sdk

Creating a form handler for widget

// widget.php

Public function addcomment($params){$params = $params[0];$name = $params['name'];$age= $params[‘age'];

$sql = "insert into `l_w_pratikHelloWorld_entry` (`name`, `age`) values (?,?)";

$res = $this->db->query($sql,array($name,$age));return true;

}

Page 24: Extend sdk

Zend DB Sample Query

$stmt = $db->query(            'SELECT * FROM bugs WHERE reported_by = ? AND bug_status = ?',            array('goofy', 'FIXED')        );

$stmt = $db->query('SELECT * FROM bugs'); while ($row = $stmt->fetch()) {    echo $row['bug_description'];}

$stmt = $db->query('SELECT * FROM bugs'); $rows = $stmt->fetchAll(); echo $rows[0]['bug_description'];

Page 25: Extend sdk

Thank you!

Kumar [email protected]