Archives par mot-clef : jQuery

En cette fin d’année, faisons le point

Catégorie : Informations | Laisser un commentaire

Voilà maintenant presque 7 mois que je me suis lancé dans l’aventure « blog » avec 30 minutes par jour, et j’avoue que j’y prend assez goût. C’est un plaisir de travailler sous Dotclear, et c’est pour moi un bon challenge que d’essayer d’apprendre des choses nouvelles tous les jours. Apprendre n’est pas forcément très compliqué, surtout qu’en 30 minutes, on n’a pas forcément l’occasion d’aller bien loin. Pratiquer est déjà un petit peu plus délicat, cela dit, en général j’apprends des choses qui me sont utiles pour mes « problèmes » du moment (comme dernièrement le billet expliquant comment [utiliser plusieurs feuilles CSS sur une même page|/post/2009/plusieurs-css-sur-une-seule-page]) donc cela reste dans le domaine du faisable. Mais lorsqu’il s’agit de transcrire ces connaissances sous forme de billets, cela devient légèrement plus difficile. J’essaie de synthétiser les informations, de trouver une manière de les expliquer de telles sortes que cela soit facilement et rapidement compréhensible. (de façon à ce qu’en lisant mon billet, moi, ou un autre lecteur, n’est pas besoin de relire mes 36 000 sources pour comprendre quelque chose) Se pose alors la question cruciale : est-ce qu’il me faut expliquer tout ce que j’ai appris, ou simplement donner les grandes lignes, celles qui permettent de comprendre le reste en se plongeant un peu dans le sujet ? Ces derniers temps, par manque de temps, je pratique surtout la deuxième option. Mais je pense qu’il est bon d’alterner un peu les deux.%%% J’ai terminé ma série PHP Objet, malgré le fait que je n’ai jamais vraiment terminé (ni même commencé) le projet [Doodle Like en PHP Objet|/post/2009/06/17/Cahier-des-charges-Doodle-like-en-PHP-objet]. Cela dit, je suis sur un autre projet que je code en PHP Objet, donc on pourra dire que cela fera office de projet de fin de série. Il va d’ailleurs falloir que je commence une nouvelle série, mais j’hésite encore sur le thème à choisir. JQuery (la doc manque cruellement en français sur Internet, enfin, de ce que j’ai pu voir), Java, CSS3 et son ami HTML5… Je m’accorde encore un peu de répit pour me décider. %%% Avec tout ça, j’arrive quand même à écrire une moyenne de 2 billets par semaine. En théorie il m’en faudrait 5. Ce résultat ne me convient donc pas forcément, mais c’est déjà ça.%%% Quant à la fréquentation des visiteurs, elle a un peu augmenté depuis le mois de Mai, puisque c’est maintenant une douzaine de personne par jour qui visitent le site. En majorité de nouveaux visiteurs (70%), qui proviennent généralement des moteurs de recherche (78%), bref, rien d’étonnant. %%% Donc mes résolutions pour cette nouvelle année : * Finir la série PHP Objet avec mon projet de fin de série * Démarrer une nouvelle série * Ecrire un peu plus souvent des billets * Continuer à améliorer le blog dès que je trouve le temps Et puisque je n’aurai pas l’occasion de le dire le jour J : __bonne année 2010 et meilleurs vœux !__

javascript

Uploadify : uploader facilement avec Jquery

Catégorie : Javascript | Un commentaire

Voilà déjà quelques temps que j’entretiens, en parallèle de mon script « toolbar BBcode » un script d’upload de fichiers. Il contient une interface d’administration bien complète, et l’interface utilisateur permet d’uploader facilement un ou plusieurs fichiers à la fois, en renommant, écrasant, sélectionnant un dossier particulier, et bien sûr la gestion des fichiers déjà uploadés permet d’en faire autant. Récemment, en apprenant des notions d’Ajax, j’ai même appris à faire des uploads sans rechargement de pages, c’est beaucoup plus zoulie !

Alors forcément, le jour où j’ai découvert Uploadify, un plugin d’upload super zoulie, super pratique, super rapide à installer, via jQuery, bah… oui, ça m’a fait un choc. Je l’ai testé aujourd’hui pour de vrai, et y a pas à dire : c’est cool ! Un script javascript (jQuery), et un fichier swf (i.e. flash) se chargent de l’interface et d’afficher une file d’attente des fichiers en cours d’uploads, et une petite barre de progression, pour la forme, bien entendu (pourquoi se contenter d’un petit gif de chargement… ? *soupir*) ! Reste à écrire le fichier PHP (ou autre. Un exemple sommaire est fournie avec le plugin) pour uploader vos fichiers comme vous voulez (création de miniatures et tout le tintouin) en renvoyant 1 si tout va bien, et 0 si ça bug.
Alors, c’est vrai que mon premier test n’est pas des plus jolies, mais en environ 30 minutes, j’ai réussi à installer le plugin (je ne connais quasiment pas jQuery), à le faire fonctionner, et ajouter une petite liste défilante pour modifier à la volée le dossier récepteur. Reste à améliorer le design, l’ergonomie, à pouvoir créer des répertoires à la volée, et surtout à améliorer le script d’uploads. (créations de miniatures, dézippage de fichiers compressés, etc, etc…)
Bref, un peu d’amusement en perspective ! Au passage, je n’ai pas réussi à le faire fonctionner en local. Le dossier de réception ne prenait pas en compte les alias que j’ai configuré sur mon EasyPHP. Hum, mouais, à voir… Voici les avantages/inconvénients que j’ai pu lister :

  • Facile à installer et à configurer
  • Facile à utiliser et vraiment jolie

Par contre :

  • Brut de forme, les utilisateurs ayant désactivé Javascript ne peuvent utiliser le formulaire d’upload
  • Pour des actions un peu poussé (choix d’un dossier différent pour chaque upload en cours par exemple), on peut se retrouver bloquer
  • Le plugin est en anglais par défaut. Heureusement, Code18 (encore lui) nous explique comment changer ça. On espère avec lui que sa fonctionnalité sera ajouté dans les versions à venir. Have fun!

Comment faire

En relisant ce billet, je me suis aperçu qu’il ne servait pas à grand chose. Pourtant, il semble ressortir pas mal dans les recherches Google. Je me dois donc de l’agrémenter de quelques lignes, par exemple en présentant mon code, pour qu’il soit un peu plus utile. Le but est d’obtenir le résultat précédant. Commençons par le code HTML :

<div id="fileAttente"></div>
<input id="uploadify" type="file" name="uploadify" />
<select id="folder" name="folder" onchange="changeFolder(this)">
  <option value="data/media">Media</option>
  <option value="data/rss">RSS</option>
</select>

<a href="javascript:$('#uploadify').uploadifyUpload();">Lancer l'upload</a>
|
<a href="javascript:jQuery('#uploadify').uploadifyClearQueue()">Effacer la liste</a>

On peut voir qu’il y a un div pour la file d’attente, un champ de type upload, un sélecteur de dossier, et des liens pour lancer l’upload et effacer la liste d’attente. Bref, en remplaçant les liens par des boutons cliquables, on a tout ce qu’il faut pour rendre l’upload accessible aux personnes ayant désactivées Javascript.

J’ai encore un onchange qui traine, mais c’est juste que je ne maîtrise toujours pas suffisamment jQuery pour le retirer. Bon maintenant, le code Javascript qui se trouve sur la même page :

<script type="text/javascript" language="javascript" src="./themes/global/js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="./themes/global/js/swfobject.js"></script>
<script type="text/javascript" src="./themes/global/js/jquery.uploadify-2.1.0.min.js">
</script>
/* ... */
<script type="text/javascript">
// <![CDATA[
$(document).ready(function() {
  $("#uploadify").uploadify({
    'uploader': './include/classes/upload/uploadify.swf',
    'script' : './include/classes/upload/uploadify.php',
    'cancelImg' : './themes/global/img/cancel.png',
    'folder': 'data/media',
    'queueID' : 'fileAttente',
    'multi' : true,
    'buttonText' : 'Parcourir'
  });
});

function changeFolder(select) {
  var numero = select.selectedIndex;
  var valeur = select.options[numero].value;
  $('#uploadify').uploadifySettings('folder', valeur);
}
// ]]>
</script>
  • uploader : correspond au fichier flash pour l’affichage de la barre de défilement
  • script : c’est le script PHP qui se chargera de l’upload (et donc des vérifications, de la miniturisation, l’enregistrement en BDD, …)
  • cancelImg : url vers l’image pour annuler une upload de la file d’attente (avant que celle-ci n’est démarrée)
  • folder : c’est le dossier par défaut où seront uploadées les fichiers. C’est cette valeur que l’on changera avec changeFolder
  • queueID : l’id de la balise pour la file d’attente
  • multi : pour uploader plusieurs fichiers en même temps
  • buttonText : Texte à afficher sur le bouton Parcourir

On a donc initialisé Uploadify. Et juste avant, dans le header, on a appelé les différents fichiers : le design CSS pour l’affichage, JQuery, le fichier Javascript Uploadify, et un fichier javascript swfobject pour régler un p’tit souci avec la gestion du flash en PHP et Javascript. Quant à la fonction changeFolder, elle est appelée dès qu’un utilisateur change la valeur du sélecteur de dossiers, et comme vous pouvez le voir, elle modifie la valeur de la variable folder. Bref, tout est là ! Si le fichier uploadify.php fonctionne correctement, les fichiers seront uploadés comme il faut au bon endroit !

Pour ma phase de tests, mon fichier d’upload était minimaliste :

if (!empty($_FILES)) {
  $tempFile = $_FILES['Filedata']['tmp_name'];
  $targetPath = $_SERVER['DOCUMENT_ROOT'] . $_REQUEST['folder'] . '/';
  $targetFile = str_replace('//','/',$targetPath) . $_FILES['Filedata']['name'];
  move_uploaded_file($tempFile,$targetFile);
  echo "1";
}

Pour aller plus loin

Joomla est-il réellement la bonne solution

Catégorie : Informations | Laisser un commentaire

J’ai actuellement 3 projets de cours qui se rapprochent de leur version finale. (enfin, en théorie ^^) Dans les jours qui viennent, je vais donc avoir plus de temps pour trimer des heures dessus, que pour cogiter 30 minutes sur Joomla. Je suis en train de réfléchir actuellement sur le choix de Joomla pour héberger ce blog. Je ne connaissais pas ce CMS auparavant, et maintenant que j’en aperçois les contours, je me rends bien compte que ce n’est pas ce que je recherche pour animer et utiliser quotidiennement un site comme celui-ci. Trop long, trop lourd. J’envisage (peut-être) de mettre en pause l’apprentissage de Joomla quelques temps pour passer à un autre CMS que j’utiliserai pour ce blog. Je reprandrai alors sûrement Joomla plus tard puisqu’il est très demandé par des entreprises, c’est donc un outils à bien connaitre. Enfin, j’avoue que je préfèrerai me pencher sur la programmation orientée objet en PHP, ou sur le framewrok Jquery pour Javascript. Ces deux notions sont aussi très demandés dans le milieu professionnel et cela me parait plus intéressant. Mais bon, on verra ! Tout ceci n’est qu’au stade de la réflexion, et en attendant, je continuerai à bidouiller sur Joomla.