vendredi 11 septembre 2015

Installer une extension sur Yii2 sans composer

Lorsque Yii2 est sorti, une grande avancée a été faite dans son système d'installation, ainsi que dans celui des extensions: l'utilisation de composer. Composer est un outil de gestion des dépendances en PHP qui est fort utile et pratique, un peu comme les gestionnaires de package sous linux (apt, yum, ...). Mais parfois, on ne peut pas l'utiliser, et c'est plutôt bloquant.

Je vais donc vous décrire, si possible simplement, comment ajouter une extension à Yii2 à la main.

Lire la suite...

lundi 17 mars 2014

Bloquer la sortie d'une page

Parfois, on a besoin de pouvoir interdire de quitter une page web autrement que par le "cheminement normal", c'est à dire très souvent par l'envoi d'un formulaire. Le but n'est bien entendu pas d'emprisonner le visiteur sur la page mais de l'alerter et de lui demander une confirmation de l'action qu'il veut réaliser.

L'astuce suivante fait appel à JQuery pour une simplification du code et de sa compatibilité entre les navigateurs mais peut être codée à la main si vous le désirez.

Bloquer la sortie

Pour cela, il suffit de faire appel à onbeforeunload une fois la page chargée:

jQuery(function($) {
   $(window).bind('beforeunload', function(){
      return 'message de confirmation';
   });
});

Le message de confirmation n'est pas visible sur tous les navigateurs, je ne l'ai vu que sur IE8 et il est plutôt mal mis en page.

Avec ce script, toute action fermant la page (même la fermeture du navigateur) demandera une confirmation à l'utilisateur.

Autoriser la sortie normale

La sortie normale de la page devant s'effectuer par une validation de formulaire, il suffit donc d'ajouter une fonction onclick sur le bouton de soumission qui désactivera le script:

<input type="submit" value="envoyer" onclick="$(window).unbind('beforeunload');" />

Un bloc à onglets sous Yii

J'ai eu besoin de pouvoir intégrer facilement un bloc avec des onglets dans une page générée par Yii et je n'ai rien trouvé d'assez léger, j'ai donc développé une petite extension: ETabbedDiv.

Elle utilise les fonctionnalités de jquery-ui et s'implémente très facilement:

Utilisation

  • dézippez le fichier et copiez ETabbedDiv.php dans votre répertoire protected/extensions/
  • appelez le widget depuis votre vue, comme dans l'exemple suivant:
<?php $this->widget('application.extensions.ETabbedDiv',
   array(
      'divClass' => 'tabbed',
      'tabs' => array(
         'tab1' => array('content' => '<p>Ceci est le premier onglet</p>'),
         'tab2' => array('title'=>'Second', 'content' => '<p>Ceci est le second onglet</p>'),
         'other' => array('content' => '<p>Et voila le dernier onglet</p>'),
      ),
   ),
);
?>

Paramètres

  • divClass (optionnel) est la classe CSS qui sera appliquée au bloc contenant les onglets,
  • tabs est un tableau associatif des onglets, sous la forme id => tableau de contenu décrit ci-dessous
    • title (optionnel) est le titre qui sera affiché dans l'onglet. S'il n'est pas renseigné, id sera utilisé
    • content est le contenu HTML a afficher dans l'onglet

Source

Vous trouverez la version anglaise sur Yii Framework

Lien de téléchargement sur ce blog : ETabbedDiv

lundi 14 octobre 2013

[MàJ] Yii : ajout d'une entrée depuis le CGridView

(Mise à jour : ajout de l'option fillIsFilter) Il est parfois utile de pouvoir remplir un CGridView directement depuis sa vue sans avoir à changer de page. Cette extension permet d'avoir un formulaire dans la grille et d'ajouter à la volée de nouvelles entrées.

Pour les anglophones, la source originale est sur cette page.

Lire la suite...

mercredi 11 avril 2012

[MàJ] Utiliser OpenStreetMap plutôt que GoogleMap ?

Edition du 11 avril: Je me rends compte que je n'ai pas mis l'adresse du site dédié, il s'agit de osmLeaflet.jQuery. C'est là que l'on peut facilement suivre les mises à jour et évolutions.

Depuis quelques temps, je m'intéresse au projet OpenStreetMap qui me semble une bonne alternative à GoogleMap pour l'intégration de cartes sur des sites.

Malheureusement pour les plus fainéant d'entre nous (moi y compris), aucun code officiel à utiliser directement n'existe. Sauf depuis l'intervention de Mathieu Robin qui a créé un plugin OSM pour JQuery, qu'il a appelé osmLeaflet.jQuery.

Voici l'exemple d'utilisation qu'il donne sur son billet d'explication qui vous montre la simplicité déconcertante de son utilisation, mais je vous invite fortement à aller voir le blog.

$(document).ready(function () {
    // Initialisation de la map
    var osmMap = $(document).osmLeaflet({
           target : 'map',
           zoom : 12,
           lattitude : 51.50,
           longitude : -0.09
    });
 
    // Ajout d'un marker
    osmMap.osmLeaflet('addMarker', {lattitude : 51.50, longitude : -0.09});
 
    // Ajout d'une popup
    osmMap.osmLeaflet('addPopup', {lattitude : 51.51, longitude : -0.13, text : "Hey !"});
});

jeudi 25 mars 2010

Ajax en post avec jQuery

Actuellement, jQuery possède une fonction ajax qui est getJSON et qui permet de faire des appels Ajax qui récupèrent des données au format JSON. Le seul souci est que les paramètres envoyées le sont en GET, avec toutes les contraintes que cela impose.

Pour pouvoir fonctionner en POST avec la même logique, j'ai étendu jQuery avec une fonction postJSON:

jQuery.extend({
   postJSON: function( url, data, callback) {
      return jQuery.post(url, data, callback, "json");
   }
});

Elle prend les mêmes arguments que getJSON mais fonctionne en POST.