zfconf 2010: jquery and dojo toolkit javascript-frameworks integration with zend framework

48
Интеграция Zend Framework c JavaScript-фрэймворками jQuery и Dojo Toolkit Георгий Туревич, ведущий веб-программист, Wizartech 27 марта 2010 г. Санкт-Петербур

Upload: zfconf-conference

Post on 28-Nov-2014

5.486 views

Category:

Documents


2 download

DESCRIPTION

 

TRANSCRIPT

Page 1: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Интеграция Zend Frameworkc JavaScript-фрэймворками

jQuery и Dojo ToolkitГеоргий Туревич, ведущий веб-программист, Wizartech

27 марта 2010 г.Санкт-Петербург

Page 2: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Немного о себе

• Ведущий веб-программист компании Wizartech• Более 7-и лет использования PHP и JavaScript• Более 2-х лет использования Zend Framework• Более 1-го года использования Dojo Toolkit

(с момента заключения партнерства с Zend Framework) и создания индивидуальных компонентов

• Активный участник zendframework.ru – Zh0rzh

Page 3: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Возможности

• Программная настройка окружения • Автоматизация работы с UI-компонентами• Возможности кастомизации форм• Работа с автокомплитом

Page 4: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Специфика Dojo + ZF

• Генерация данных в стандартизированном формате (dojo.data)

• Упрощение создания слоев и профилей сборки для выпуска в эксплуатацию с помощью Dojo Shrinksafe

Page 5: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

ZF + Dojo Toolkit

Page 6: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Настройка окружения

<style type="text/css">     @import "/js/dojo-toolkit/dijit/themes/tundra/tundra.css";</style> <script type="text/javascript">     var djConfig = {"isDebug":true,"parseOnLoad":true}; </script> <script type="text/javascript"      src="/js/dojo-toolkit/dojo/dojo.js"></script> <script type="text/javascript">     dojo.require("dojo.io.script");     dojo.require("dojo.fx");     dojo.require("dijit.form.Button"); </script>

Типичный код в <head> секции для настройки Dojo:

Page 7: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Настройка окружения

Настройка с помощью dojo() view-хелпераВо время инициализации:

<?=$this->dojo()  ->enable()  ->setDjConfig(array(        'isDebug' => true,        'parseOnLoad' => true    ))  ->setLocalPath('/js/dojo-toolkit/dojo/dojo.js')  ->addStyleSheetModule('dijit.themes.tundra')  ->requireModule(array(        'dojo.io.script',        'dojo.fx',        'dijit.form.Button'    ))?>

Указываем в макете:

Zend_Dojo::enableView($view);

Page 8: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Настройка окружения

Настройка с помощью плагина инициализации ресурса Dojo ( >= 1.10)

В макете указываем:

<?=$this->dojo()?>

В application.ini указываем:

resources.dojo.djConfig.isDebug = 1resources.dojo.djConfig.parseOnLoad = 1resources.dojo.localPath = "/js/dojo-toolkit/dojo/dojo.js"resources.dojo.requireModule[] = "dojo.io.script"resources.dojo.requireModule[] = "dojo.fx"resources.dojo.requireModule[] = "dijit.form.Button"

Page 9: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Настройка окружения

Доступная функциональность dojo() view-хелпера

- Установка конфигурационных переменных- Установка подключаемых слоев- Подключение компонентов Dojo- Установка связи между модулем и путем к папке- Установка и использование cdn-версии- Установка локальных путей- Добавление javascript-кода для onLoad событий в секции <head>- Добавление javascript-кода в секцию <head>- Добавление произвольных файлов стилей- Добавление файлов стилей согласно стандартам наименования компонентов Dojo

Page 10: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Настройка окружения

Доступные методы dojo() view-хелпера

•enable() / disable()•requireModule($module)•registerModulePath($module, $path)•addLayer($path)•setCdnBase($url)•setCdnVersion($version)•setCdnDojoPath($path)•useCdn()•setLocalPath($path)•useLocalPath()•setDjConfig(array $config)•setDjConfigOption($option, $value)•addStylesheetModule($module)•addStylesheet($path)•addOnLoad($spec, $function = null)•prependOnLoad($spec, $function = null)•onLoadCaptureStart($obj = null) / onLoadCaptureEnd($obj = null)•javascriptCaptureStart() / javascriptCaptureEnd()

Page 11: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиView-хелперы

В шаблоне:

<h1>Форма</h1><div class="tundra">  <form>  <?=$this->editor('editor')?>  <?=$this->button(      'send', 'Отправить' )?>  </form></div>

Page 12: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиЭлементы форм

В контроллере:

$form = new Zend_Dojo_Form();$form->addElement('editor', 'editor');$form->addElement(    'button',    'send',    array('label' => 'Отправить'));$this->view->form = $form;

В шаблоне:

<h1>Форма</h1><div class="tundra"><?=$this->form?></div>

Page 13: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиЭлементы форм

Состав элементов: - Button- CheckBox- ComboBox / FilteringSelect- CurrencyTextBox- DateTextBox- HorizontalSlider / VerticalSlider- MappedTextBox- NumberSpinner- NumberTextBox- RadioButton- SimpleTextarea- Slider- SubmitButton- TextBox- Textarea- TimeTextBox- ToggleButton- ValidationTextBox

Page 14: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиВиджеты компоновки

Реализованы view-хелперы и декораторы для форм, которые упрощают работу с виджетами компоновки:- AccordionContainer- AccordionPane- BorderContainer- ContentPane- SplitContainer- StackContainer- TabContainer

Page 15: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиВиджеты компоновки

Page 16: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиВиджеты компоновки

<div class="tundra"><? $this->tabContainer()->captureStart('masterLayout', array(   'style' => 'width: 200px; height: 20em;')) ?>    <?=$this->contentPane('menuPane', 'This is first tab', array(        'title' => 'tab 1'    ))?>

    <? $this->contentPane()->captureStart('navPane', array(        'title' => 'tab 2')    )?>        This<br>        is<br>        second<br>        tab    <?=$this->contentPane()->captureEnd('navPane');?><?=$this->tabContainer()->captureEnd('masterLayout')?></div>

Page 17: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиВиджеты компоновки

Page 18: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиВиджеты компоновки

$form = new Zend_Dojo_Form();$subForm1 = new Zend_Dojo_Form();$subForm2 = new Zend_Dojo_Form();

$form->addSubForm($subForm1, 'subform1');$form->addSubForm($subForm2, 'subform2');$this->view->form = $form;

$form->setDecorators(array(    'FormElements',    array('TabContainer', array(        'id' => 'myTabs',        'style' => 'width: 300px; height: 20em'    )),    'Form',));

- Формируем объекты формы и суб-форм- Устанавливаем форме декоратор TabContainer

Page 19: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиВиджеты компоновки

$subForm1->setDecorators(array(    'FormElements',    array('HtmlTag', array('tag' => 'dl')),    array('ContentPane', array('title' => 'Tab 1'))));

$subForm2->setDecorators(array(    'FormElements',    array('HtmlTag', array('tag' => 'dl')),    array('ContentPane', array('title' => 'Tab 2'))));

- Устанавливаем суб-формам декоратор ContentPane

Page 20: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиВиджеты компоновки

$subForm1->addElement('Editor', 'editor', array(    'label' => 'Editor:',));

$subForm1->addElement('DateTextBox', 'date', array(    'label' => 'Date:', 'style' => 'width: 200px'));

$subForm2->addElement('FilteringSelect', 'acl', array(    'label' => ' City:', 'MultiOptions' => array(        '1' => 'New York', '2' => 'Berlin',        '3' => 'Bern', '4' => 'Boston'    )));

- Добавляем элементы в суб-формы

Page 21: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Ajax

Page 22: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Ajax

В одном действии генерируем форму:

public function dojoDataExampleAction(){    $form = new Zend_Dojo_Form();    $form->addElement('FilteringSelect', 'city', array(        'label' => 'City',        'storeId' => 'cityStore',        'storeType' => 'dojo.data.ItemFileReadStore',        'storeParams' => array(            'url' => '/json/simple-city-store/'        ),        'dijitParams' => array(            'searchAttr' => 'name'        )    ));

    $this->view->form = $form;}

Page 23: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Ajax

Генерируем JSON классическим методом:

public function simpleCityStoreAction(){    Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer') ->setNoRender(1);

    Zend_Layout::getMvcInstance()->disableLayout();

    $data = array(        array('id' => 1, 'name' => 'Волгоград'),        array('id' => 2, 'name' => 'Москва'),        array('id' => 3, 'name' => 'Минск'),        array('id' => 4, 'name' => 'Мурманск')    );

    $dojoData = new Zend_Dojo_Data('id', $data);    echo $dojoData;}

Page 24: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Ajax

Генерируем JSON с применением помощника AutoComplete:

public function simpleCityStoreAction(){    $data = array(        array('id' => 1, 'name' => 'Волгоград'),        array('id' => 2, 'name' => 'Москва'),        array('id' => 3, 'name' => 'Минск'),        array('id' => 4, 'name' => 'Мурманск')    );

    $this->_helper->autoCompleteDojo( new Zend_Dojo_Data('id', $data), true );}

Что делает AutoComplete:- автоматически деактивирует Layout и ViewRender- при необходимости трансформирует array -> Zend_Dojo_Data- записывает данные в response-объект и отправляет его пользователю- облегчает жизнь программисту :)

Page 25: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Ajax

Отдаем данные в формате dojo.data:

{ "identifier":"id", "items":[ {"id":1,"name":"Волгоград"}, {"id":2,"name":"Москва"}, {"id":3,"name":"Минск"}, {"id":4,"name":"Мурманск"} ]}

Page 26: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Ajax

Получаем результат:

Page 27: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Выпуск в эксплуатацию

В пакете Dojo Toolkit поставляется утилита ShrinkSafe (Java),которая реализует следующие функции:

• Уменьшение количества HTTP-запросов– Объедение файлов с классами, шаблонами, языковыми данными

• Уменьшение размера JavaScript-файлов– Удаление комментариев и пробелов– Сокращение наименований переменных

• CSS-оптимизация– Объединение @import-файлов в один– Удаление комментариев

• Опции StripConsole• X-Domain-сборки (свой CDN)

Page 28: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Выпуск в эксплуатацию

Для утилиты ShrinkSafe требуется 2 вида файлов:

• Слои сборки– Определяет состав js-компонентов, которые подготавливаются к

эксплуатации

• Профили сборки– Содержат конфигурацию действия по оптимизации

Смотри подробнее: http://docs.dojocampus.org/build/index

Page 29: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Выпуск в эксплуатацию

Zend_Dojo_BuildLayer автоматически генерирует содержание профиляи содержание слоя на основе данных из view-хелпера dojo().

$build = new Zend_Dojo_BuildLayer(array(    'view' => $this->view,    'layerScriptPath' => 'custom.main.js',    'layerName' => 'custom.main',));

$profile = $build->generateBuildProfile();

$layerScript = $build->generateLayerScript();

Page 30: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Выпуск в эксплуатацию

Слой сборки:

dojo.provide("custom.main");

(function(){dojo.require("dojo.io.script");dojo.require("dojo.fx");dojo.require("dijit.form.Button");})();

Page 31: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Выпуск в эксплуатацию

Профиль сборки:

dependencies = { action:"release", optimize:"shrinksafe", layerOptimize:"shrinksafe", copyTests:false, loader:"default", cssOptimize:"comments", releaseName:"custom", layers:[{ name:"custom.main.js", layerDependencies:[], dependencies:["custom.main"] }], prefixes:[ ["custom","../custom"], ["dojo","../dojo"], ["dijit","../dijit"] ]};

Page 32: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Планы на будущее

• Расширенная поддержка Dijit-компонентов– http://framework.zend.com/wiki/display/ZFPROP/Zend_Dojo+-

+Extended+Dijit+Support+-+Matthew+Weier+O%27Phinneydijit.ColorPalettedijit.Dialogdijit.Menu

dijit.ProgressBardijit.TitlePanedijit.Tooltipdijit.TooltipDialogdijit.Treedijit.form.MultiSelect

• Поддержка dojox.grid• http://framework.zend.com/wiki/display/ZFPROP/Zend_Dojo+-

+dojox.grid.DataGrid+Support+-+Matthew+Weier+O%27Phinney

• Ваши идеи?

Page 33: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

ZF + jQuery

Page 34: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Настройка окруженияТипичный код в <head> секции для настройки jQuery:

<link href="/jquery/css/ui-lightness/jquery-ui-1.8.custom.css" type="text/css" media="screen" rel="stylesheet"><script type="text/javascript" src="/jquery/js/jquery-1.4.2.min.js"></script><script type="text/javascript" src="/jquery/js/jquery-ui-1.8.custom.min.js"></script>

Page 35: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Настройка окружения

Настройка с помощью jQuery() view-хелпераВо время инициализации:

Указываем в макете:

$view->addHelperPath( "ZendX/JQuery/View/Helper", "ZendX_JQuery_View_Helper");

$view->jQuery()     ->enable()     ->setLocalPath('/jquery/js/jquery-1.4.2.min.js')     ->addStylesheet('/jquery/css/ui-lightness/jquery-ui-1.8.custom.css')     ->setUiLocalPath('/jquery/js/jquery-ui-1.8.custom.min.js');

Page 36: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Настройка окружения

Настройка с помощью плагина инициализации ресурса jQuery

В макете указываем:

<?=$this->jQuery()?>

В application.ini указываем:

pluginPaths.ZendX_Application_Resource_ = "ZendX/Application/Resource"resources.jquery.localpath = "/jquery/js/jquery-1.4.2.min.js"resources.jquery.stylesheet = "/jquery/…/jquery-ui-1.8.custom.css"resources.jquery.uilocalpath = "/jquery/js/jquery-ui-1.8.custom.min.js"

Page 37: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Настройка окружения

Доступная функциональность jQuery() view-хелпера

- Установка и использование cdn-версий jQuery и jQuery UI- Использование ssl с cdn- Установка локальных путей к jQuery и jQuery UI- Добавление javascript-кода для onLoad событий в секции <head>- Добавление javascript-файлов в секци <head>- Добавление javascript-кода в секцию <head>- Добавление файлов стилей

Page 38: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Настройка окружения

Методы jQuery() view-хелпера

setUiVersion()getUiVersion()useUiCdn()useUiLocal()setUiLocalPath()getUiLocalPath()

onLoadCaptureStart()onLoadCaptureEnd()

javascriptCaptureStart()javascriptCaptureEnd()

addJavascriptFile($path)getJavascriptFiles()clearJavascriptFiles()

addJavascript($statement)getJavascript()clearJavascript()

addStylesheet($path)getStylesheets()

addOnLoad($statement)getOnLoadActions()

setRenderMode($mask)getRenderMode()

setCdnSsl($bool)

Page 39: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиView-хелперы

Page 40: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиView-хелперы

Page 41: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиЭлементы форм

$form = new ZendX_JQuery_Form(); $subForm1 = new ZendX_JQuery_Form(); $subForm2 = new ZendX_JQuery_Form();

$form->addSubForm($subForm1, 'subform1'); $form->addSubForm($subForm2, 'subform2');

$form->setDecorators(array(     'FormElements', array('TabContainer', array(         'id' => 'tabContainer', 'style' => 'width: 600px;'     )),     'Form', ));

- Формируем объекты формы и суб-форм- Устанавливаем форме декоратор TabContainer

Page 42: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиЭлементы форм

$subForm1->setDecorators(array(     'FormElements', array('HtmlTag', array('tag' => 'dl')),     array('TabPane', array('jQueryParams' => array(         'containerId' => 'mainForm', 'title' => 'DatePicker'     ))) ));

$subForm2->setDecorators(array(     'FormElements',     array('HtmlTag', array('tag' => 'dl')),     array('TabPane', array('jQueryParams' => array(         'containerId' => 'mainForm',         'title' => 'AutoComplete and Slider'     ))) ));

- Устанавливаем суб-формам декоратор TabPane

Page 43: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетамиЭлементы форм

$subForm1->addElement('DatePicker', 'datePicker1', array(     "label" => "Date Picker:",     'JQueryParam' => array('dateFormat' => 'dd.mm.yy') ));

$subForm2->addElement('Slider', 'slider1', array(     "label" => "Slider:",     'JQueryParams' => array('defaultValue' => '75') ));

$subForm2->addElement('AutoComplete', 'acl', array(     "label" => "Autocomplete:", 'JQueryParams' => array(         'source' => array(             'New York', 'Berlin', 'Bern', 'Boston'         )     ) ));

- Добавляем элементы в суб-формы

Page 44: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Работа с виджетами

• Элементы форм• AutoComplete ( >= 1.8 )• ColorPicker ( 1.6 alpha? )• DatePicker• Slider• Spinner ( 1.6 alpha? )

• Виджеты компоновки• AccordionContainer• AccordionPane• DialogContainer• TabContainer• TabPain

• AjaxLink

Page 45: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Планы на будущее

• Поддержка компонента jqGrid • http://framework.zend.com/wiki/display/ZFPROP/

ZendX_JQuery_Jqgrid+-+Jason+Lentink

• Ваши идеи???

Page 46: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Подробнее?

• Dojo Toolkit • http://dojotoolkit.org• http://docs.dojocampus.org/

• jQuery и jQuery UI• http://jquery.com/• http://jqueryui.com/

• Zend Framework• http://framework.zend.com/manual/en/zend.dojo.html• http://framework.zend.com/manual/en/zendx.jquery.html

Page 47: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Мастерклассы по JavaScript

• В Питере! – в конце мая

• Ведущий: Илья Кантор• Создатель ресурса: javascript.ru• В прошлом – один из разрабочиков Dojo Toolkit

• Темы мастер-классов:• Профессиональное программирование JavaScript• Сложный Ajax и Comet• Клиентская оптимизация• Секреты jQuery

• Подробнее: http://javascript.ru/mk

Page 48: ZFConf 2010: jQuery and Dojo Toolkit JavaScript-frameworks Integration with Zend Framework

Вопросы ?

[email protected]• http://twitter.com/georgyturevich

Туревич Георгий, ведущий веб-программист Wizartech