nyroBlog
Bannière NyroBlog, par DëuG
Image par DëuG - ?

Tag : JavaScript


Embed.ly, ou comment être au top

Vous connaissez sûrement embed.ly. C'est un service qui, comme son nom l'indique à tout anglo-développeur qui soit, permet d'incroporer des contenus externes sur son site facilement.

L'idée de leur API est simple : on envoie une URL d'un média sur un site de partage de contenu (youtube, dailymotion, twitter, google Maps, etc etc... et de nombreux autres) et l'API nous renvoie un maximum d'informations sur cette vidéo : auteur, date d'ajout, mais surtout, le code HTML pour embeder la vidéo sur son site ; c'est à dire e player Flash, l'iFrame ou autre selon les besoins.

Bref, un réel avantage et gain de temps pour le développeur qui peut proposer, en quelques lignes de code un nombre impressionnant de sites de partage de contenus.

 

Oui bon ok, mais en quoi ils sont géniaux ces gens ?

J'y viens.

 

Depuis sa version 2, nyroModal utilise embed.ly pour afficher les contenus de partage directement dans une modale. De simplement youtube auparavant, le projet open-source est donc passé à une multitude de sites de vidéos différents, mais aussi des tweets, des cartes google, etc...

Un must!

L'API d'Embed.ly était alors gratuite et sans aucune limite, ne nécessitant aucun inscription et compte chez eux.

 

Puis, Embed.ly a évolué. Pour monétiser leur API, ils ont mis en place différents plans et prix pour leur API. Il existe toujours une API libre avec un minimum de service - les mêmes qu'avant- avec une limite de 10 000 requêtes par mois.

Pour que nyroModal continue de fonctionner, j'ai donc mis à jour le code source le 17 septembre en créant une clé chez Embed.ly et en l'incluant sur ma page de démo.

Le commit en question sur GitHub.

 

Oui mais voilà. nyroModal tourne à une moyenne de 1 000 visites par jours. A raison de 3 urls qui envoient des requêtes vers embed.ly, on arrive à la fameuse limite gratuite de 10 000 en 3 jours. Qui plus est, sur la page de démo spéciale embed.ly, on a quelques 170 liens de démo.

 

Dans sa grande bonté, embed.ly m'a envoyé un email le 25 septembre m'indiquant que j'arrivais près de cette limite (environ 8 000). J'ai donc décider de mettre en place un cache en PHP des requêtes faites à embed.ly pour régler le problème.

Le 26 septembre, le commit était envoyé et je pensais avori réglé le problème et être tranquille de ce côté là. Quelques tests, ça marche.

 

Bon, et embed.ly, c'est à quel moment qu'ils sont sympa et les best of the world ?

J'y suis.

Le 27 septembre, je reçois un nouvel email m'indiquant que j'ai dépassé la limite. Ni une ni deux, je replonge dans le code, j'analyse et je trace ce que j'envois à embed.ly et comment je créer le nom du fichier du cache. En réalité, jQuery ajoute un paramètre à la requête, nommé simplement "_" qui permet de ne pas mettre en cache la réponse.

Je corrige immédiatement le bug, le commit, le met en place et teste à nouveau.

Ça ne marche plus du tout ! Les réponses d'embed.ly sont simplement vide.

Normal, j'ai dépassé le quota et dois passer à un plan payant pour continuer à utiliser l'API.

 

Je relis l'email d'embed.ly et je vois : "Please reply to this email with questions."

Sans trop d'espoirs, j'écris un email leur expliquant la situation et que je ne voulais pas payer car je ne gagne pas d'argent avec.

 

Puis je me balade sur le dashboard d'Embed.ly, à lire leur FAQ, leurs prix, etc...

Et seulement 9 minutes plus tard, je reçois 2 réponses d'employés d'embed.ly.

Hey Cedric,

If you are just using the key as a demo for nyroModal, then there is no
reason for us to charge you. I've updated your account, but I ask that you
add the IPs that your proxy server is going to hit Embedly from here:
https://app.embed.ly/organizations/nyrodev--nyromodal/ip.

This way we can assure that the key is only being used by the demo site.

Thanks,

Sean

Ce Sean a simplement passé mon abonnement à 50 000 requêtes par mois. Gratuitement et sans autres demandes d'explications. Je m'exécute à ajouter l'adresse IP de mon serveur comme demandée, et une autre réponse d'un autre employé :

Cédric,

I've reset your monthly counter. Enjoy my friend!

Bob Corsaro

Lui a remis mon compte à zéro pour le mois en cours. Niquel aussi.

Alors voilà. Ces gens ont tout compris. Là où certaines entreprises auraient sûrement chercher à faire payer ou demander plus d'explications, recherche un peu plus que ça, eux ont, en 10 minutes seulement, résolu mon problème et même encourager à faire de l'open-source :

We love it when people incorporate Embedly into open source projects and we are happy to help out the developers.

Je suis persuadé que cette souplesse dans leur gestion est dû au fait qu'il ne soit que 4 dans l'équipe. Ils peuvent réagir rapidement et comme ils le veulent.

 

Pour conclure, utilisez embed.ly ! Ce service fonctionne du feu de dieu et les gens qui sont derrière sont au top.

nyroModal : create a link in the title

A small technical post for nyroModal, after a question posted on github.

The demand is simple: add a link in the title of a modal.

On this post, I'll explain step by step the method to add this functionality to nyroModal on image. The URL of the link will be add on the rev attribute of the opener link.

All files are available at the bottom of the post.

 

Step 1 : Download nyroModal

First step is obviously to download the last nyroModal version. You can choose to download the whole package, but I always prefer create my own package to suit exactly my needs.

For this example, here is element I used:

  • anims.fade : not mandatory, but it prettier to have some animations during opening and closing the modal
  • filters.title : we need it, we'll base our code on this filter to add the link
  • filters.link : mandatory too, this is the filter which permit to react on the click of a link
  • filters.image : I decided to open an image, so I need it.

Once you've got the zip download, extract all the files where you want. We are now ready to work.

 

Step 2 : Create the basic HTML file

Before adding our behavior, let's start by creating a HTML with the minimum elements in there:

<!DOCTYPE HTML>
<html>
<head>
    <title>nyroModal : Link in title</title>
    <link rel="stylesheet" href="styles/nyroModal.css" type="text/css" media="screen" />
</head>
<body>
    <a href="http://images.easyart.com/i/prints/rw/lg/1/3/Romero-Britto-Flower-Power-IV-130134.jpg" class="nyroModal" title="Flower Power IV">Flower Power IV</a>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
    <script type="text/javascript" src="js/jquery.nyroModal.custom.js"></script>
    <!--[if IE 6]>
        <script type="text/javascript" src="js/jquery.nyroModal-ie6.min.js"></script>
    <![endif]-->
    <script type="text/javascript">
    jQuery(function($) {
        $('.nyroModal').nm();
    });
    </script>
</body>
</html>

On this page, nyroModal CSS is loaded and a link to an image is added. Then the needed javascripts are loaded. Using one line of code, the nyroModal behavior is finally added.

The link already have it's title attribute to automatically create, using filters.title, the modal title.

 

Step 3 : Study filters.title

To try add out functionality on the title of the modal, we first have to understand how it works. To do that, we can read the source on github.

We can see the h1 element is stored on variable nm.store.title and created by the beforeShowCont callback.

nyroModal is developed in order to call all filters callbacks. Then callbacks defined during creating of the nyroModal objects on the callbacks settings are called.

To add the behavior, we'll so add it in the beforeShowCont callback of this setting, using nm.store.title variable and usual jQuery.

 

Step 4 : Add the functionality

We now know how to proceed. Let's dot it!..

We add the rev attribute containing the URL of the link to add, and the code to add the behavior. The HTML page becomes:

<!DOCTYPE HTML>
<html>
<head>
    <title>nyroModal : Link in title</title>
    <link rel="stylesheet" href="styles/nyroModal.css" type="text/css" media="screen" />
</head>
<body>
    <a href="http://images.easyart.com/i/prints/rw/lg/1/3/Romero-Britto-Flower-Power-IV-130134.jpg" class="nyroModal"
        title="Flower Power IV" rev="http://www.easyart.fr/posters/Romero-Britto/Flower-Power-IV-130134.html">Flower Power IV</a>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
    <script type="text/javascript" src="js/jquery.nyroModal.custom.js"></script>
    <!--[if IE 6]>
        <script type="text/javascript" src="js/jquery.nyroModal-ie6.min.js"></script>
    <![endif]-->
    <script type="text/javascript">
    jQuery(function($) {
        $('.nyroModal').nm({
            callbacks: {
                beforeShowCont: function(nm) {
                    if (nm._hasFilter('title') && nm.opener.is('[rev]')) {
                        nm.store.title.html('<a href="'+nm.opener.attr('rev')+'">'+nm.store.title.text()+'</a>');
                    }
                }
            }
        });
    });
    </script>
</body>
</html>

What's inside the callback?

We first check if the filter title is activated and if the opener link has a rev attribute => Conditions are reach to add the link.

The next line update the h1 stored in nm.store.title to replace it's content by a link pointing to rev attribute and containing the text of the original content.

Voilà, done. 2 lines of effective code to add this functionality.

 

Conclusion

To add a behavior to an open-source project, 2 questions must be asked before starting:

  • What are we trying to do?
  • How can I do that?

Then, by analyzing code and documentation, we find a way to develop what we want more or less simply.

I always tell to my clients: "Yes, everything is possible. We just need to have time for that."

 

Files

You can see the sources here: http://nyrodev.info/dl/nyroModalLinkTitle/

You can download all files on a Zip archive here: http://nyrodev.info/dl/nyroModalLinkTitle/nyroModalLinkTitle.zip

 

French version of this post

nyroModal : créer un lien dans le title

Un petit billet technique pour nyroModal, suite à une demande postée sur github.

La demande est simple : ajouter un lien dans le titre de la fenêtre modale.

Dans ce billet, je vais expliquer pas à pas la méthode pour ajouter cette fonctionnalité à nyroModal sur une image. L'url du lien a ajouter devra se trouver dans l'attribut rev du lien ouvrant la fenêtre modale.

L'ensemble des fichiers est téléchargeable à la fin du billet.

 

Étape 1 : Télécharger nyroModal

La première étape consiste évidemment à télécharger la dernière version de nyroModal. Vous pouvez choisir de télécharger l'ensemble des fichiers, mais je préfère toujours créer mon propre package avec uniquement les éléments dont j'ai besoin.

Pour l'exemple, voici ceux que j'ai sélectionné :

  • anims.fade : pas obligatoire, mais toujours plus agréable d'avoir quelques animations pour l'ouverture ou la fermeture de la modale.
  • filters.title : on en a évidemment besoin, on va se baser dessus pour ajouter le lien
  • filters.link : obligatoire aussi, c'est le filtre qui permet d'ajouter la réaction au click sur le lien
  • filters.image : j'ai décidé d'ouvrir une image pour l'exemple, donc j'en ai besoin.

Une fois le zip téléchargé, une petite extraction là où en a envie. On va pouvoir commencer à travailler.

 

Étape 2 : Créer le fichier HTML de base

Avant d'ajouter la fonctionnalité, commençons par mettre en place notre fichier HTML avec le strict minimum :

<!DOCTYPE HTML>
<html>
<head>
    <title>nyroModal : Link in title</title>
    <link rel="stylesheet" href="styles/nyroModal.css" type="text/css" media="screen" />
</head>
<body>
    <a href="http://images.easyart.com/i/prints/rw/lg/1/3/Romero-Britto-Flower-Power-IV-130134.jpg" class="nyroModal" title="Flower Power IV">Flower Power IV</a>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
    <script type="text/javascript" src="js/jquery.nyroModal.custom.js"></script>
    <!--[if IE 6]>
        <script type="text/javascript" src="js/jquery.nyroModal-ie6.min.js"></script>
    <![endif]-->
    <script type="text/javascript">
    jQuery(function($) {
        $('.nyroModal').nm();
    });
    </script>
</body>
</html>

Dans cette page, je charge la CSS de nyroModal, ajoute un lien vers une image et charge les JavaScript nécessaires. Puis en une ligne, nyroModal est instanciée.

Le lien vers l'image a déjà l'attribut title pour créer automatiquement, via le filters.title le titre de la fenêtre modale.

 

Étape 3 : Étudier filters.title

Pour tenter d'ajouter une fonctionnalité au titre de la modale, il faut d'abord comprendre comment il fonctionne. Pour ce faire, on regarde la source sur github.

On y voit que l'élément h1 du titre est stocké dans la variable nm.store.title et est créé dans le callback beforeShowCont.

nyroModal est développé de sorte que tous les callbacks des filtres sont appelés. Puis, les callbacks définis lors de l'instanciation de nyroModal (via le paramètre callbacks) sont appelés.

Pour ajouter la fonctionnalité, nous allons donc pouvoir la mettre dans le callback beforeShowCont de ce paramètre, en utilisant la variable nm.store.title et du jQuery habituel.

 

Étape 4 : Ajouter la fonctionnalité

On sait maintenant comment procéder. Il ne reste plus qu'à...

On ajoute l'attribut rev destiné à contenir l'URL du lien à ajouter, puis dans le code de l'instanciation des liens nyroModal, on ajoute un callback. La page HTML devient :

<!DOCTYPE HTML>
<html>
<head>
    <title>nyroModal : Link in title</title>
    <link rel="stylesheet" href="styles/nyroModal.css" type="text/css" media="screen" />
</head>
<body>
    <a href="http://images.easyart.com/i/prints/rw/lg/1/3/Romero-Britto-Flower-Power-IV-130134.jpg" class="nyroModal"
        title="Flower Power IV" rev="http://www.easyart.fr/posters/Romero-Britto/Flower-Power-IV-130134.html">Flower Power IV</a>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.0/jquery.min.js"></script>
    <script type="text/javascript" src="js/jquery.nyroModal.custom.js"></script>
    <!--[if IE 6]>
        <script type="text/javascript" src="js/jquery.nyroModal-ie6.min.js"></script>
    <![endif]-->
    <script type="text/javascript">
    jQuery(function($) {
        $('.nyroModal').nm({
            callbacks: {
                beforeShowCont: function(nm) {
                    if (nm._hasFilter('title') && nm.opener.is('[rev]')) {
                        nm.store.title.html('<a href="'+nm.opener.attr('rev')+'">'+nm.store.title.text()+'</a>');
                    }
                }
            }
        });
    });
    </script>
</body>
</html>

Alors, qu'y a t-il dans ce callback ?

On vérifie d'abord que le filtre title soit bien activé et que le lien ouvrant possède un attribut rev => Les conditions sont remplis pour ajouter la fonctionnalité.

Puis la ligne en dessous, on modifie le h1 stocké dans nm.store.title pour remplacer le simple texte par un lien vers l'URL de l'attribut rev et le texte est conservé.

Voilà, fini. 2 lignes de code effective pour ajouter cette fonctionnalité.

 

Conclusion

Pour ajouter des fonctionnalité à un script open-source, il faut toujours se poser deux questions avant de commencer :

  • Qu'est-ce qu'on veut réaliser ?
  • Comment va-t-on le mettre en place ?

Puis, par l'analyse du code et de la documentation, on trouve un moyen de développer ce qu'on veut plus ou moins simplement.

Je dis toujours à mes clients : "Oui, tout est possible. Il suffit d'avoir le temps."

 

Les fichiers

Vous pouvez voir les source ici : http://nyrodev.info/dl/nyroModalLinkTitle/

Vous pouvez télécharger l'ensemble des sources au format Zip ici : http://nyrodev.info/dl/nyroModalLinkTitle/nyroModalLinkTitle.zip

 

Version anglais de ce billet

Environnement de travail - Revival

En 2006, j'avais décris ma façon de travailler, et plus particulièrement les logiciels que j'utilisais.

Et si, 4 ans après, on refaisait la même chose ? (histoire de le mettre au goût du jour, et raviver la flamme de ce blog ?)

Allez hop, c'est parti.

Je suis maintenant sur Windows 7 Edition Familiale Premimum. Je ne m'embête plus à essayer d'autres OS ou des choses comme ça, ça me convient tout à fait. J'ai maintenant un joli écran 23 pouces devant moi et un vrai beau clavier. Un vrai ordinateur fixe, ça change du PC portable. Plsu d'espace et plus libre pour la disposition. Et puis comme le dual screen c'est vraiment pratique, un écran 17 pouces sur le côté.

Les logiciels maintenant : Firefox évidemment pour tous les développements, avec comme extension :

  • FireBug pour le déboggage JavaScript, mais aussi et surtout pour l'édition de live de la CSS : je créé mon HTML, j'ouvre Firebug et créé ma CSS en live pour voir directement le résultat. Une fois bon, copier/coller dans le fichier CSS, on réactualise et on passe à la suite.
  • Page Speed et YSlow pour vérifier les performances des sites
  • FireQuey indispensable pour le développement jQuery
  • Tab Mix Plus pour gérer le fonctionnement des onglets comme je veux
  • Web Developer généralement pour vider le cache, désactiver le JavaScript
  • Firefox Sync pour ne plus s'embetter à sauvegarder favoris, mot de passe et tout plein d'autres trucs
  • Echofon pour twitter...

Mais aujourd'hui, j'utilise aussi Chrome pour la plupart de mes navigations privées (facebook par exemple) et visualiser quelques autres sites plus smooth avec celui-ci.

IE8 est là aussi pour les tests, et le mode compatibilité pour IE7 qui permet de tester 2 navigateurs en 1. Une machine virtuelle avec VirtualBox sur Windows XP est toujours indispensable pour les test IE6, quand le client le demande expressément (le cas pour Cartier - Love par exemple)

On a fait le tour côté navigateur. Le serveur, j'utilise maintenant Wamp qui a remplacé depuis bien longtemps le vieillissant EasyPhp.

FileZilla est toujours là aussi pour les transferts FTP. Les fonctionnalités "navigation synchronisée" et "Comparaison des dossiers" sont devenus indispensables pour, d'une part, ne pas écraser un fichier plus récent, et d'autre part, n'envoyer que les nouveaux fichiers, qu'on peut visualiser d'un seul coup d'œil.

Oh, et pour le développement à proprement parler ? Dans quoi j'écris véritablement mes lignes de code ? Dans Netbeans bien sûr. Rapide, efficace, complétion correcte, il correspond exactement à ce dont j'ai besoin. Le CTRL+R pour renommer une variable est des plus efficaces, le CTRL+B pour aller à la déclaration d'une fonction ou variable aussi. un code bien commenté à la javaDoc est indispensable pour bien l'utiliser. Ça tombe bien, c'est le cas de nyroFwk !

J'ai quand même toujours un Notepad++ qui traîne pour l'édition rapide depuis Filezilla ou bien pour les JS ou CSS, quand NetBeans n'est pas très utile.

Voilà pour les principaux. En vrac, on citera aussi :

  • Thunberbird qui est mon fidèle partenaire pour tous mes e-mail depuis 2005
  • Foxit Reader pour lire les PDF à la vitesse de l'éclair
  • VLC pour lire les musiques bien plus vite que le vieillissant Winamp
  • Le vieux mais non moins efficace PuTTY pour les connexions SSH
  • OpenOffice.org pour tous les traitements de texte et excel

Et vous alors, vous utilisez quoi ?

nyroFwk, Framework PHP - Présentation

Ceci est un brouillon d'introducion à la documentation de nyroFwk. Toutes remarques, suggestions ou questions pour l'améliorer est la bienvenue !

Vendredi dernier, j'ai mis en ligne l'API et le svn (user : anon / passe : anon) de nyroFwk.

Bon c'est très bien tout ça, mais qu'est-ce que c'est ?

Pour commencer, petit extrai de wikipedia : Un framework est un kit de composants logiciels structurels, qui définissent les fondations ainsi que les grandes lignes de l'organisation de tout ou partie d'un logiciel.

Oui, mais des frameworks PHP, il en existe des tas, non ?
Oui, on peut signaler symfony, Zend Framework et CakePHP ici. J'ai testé ces 3 là plus ou moins fortement. Chacun a ses avantages et ses inconvénients. Mais aucun ne répondait exactement à mes besoins et habitudes de développements. Alors quand quelque chose ne me convient pas, moi, je le refais, tout simplement (comme nyroModal par exemple)

Alors qu'est-ce que je n'aime pas ou j'aime dans ces frameworks ?
  • CakePHP : la gestion des bases de données et des objets associés. A l'époque où j'avais testé, on était obligé de modifier les objets lorsqu'on avait des relations entre différents objets. Et puis je n'ai jamais réussi a vraiment faire quelque chose de bien avec. Pas forcément réellement tout testé non plus, je dois bien l'avouer. Là où CakePHP marque des points, c'est dans la génération automatique de l'administration et toutes les fonctionnalités ajax super simple à implémenter.
  • Zend Framework : Je ne l'ai jamais concrètement utilisé car il me paraissait trop énorme. Ce framework a absolument tout ce dont on peut rêver. L'organisation des fichiers, de la documentation et de tout ce qui va autour de ce framework est géniale.
  • Symfony : c'est celui que j'ai le plus utilisé (et que j'utilsie encore). J'aime bien la génération automatique des objets de base de données, même si je trouve cela dommage de devoir regénérer ça à chaque modification de la base de donnée. J'aime pas le grand nombre de fichiers de configuration et encore moins tous les différents formats possibles. Pourquoi s'embetter et donc ralentire le processus avec des fichiers YAML alors qu'un simple tableau PHP fait très bien l'affaire ? La barre de débuggage peut être très utile. La séparation des classes de chaque controller pose problèmes ; dans certains cas, on est obligé de réécrire le code...
Et puis il y a plein d'autres choses qui ne sont pas dans ces frameworks, comme :
  • Gestion simple de formulaire permettant d'ajouter des champs, de vérifier s'il est valide, de le remplir, de récupérer les valeurs, etc...
  • Intégration des règles d'opitimisations de yahoo developper simplement et de base
  • Gestion des images souples, rapide et efficace
  • Intégration d'un éditeur WYSIWYG simple
  • Gestion des fichiers envoyés par les utilsiateurs sécurisée (ie : possibilité de restreindre l'affichage de ces fichiers qu'aux utilsiateurs connectés)
  • Tout est objet
Vous l'aurez compris, ces éléments sont intégrés de base dans nyroFwk.

Dans mon framework, chaque objet a sa propre configuration, qui hérite de toutes la configuration de ses parents. Chaque configuration est définie de base par le framework mais est modifiable pour chaque site très simplement. Suivant les besoins, on peut aussi modifier la configuration de chaque classe suivant le controller (front ou admin). Prenons un exemple, plus parlant. La classe response_http_html gère tout ce qui sera envoyé au navigateur lorsque la page demandée est en HTML. Elle hérite de la classe reponse_http, qui elle hérite de la classe reponse_abstract qui hérite de object. La définition de cette classe est dans le fichier nyro/response/http/html.class.php. Sa configuration est dans le fichier nyro/response/http/html.cfg.php est conteint (extrait) :
$cfg = array(
    'meta'=>array(
        'robots'=>'index, follow',
        'description'=>'nyro project',
        'keywords'=>'nyro, project',
        'language'=>request::get('lang'),
    ),
);
On définit donc les balises meta par défaut de toutes les réponses HTML. A noter que la langue ici est dynamique sera en rapport avec la langue demandée par l'utilisateur (explications plus tard).

Cette configuration est là pour définir des éléments par défaut, mais doit bien évidemment être modifié pour chaque site. Pour ce faire, chaque site aura un dossier personnel dans lequel il doit définir ses classes propres aux sites, mais aussi toutes ces configurations. Ce dossier se nomme par défaut my dans nyroFwk et est placé juste à côté du dossier nyro.

Dans ce dossier propre à chaque site, on peut aussi redéfinir chaque classe de nyroFwk. En effet, à la demande de chaque classe, le framework va vérifier si le fichier correspondant à la classe existe dans le dossier my au bon endroit. Sinon, il cherchera dans le dossier de base du framework. Un mécanisme similaire est utilisé pour les configurations. Au lieu de remplacer la configuration, on va fusionner les configurations successives de la classe, en gardant bien sûr le plus spécifique. Par exemple, pour nyrodev.com, le fichier my/response/http/html.cfg.php ressemble à (extrait) :
$cfg = array(
    'meta'=>array(
        'title'=>'nyroDev, Analyste Développeur Web (PHP, jQuery)',
        'description'=>'Cédric Nirousset, nyroDev : Conception, Analyse et Développement de sites web (PHP, jQuery).',
    ),
);
Je redéfinis les balises meta title et description pour mon site public.

Les configurations sont un point très important pour nyroFwk. C'est pourquoi il est possible de définir encore plus finement ces configurations. Tout d'abord, on peut spécifier le controller de la configuration si on veut être plus précis. Pour mon site, l'administration porte le nom de controller 'admin' et le site public 'front' (par défaut dans nyroFwk). Pour l'administration, on n'a pas besoin des meta description par exemple. C'est la raison pour laquelle le fichier de configuration du site public ne se nomme pas comme je l'ai indiqué plus haut, mais en réalité my/response/http/html.front.cfg.php. Vous avez remarquer le front en plus qui indique que l'on veut l'affciher que pour le site public. Juste à côté, le fichier my/response/http/html.admin.cfg.php existe pour définir les éléments pour l'administration.

Avec ce système, on a déjà quelque chose de tout à fait souple. Mais ce n'est pas fini ! nyroFwk gère les sites multilangues de base. Son fonctionnement est :
  • On définit une langue par défaut
  • On définit les langues disponibles
  • Si l'URL demandé est du type : monsite.com/LANG/maPage avec LANG une langue définit, alors on passe dans la langue demandée.
Bien, et alors, le rapport avec les fichiers de configuration ? Simple, en plus de la spécification par rapport au controller, les fichiers de configuration permettent aussi de spécifier une configuration spécifique pour la langue demandée. Exemple pour mon site qui est aussi disponible en anglais, le fichier my/response/http/html.front.en.cfg.php contient :
$cfg = array(
    'meta'=>array(
        'title'=>'nyroDev, Analyst Developper Web (english) (PHP, jQuery)',
        'description'=>'Cédric Nirousset, nyroDev: Conception, Analysis and Development of websites (PHP, jQuery).',
    ),
);
Ce mécanisme est utilisé à plusieurs endroits dans nyroFwk pour définir des messages à l'utilisateurs. Et comme vous l'avez remarques, ces fichiers sont de vrais fichier PHP. Donc rien ne vous empêchera, quand vous serez plus à l'aise avec le framework, d'utiliser des classes avec des fonctions statiques pour faire d'autres choses comme par exemple utiliser la base de donnée pour modifier ces éléments...

Et n'oubliez pas : les configurations sont successives et n'écrasent pas les autres configurations, aussi bien des classes parentes, mais aussi des configurations du controller et de langue. Ainsi, pour la classe response_http_html, la configuration est le résultat de la fusion des configurations (le plus bas étant le plus prédominant) :
  1. nyro/object.cfg.php
  2. nyro/object.fr.cfg.php
  3. nyro/object.front.cfg.php
  4. nyro/object.front.fr.cfg.php
  5. my/object.cfg.php
  6. my/object.fr.cfg.php
  7. my/object.front.cfg.php
  8. my/object.front.fr.cfg.php
  9. nyro/response_abstract.cfg.php
  10. nyro/response_abstract.fr.cfg.php
  11. nyro/response_abstract.front.cfg.php
  12. nyro/response_abstract.front.fr.cfg.php
  13. my/response_abstract.cfg.php
  14. my/response_abstract.fr.cfg.php
  15. my/response_abstract.front.cfg.php
  16. my/response_abstract.front.fr.cfg.php
  17. nyro/response_http.cfg.php
  18. nyro/response_http.fr.cfg.php
  19. nyro/response_http.front.cfg.php
  20. nyro/response_http.front.fr.cfg.php
  21. my/response_http.cfg.php
  22. my/response_http.fr.cfg.php
  23. my/response_http.front.cfg.php
  24. my/response_http.front.fr.cfg.php
  25. nyro/response_http_html.cfg.php
  26. nyro/response_http_html.fr.cfg.php
  27. nyro/response_http_html.front.cfg.php
  28. nyro/response_http_html.front.fr.cfg.php
  29. my/response_http_html.cfg.php
  30. my/response_http_html.fr.cfg.php
  31. my/response_http_html.front.cfg.php
  32. my/response_http_html.front.fr.cfg.php
Bien sûr, ces fichiers ne sont utilisés que s'ils existent ! Et ceci avec n'importe quelle classe du framework.

Mais je dois créer un fichier pour chaque classe qui en a besoin ? Au début, c'était le cas oui. Mais je me suis aperçu que cela pouvoit devenir très vite long et fastidieux. Ce mécanisme existe toujours et est toujours utilisé car dans certains cas indispensable, mais il existe un autre moyen. En effet, la configuration de la classe nyro permet de modifier la configuration de n'importe quelle classe dans un seul et même fichier de configuration. Par exemple, on aurait pu définir les éléments montrés précédemment dans le fichier my/nyro.front.cfg.php de cette façon :
$cfg = array(
    'response_http_html'=>array(
        'meta'=>array(
            'title'=>'nyroDev, Analyst Developper Web (english) (PHP, jQuery)',
            'description'=>'Cédric Nirousset, nyroDev: Conception, Analysis and Development of websites (PHP, jQuery).',

        ),
    ),
'une_autre_classe'=>array(
'uneAutreConfig'=>'yeah'
),
);
Cette configuration est utilisé en dernier lieu pour créer la configuration de chaque classe.

Vous avez d'ailleurs remarqué la classe object ? Toutes les classes instanciables héritent de cette classe, ce qui permet une gestion centralisée et uniforme des configurations et de la création des objets.

Bon, voilà déjà pour la configuration.

Pour revenir sur les fonctionnalités du framework, voici une liste (sans doute non exhaustive) de ce que gère pour l'instant nyroFwk :
  • Programmation orientée objet
  • Configuration avancée et très souple des classes
  • Gestion des sites multilingues
  • Gestion des bases de données multilingues avec récupération automatique des données propre à la langue
  • Configuration de base de donénes multiples
  • Gestion des utilsiateurs et de leur connexion, vérifications des accès, etc...
  • Gestion des formulaires avancées et souples : validation, affichage, etc...
  • Manipulation des images simplement, avec souplesse et efficacement
  • Création de formulaires directement depuis la structure de la base de données (gestion des données liées et en relation)
  • Création de l'administration automatique
  • Minimisation en un seul fichier compressé des fichiers JavaScript et CSS nécessaire à la page
  • Application d'un maximum de règle d'optimisations données par Yahoo
  • Barre de débogage
  • Editeur WYSIWYG (tinyMce) très simplement intégrable
  • jQuery et jQuery UI intégré
  • Ajax ready : différents templates s'il s'agit d'une requêtes ajax
  • Extensibilité simple et accrue : tout peut être redéfini
  • etc...
Fiou, ça n'a pas été une mince affaire de rédiger tout ça... J'espère que ça vous donne déjà une meilleure idée de ce qu'est nyroFwk et que vous aurez envie d'en savoir plus...