Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Après de longues heures d'essais et recherches, je n'arrive toujours pas à faire fonctionner jQuery avec Zend Framework.
Pour l'instant, j'essais juste d'afficher une boîte de dialogue (dialogContainer).
Ma page d'index :
<?php // index.php // // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'development')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); $application->bootstrap() ->run();
Mon Bootstrap :
<?php // application/bootstrap.php // class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { public function run() { Zend_Registry::set('config', new Zend_Config($this->getOptions())); parent::run(); } . . . /** * Initialize view * * @return Zend_View */ protected function _initView() { $view = new Zend_View(); $view->doctype('XHTML1_STRICT'); $view->headMeta()->appendHttpEquiv('Content-Type','text/html; charset=utf-16'); ZendX_JQuery::enableView($view); $view->jQuery()->enable(); $view->jQuery()->uiEnable(); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer(); $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer'); $viewRenderer->setView($view); return $view; } }
Mon layout :
<?php echo $this->doctype(); ?> <html> <head> <?php echo $this->headMeta(); echo $this->headTitle('Titre'); echo $this->headLink()->prependStylesheet($this->layout()->getLayoutPath().'/css/styles.css'); if($this->jQuery()->isEnabled()) { $this->jQuery()->setLocalPath($this->layout()->getLayoutPath().'/../../js/jquery/jquery-1.4.2.min.js') ->setUiLocalPath($this->layout()->getLayoutPath().'/../../js/jquery/jquery-ui-1.8.custom.min.js') ->addStylesheet($this->layout()->getLayoutPath().'/../../js/jquery/themes/jquery.ui.all.css'); echo $this->jQuery(); } ?> </head> <body> <div class="body" id="body"> <?php //echo $this->layout()->content; ?> <?php echo $this->dialogContainer('test', 'Hello World', array( 'bgiframe' => true, 'autoOpen' => true, 'draggable' => true, 'modal' => true, 'resizable' => false, 'title' => 'Welcome message', 'closeOnEscape' => true)); ?> </div> </body> </html>
Avec tout ça, j'ai seulement le texte "Hello World" qui s'affiche sur la page.
Qu'est-ce que je fait faux ?
Dernière modification par Davjack (03-04-2010 17:08:37)
Hors ligne
Je me réponds tout seul. Il faut lancer le "echo $this->jQuery();" à la fin du Layout pour que les différents composants jQuery soient également lancées (logique... mais quand on cherche le problème complètement ailleurs, ce n'est pas facile à trouver :-D ).
En espérant que ça pourra en débloquer certains.
Hors ligne
enlève aussi ton if($this->jQuery()->isEnabled()), JQuery se lance tout seul si tu en as réellement besoin dans tes pages donc inutile et c'est peut-être sa qui te fait planter.
Hors ligne
Moi, je propose autre chose pour ton bootstrap.
En fait, je ne propose de ne rien mettre, mais de ce servir uniquement de application.ini
Attention, uniquement valable depuis 1.10 (resources JQuery)
ZendX doit être dans ton includePath (pas besoin de déclarer le namespace, l'autoloader le fait déjà)
A rajouté :
pluginPaths.ZendX_Application_Resource = "ZendX/Application/Resource/" resources.Jquery.localpath = "/js/vendor/jquery-1.4.2.min.js" resources.Jquery.uilocalpath = "/js/vendor/jquery-ui-1.8.min.js" resources.Jquery.javascriptfiles[] = "/js/vendor/jquery.hoverIntent.minified.js" resources.Jquery.javascriptfiles[] = "/js/common.js" resources.Jquery.javascriptfiles[] = "/js/myMenu.js" resources.Jquery.stylesheets[] = "/css/reset.css" resources.Jquery.stylesheets[] = "/css/ui/ui.base.css" resources.Jquery.stylesheets[] = "/css/uiThemes/start/theme.css"
et bien sur, il suffit juste de mettre le echo $this->JQuery() dans le layout
voir ZendFramework/extras/library/ZendX/Application/Resource/Jquery.php pour toutes les options
Hors ligne
Le fait d'ajouter les ressources jQuery dans le fichier de config épure bien le code. Merci pour le conseil
Hors ligne
Oui effectivement, c'est sûr que cela épure le code. Par contre, moi j'ai un petit problème. Dès que je rajout ces lignes dans mon fichiers de configuration, voici les erreurs que je retrouve :
[27-Apr-2010 13:22:59] PHP Fatal error: Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Resource matching "view" not found' in C:\usr\share\zend\1.10.3\library\Zend\Application\Bootstrap\BootstrapAbstract.php:690 Stack trace: #0 C:\usr\share\zend\1.10.3\library\Zend\Application\Bootstrap\BootstrapAbstract.php(625): Zend_Application_Bootstrap_BootstrapAbstract->_executeResource('view') #1 C:\usr\share\zend\1.10.3\library\Zend\Application\Bootstrap\BootstrapAbstract.php(582): Zend_Application_Bootstrap_BootstrapAbstract->_bootstrap('view') #2 C:\usr\share\zend\1.10.3\extras\library\ZendX\Application\Resource\Jquery.php(87): Zend_Application_Bootstrap_BootstrapAbstract->bootstrap('view') #3 C:\usr\share\zend\1.10.3\extras\library\ZendX\Application\Resource\Jquery.php(76): ZendX_Application_Resource_Jquery->getJquery() #4 C:\usr\share\zend\1.10.3\library\Zend\Application\Bootstrap\BootstrapAbstract.php(679): ZendX_Application_Resource_Jquery->init() #5 C:\usr\share\zend\1.10.3\library\Zend\Application\Bootstrap\BootstrapAbstract in C:\usr\share\zend\1.10.3\library\Zend\Application\Bootstrap\BootstrapAbstract.php on line 690
Je comprend qu'il n'arrive pas à satisfaire la dépendance avec la ressource View, mais je ne comprend pas pourquoi ?
Hors ligne
Finalement j'ai trouvé une solution. Cependant j'aimerais quand même que quelqu'un m'explique.
J'ai rajouté cette ligne dans mon fichier de configuration :
resources.view[] = ""
Ma question est donc la suivante, cette ligne sert bien à initialiser la ressource View ? Si oui, quelle est la différence avec ce bout de code (ZendX_Application_Resource_Jquery : ligne 86) :
$this->getBootstrap()->bootstrap('view');
Merci d'avance
Hors ligne
Pages: 1