Phalcon-JQuery est une librairie PHP compatible avec le Framework Phalcon. Elle permet d'intégrer facilement JQuery, JQuery UI ou Twitter Bootstrap dans les projets Web Phalcon, en respectant la séparation des couches MVC. |
'application' => array( 'controllersDir' => __DIR__ . '/../../app/controllers/', 'modelsDir' => __DIR__ . '/../../app/models/', 'viewsDir' => __DIR__ . '/../../app/views/', 'pluginsDir' => __DIR__ . '/../../app/plugins/', 'libraryDir' => __DIR__ . '/../../app/library/', 'cacheDir' => __DIR__ . '/../../app/cache/', 'baseUri' => '/siteBaseURL/', );Vérifier également la présence de libraryDir dans le fichier loader.php : $loader = new \Phalcon\Loader(); /** * We're a registering a set of directories taken from the configuration file */ $loader->registerDirs( array( $config->application->controllersDir, $config->application->modelsDir, $config->application->libraryDir ) )->register(); |
Dézipper l'archive 1.3.4.zip dans le dossier référencé par le Path variable PHP défini pour Phalcon dans votre IDE. Le dossier 1.3.4 contenu dans l'archive doit remplacer l'ancien pahlcon-devtools/ide/1.3.4
Vérifiez que la complétion fonctionne sur la variable $this→jquery dans un contrôleur phalcon.
Pour ajouter Phalcon-JQuery à un projet Phalcon, il est nécessaire d'injecter le service JQuery au démarrage de l'application :
$di->set("jquery",function(){ $jquery= new Ajax\JsUtils(array("driver"=>"Jquery")); $jquery->ui(new Ajax\JqueryUI());//optional for Phalcon JQuery UI $jquery->bootstrap(new Ajax\Bootstrap());//Optional for Phalcon Twitter Bootstrap return $jquery; });
Pour fonctionner correctement, les librairies JS suivantes doivent être insérées dans les pages HTML principales (non sollicitées via ajax).
Librairie activée | Fichier JS | Fichier css |
---|---|---|
JQuery | jquery-min.js | |
JQuery UI* | jquery-ui-min.js | jquery-ui.css |
Twitter Bootstrap* | bootstrap.min.js | bootstrap.min.css |
* optionnel
<html> <head> <?php // JQuery echo Phalcon\Tag::javascriptInclude("http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js", false); //jquery ui echo Phalcon\Tag::javascriptInclude("https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js", false); //Thème Humanity for UI echo Phalcon\Tag::stylesheetLink("https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/humanity/jquery-ui.css", false); ?> </head>
Même chose si vous utilisez volt :
<html> <head> <!--JQuery --> {{javascript_include("http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js", false)}} <!--jquery ui --> {{javascript_include("https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js", false)}} <!--Thème Humanity for UI --> {{stylesheet_link("https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/humanity/jquery-ui.css", false)}} </head>
Pour une installation locale :
<html> <head> <?php // JQuery echo Phalcon\Tag::javascriptInclude("js/jquery.min.js"); //jquery ui echo Phalcon\Tag::javascriptInclude("js/jquery-ui.min.js"); //Thème Humanity for UI echo Phalcon\Tag::stylesheetLink("css/jquery-ui.css"); ?> </head>
Il est possible de récupérer directement via les classes CDN* les adresses des librairies et de générer automatiquement leur inclusion en suivant les étapes ci-dessous :
Pour chaque action sollicitée par le contrôleur, on passe à la vue une variable jqueryCDN contenant les liens CDN à générer : Sans autre précisions, la méthode genCDNs génère l'insertion des liens en prenant les versions les plus récentes des librairies nécessaires : Si le service jquery injecté au démarrage de l'application déclare JQuery UI, les fichiers JS et CSS de UI seront insérés, de même pour Bootstrap.
class ExempleController extends ControllerBase{ public function initialize(){ $this->view->setVar("jqueryCDN", $this->jquery->genDCNs("humanity")); } ...
<html> <head> <?php echo $jqueryCDN; ?> ...
Résultat produit avec JQuery UI (Humanity template)+ Bootstrap activés :
<head> ... <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script> <link rel="stylesheet" type="text/css" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/humanity/jquery-ui.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css"> <script type="text/javascript" src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script> ... </head>
Le principe d'utilisation est toujours le même, que ce soit avec JQuery, JQuery UI ou Twitter Bootstrap :
Il est nécessaire d'injecter le service JQuery au démarrage de l'application :
$di->set("jquery",function(){ $jquery= new Ajax\JsUtils(array("driver"=>"Jquery")); return $jquery; });
Il s'agit par exemple d'effectuer une requête Ajax vers la page exemple/reponse de notre site, sur le click du bouton d'id btn, et d'afficher la réponse dans la zone d'id panelReponse :
class ExempleController extends \Phalcon\Mvc\Controller public function ajaxSampleAction(){ $this->jquery->getAndBindTo("#btn", "click", "exemple/reponse","#panelReponse"); $this->jquery->compile($this->view); } ...
La vue associée à notre action (app/views/Exemple/ajaxSample.volt) récupère la variable $script_foot, générée par l'appel de la méthode jquery→compile appelée dans le contrôleur :
<button id="btn">Lancer la requête</button> <div id="panelReponse">Réponse non reçue</div> {{script_foot}}
Pour l'instant, le click sur le bouton btn génère une réponse avec erreur 404, puisque l'action sollicitée n'existe pas : il faut donc créer l'action reponse dans le contrôleur Exemple :
class ExempleController extends \Phalcon\Mvc\Controller ... public function reponseAction(){ echo "Réponse bien reçue"; $this->view->disable(); } ...
Pour aller plus loin : Phalcon-jquery : JQuery
Il est nécessaire d'injecter le service JQuery au démarrage de l'application, et d'instancier JQuery UI :
$di->set("jquery",function(){ $jquery= new Ajax\JsUtils(array("driver"=>"Jquery")); $jquery->ui(new Ajax\JqueryUI());//for JQuery UI return $jquery; });
Contrairement à Bootsrap, JQuery UI ne s'occupe pas de la partie DOM, le bouton doit donc déjà exister dans la page pour invoquer la méthode button :
class ExempleController extends \Phalcon\Mvc\Controller{ ... public function buttonsAction(){ $bt1=$this->jquery->ui()->button("#btHide",array("label"=>"Masquer le panel","icons"=>"{ primary: 'ui-icon-locked' }")); $bt1->on("click",$this->jquery->hide(".toHide",3000)); echo "<button id='btHide'></button>"; echo "<div class='toHide'><p>To hide panel</p></div>"; echo $this->jquery->compile(); $this->view->disableLevel(View::LEVEL_ACTION_VIEW); } ...
Il est nécessaire d'injecter le service JQuery au démarrage de l'application, et d'instancier Bootstrap :
$di->set("jquery",function(){ $jquery= new Ajax\JsUtils(array("driver"=>"Jquery")); $jquery->bootstrap(new Ajax\Bootstrap());//for Twitter Bootstrap return $jquery; });
Avec Bootsrap, le bouton est créé dans la page :
class ExempleController extends \Phalcon\Mvc\Controller{ ... public function buttonsbsAction(){ $bt1=new HtmlButton("bt1"); $bt1->setValue("Masquer le panel"); $bt1->setStyle(CssRef::CSS_PRIMARY); $bt1->onClick($this->jquery->hide(".toHide",3000)); echo $bt1->compile($this->jquery); echo "<div class='panel panel-default container toHide'><br><p>To hide panel</p><br></div>"; echo $this->jquery->compile(); $this->view->disableLevel(View::LEVEL_ACTION_VIEW); } ...
Pour aller plus loin : Bootstrap