Archive

Archives de l'auteur

Yii Framework – Une extension pour la mise en cache des data providers (et plus encore…)

Yii Framework

De retour avec une petite extension pour Yii Framework concoctée par votre serviteur.

Yii 1.1 a introduit un certain nombre de classes assez pratiques dont une classe reprenant le concept de data provider pour les active record : CActiveDataProvider.

Cette classe est intensivement utilisée par certains widgets dont CGridView en particulier.

Par ailleurs, Yii 1.1.7 permet désormais de gérer la mise en cache aisée des requêtes des Active Record permettant des gains de performance et un soulagement de la base de données. Malheureusement,  CActiveDataProvider n’a pas été adaptée pour tirer partie de cette possibilité. Qui plus est, cette classe comporte un bug assez embêtant : dès lors que votre Active Record utilise des critères ‘having’ et/ou ‘group’, le nombre d’éléments résultants calculés par le data provider n’en tient pas compte (produisant des effets indésirables, notamment sur les paginateurs qui affichent un nombre de pages incohérent).

En attendant d’éventuelles évolutions et corrections natives, vous pouvez utiliser mon extension EActiveDataProviderEx afin de pouvoir bénéficier du cache et de la correction du compte du nombre d’éléments à télécharger sur le site officiel de Yii Framework.

Lire la suite…

Categories: PHP Tags: , ,

PHP : c’est de l’hébreu…

…et ce n’est pas qu’une expression :)

Petite aventure qui m’est arrivée cette semaine. Je testais une nouvelle extension Yii lorsque, une fois installée sur mon serveur, j’obtiens ce message d’erreur en la testant :

Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM

Woaou ! Je vous demande pardon ? Ca y-est, mon serveur devient dingue ou alors je suis dans un épisode de Fringe…

Après quelques recherches sur le net, en réalité, il s’avère que mon serveur n’y est pour rien (pas plus de Massive Dynamics). Il s’agissait en fait d’une petite erreur de syntaxe dans l’extension qui, si elle est exécutée sur un PHP avec APC activée (optimiseur de code), déclenche le dit message.

Explication :

Le message d’erreur est en hébreu, littéralement. Deux développeurs de PHP 3 et Zend Engine 0.5 (Zeev Suraski et Andi Gutmans) qui sont les auteurs du message en quetion sont d’origine israélienne. En traduisant, T_PAAMAYIM_NEKUDOTAYIM veut dire « Token double deux-points ». Initialement, il ne devait s’agir que d’un message à destination interne. Seulement voila, dans certaines conditions, le message fait surface.

En l’occurrence, dans mon cas, il s’agissait d’une mauvaise utilisation d’un accès à une méthode statique d’une classe. Pour les non-familiers avec le concept, un petit tour vers la documentation officielle s’impose. Par exemple dans Yii, pour ne pas être obligé d’instancer un nouvel objet AR, on peut accéder à la méthode model grace à la notation NomClasseAR::model() (notez les doubles deux-points). APC cependant ne semble pas trop apprécier le fait d’accéder à ces méthodes via une variable plutôt que directement via le nom de la classe (normalement supporté depuis PHP 5.3). Un code comme $model::model() (ou $model contient le nom de la classe) provoque le fameux message. Dans ce cas, pas le choix, il faut instancier un objet via new $model qui retourne le modèle en question.

Si les voyages forment la jeunesse, PHP forme aux langues étrangères ;)

Categories: PHP Tags: ,

Yii news – Nouveau tutorial « barre de progression »

Yii Framework

Bon. Le blog a été particulièrement calme ces derniers temps… On va tenter de le ranimer un peu ;)

Quelques nouvelles de mon Framework PHP préféré (et j’espère le votre aussi).

Yii 1.1 continu à évoluer en intégrant à chaque version sont lot d’améliorations et corrections. A noter que la prochaine version 1.1.6 se verra dotée d’un bien pratique générateur de requêtes.

Le site de Yii Framework a également connu une petite révolution en octobre dernier en changeant son thème graphique (il était temps). J’apprécie particulièrement la section référence à l’API très bien repensée (avec affichage des portions de code de chaque méthode, super idée).

Signe que ce framework rencontre de plus en plus d’adeptes, le nombre d’extensions publiées est en littérale explosion. Bien sûre, le niveau de qualité et d’intérêt n’est pas toujours au rendez-vous, mais on trouve quelques perles bien pratiques pour certains projets, notamment des projets de partage de générateurs de code pour Gii dont certains sont très prometteurs (Giix).

Mon extension personnelle CSaveRelationsBehavior n’a guère évoluée. Quelques optimisation et correctifs sont en préparation et son utilisation au quotidien dans le cadre de mes projets professionnels actuels se révèle maintenant indispensable.

Enfin, chose promise depuis un bout de temps, la section Tutoriaux du blog vient de s’enrichir d’une nouvelle page : Yii : Une barre de progression pour les processus longs. Vous y découvrirez comment faire patienter élégamment vos utilisateurs pendant le traitement de tâches lourdes. Bonne lecture et vos suggestions sont toujours les bienvenues.

CSaveRelationsBehavior : un comportement Yii pour enregistrer les données relationnelles

Yii Framework

CSaveRelationsBehavior, un comportement pour Yii Framework, vient d’être publié par votre serviteur.

L’objet de ce comportement est d’étendre les fonctionnalité des ActiveRecords afin de permettre l’enregistrement automatique des données relationnelles HasMany et ManyMany lorsque le modèle principal est créé ou modifié.

En effet, contrairement à d’autres framework comme CakePHP ou Symphony, cette fonctionnalité n’est pas incluse nativement dans Yii. Rien de bien problématique dans la mesure ou cette opération peut être écrite au besoin au niveau des modèles le nécessitant. Mais comme j’étais lassé de devoir reproduire ce genre de code fréquemment, l’écriture d’un comportement pour les ActiveRecord c’est assez naturellement imposé.

Amis développeurs Yii, vos commentaires sont les bienvenus :)

[Edit 17/05/2010 : Deux applications de démonstrations sont maintenant disponibles en téléchargement sur le dépôt de l'extension. Elles permettent de se faire une idée très précise de ce qui est réalisable avec cette extension qui est désormais également hébergée sur Google Code (documentation, dépôt SVN, rapport de bugs...).]

Lire la suite…

Yii 1.1.2 – Gii inside

Gii logo

Comme à son habitude, l’équipe de développement de Yii Framework vient de publier une mise à jour 1.1.2.

Au delà des habituelles corrections de bugs (une vingtaine) et d’améliorations (mise à jour de jQuery UI 1.8.1, support des relations dynamiques pour les modèles…) que vous pouvez voir ici, la grande nouveauté s’appelle Gii.

Gii est un puissant générateur de code dédié à Yii et vient compléter (pour ne pas dire remplacer) le générateur en lignes de commandes nommé yiic. En fait, il reprend les principes de son aîné (lui même inspiré des célèbres générateurs de Ruby on Rails) à savoir :

  • un générateur de modèles (qui sait lire les métas-informations des bases de données afin de créer automatiquement les régles de validation et les éventuelles informations relationnelles)
  • un générateur de contrôleurs
  • un générateur CRUD qui, en partant d’un modèle existant, est capable de généré un contrôleur est ses vues associées permettant de lister, voir, administrer, créer, mettre à jour et supprimer des enregistrements
  • un générateur de modules
  • enfin, un générateur de formulaires (nouveau dans Gii)

Tout ça, sous la forme d’une élégante interface web permettant de contrôler précisément la génération des fichiers (vue des différences entre les fichiers existant et ceux générés par exemple).

Mais ça n’est pas tout. Gii permet de facilement créer (avec un peu de code tout de même) vos propres générateurs. Et la création de vues personnalisées est un jeu d’enfants si vous désirez ajouter les fonctionnalité non prises en charge par le générateur natif.

Pour l’occasion, une documentation spécifique a été produite, à consulter ici.

Bonne génération à tous :)

Yii Framework 1.1.1 et 1.0.12 disponibles

Yii Framework

La maintenance de deux versions d’un framework n’est sans doute pas chose aisée, et on peut saluer l’effort de la (petite) équipe de développement de Yii qui maintient de cap malgré tout.

Voici donc les nouvelles versions mineures des deux branches majeures du framework :

Yii Framework 1.1.1 :

  • Plus d’une vingtaine de correction de bugs divers, essentiellement liés au passage à la nouvelle version majeure
  • La classe CActiveForm supporte désormais les validations coté serveur et coté client avec un minimum de code
  • L’outil en ligne de commandes yiic a été réécrit afin de supporter le multi-layout et le support du filtrage des vues en mode liste lors de la génération de code CRUD
  • Les commandes yiic peuvent désormais être déclarées de façon globales de telle sorte que vous pouvez partager une même commande partagée par plusieurs projets différents

Yii Framework 1.0.12 :

  • Une petite dizaine de correction de bugs mineurs
  • 3 améliorations relatives données relationnels des ActiveRecords, la classe CUrlManager et la classe CDbCriteria

Pour la liste complète des changements, c’est ici que ça se passe.

Categories: PHP Tags: ,

Yii Framework 1.1, c’est parti

Yii Framework

Le 10 janvier dernier a sonné l’arrivée de la nouvelle version majeur 1.1 de Yii Framework.

Alors que les évolutions majeurs étaient bloquées depuis la version 1.0.5 et que les révisions ultérieures n’apportait que des corrections de bugs et quelques améliorations mineurs (les mise à jour de la version 1.0 continueront jusqu’en décembre 2010 toutefois), cette nouvelle version apporte son lot de nouveauté :

  • Un nouveau générateur de formulaire orienté objet (et non interface)
  • Ajout du support des tests unitaires et fonctionnels via PHPUnit et, c’est moins courant, une passerelle avec Selenium pour les tests d’interface automatisés
  • Changements au niveau de la génération des requêtes liées aux données relationnelles permettant de récupérer les données liées en une requête (plus simple à gérer dans le cas de conditions complexes)
  • Les skins sont désormais applicables aux widgets
  • La déclaration des « safe attributes » a été complètement repensée
  • La génération des alias de tables liées au ActiveRecord a été largement simplifiée
  • On peut indiquer un prefixe a ajouter automatiquement aux noms des tables
  • Enfin, les extensions tiers se voient complétées par une riche bibliothèque officielle nommée Zii (encore peu documentée mais dans laquelle on peut trouver quelques pépites en cherchant bien)

Le revers de la médaille de toutes ces nouveautés et changements est que les développements réalisés avec la version 1.0 nécessiteront probablement des modifications plus ou moins importantes afin de tourner sur la version 1.1 :

  • Adaptation des modèles concernant les « Safe attributes » ainsi que les déclarations des relations et éventuellement, modification de certains événements dont les paramètres ont changés (beforeValidate et afterValidate par exemple)
  • Modification de la déclaration de certains ActiveRecord afin de prendre en compte les nouveaux noms d’alias
  • Modification des vues utilisant des données tabulaires

Ce qui au final, pour certains projets mettant en oeuvre beaucoup de modèles peut se révéler un travail conséquent.

Categories: PHP Tags: , , ,

Standards XHTML strict et prises de tête (cachez ces espaces que nous ne saurions voir)

Les standards ont du bon. Malgré tout, parfois, ils apportent leurs lots de petits problèmes sur lesquels on peut passer quelques heures en s’arrachant les cheveux (et il m’en reste si peu…)

Dernier exemple en date, ce sont 2 ou 3 mystérieux pixels qui apparaissent sous les balises images (img) lorsqu’on utilise le standard XHTML Strict. Pour illustrer le phénomène, prenons ce cas assez classique de montage d’image découpée en plusieurs tranches assemblées dans un tableau.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>New Web Project</title>
    </head>
    <body>
        <table width="200" border="0" cellspacing="0" cellpadding="0">
            <tr>
                <td><img src="img/P1010478_01.jpg" alt="" /></td>
            </tr>
            <tr>
                <td><img src="img/P1010478_02.jpg" alt="" /></td>
            </tr>
        </table>
    </body>
</html>

Ce qui donne comme résultat (sous Firefox) :

Exemple de rendu des images en XHTML Strict

Les block images « poussent » leurs conteneurs (en l’occurrence la cellule de tableau) de quelques pixel en bas. Ca n’a évidement rien de très esthétique et ça n’est pas le résultat attendu.

Donc, à moins de changer la déclaration du type de document HTML, il va falloir ruser.

Pour contourner ce problème, il faudra définir l’affichage de vos images en mode « block » dans votre CSS. Vous pouvez le faire de plusieurs façons :

  • Systématiquement dans une déclaration CSS globale de vos balises img, l’inconvénient étant que celles-ci produiront un retour à la ligne (dans ce cas, il faudra les définir localement en mode float afin d’éviter ces retours).
  • En déclarant localement un style dans vos balises img de type style="display:block;".
  • En créant une classe spécifique que vous affecterez aux images nécessitant l’ajustement.

Cette dernière solution peut donner au final :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>New Web Project</title>
		<style type="text/css" media="screen">
			.block {
				display:block;
			}
		</style>
    </head>
    <body>
        <table width="200" border="0" cellspacing="0" cellpadding="0">
            <tr>
                <td><img src="img/P1010478_01.jpg" alt="" class="block" /></td>
            </tr>
            <tr>
                <td><img src="img/P1010478_02.jpg" alt="" class="block" /></td>
            </tr>
        </table>
    </body>
</html>

Et voila le rendu enfin correct :

Rendu des images correct en XHTML Strict (le beau papillon !)

Allez, à nous les montages de fou en XHTML Strict :)

Categories: Divers Tags: , , , ,

Aptana 2 : Comme un goût de régression

Aptana

Disponible depuis quelques jours, la nouvelle version d’Aptana, IDE basée sur Eclipse et orientée développements Web, laisse un sentiment pour le moins mitigé. On se rappel des aléas des précédentes mises à jour mineurs un peu chaotiques, mais on pensait ce temps révolu. Pourtant, cette version 2, même si elle ne comporte pas de bugs majeurs, n’apporte pas que très peu de nouveautés à cet environnement. Pire encore, certains utilisateurs en seront pour leurs frais concernant la suppression de certaines fonctionnalité :

  • Bye bye le pourtant fort bon module PHP. Il faudra maintenant se contenter du plugin officiel PHP pour Eclipse, autrement dit, PDT. L’équipe d’Aptana nous clame que c’est pour le meilleur… à voir.
  • Oublié aussi la fonction de synchronisation de fichiers, donc obligé de lancer un outil tiers afin d’effectuer ce type d’opération
  • Le filtrage des fichiers invisibles est aux abonnés absents. Maintenant, c’est tout ou rien (et bien planqué dans les paramètres du panneau « fichiers »)
  • Certaines préférences de la version 1.5 ne sont pas importées (partiellement corrigé dans la version 2.0.1)
  • Acheteurs de la version Pro, merci beaucoup, mais dorénavant, il n’y aura plus de régime de faveur
  • J’en passe…

L’ajout principal de cette version (car il y a quand même un peu de neuf) concerne la refonte complète du système de gestion des fichiers et des connexions. Tous les panneaux fichiers, connexions et serveurs ont été fusionnés autorisant des copies simplifiées entre les différents éléments et une meilleur clarté dans la gestion des connexions par projet.

Mais ceci est bien faible en regard de ce que l’on perd en effectuant la mise à jour depuis la version 1.5. Et d’autant plus incompréhensible qu’une enquête de satisfaction avait récemment été menée auprès des utilisateurs afin de savoir ce qui devait être intégré dans les futures versions de l’IDE ! On touche sans doute la les limites du modèle Open Source.

Espérons que l’équipe de développement entende le mécontentement des utilisateurs. Certaines remarques semblent avoir déjà été prises en compte (un nouveau module de synchro serait dors-et-déjà en chantier).

En attendant, certains utilisateurs déçus pourraient bien considérer d’autres environnements (NetBeans par exemple) ou revenir à des environnements plus stables, fonctionnellement parlant, comme le bon vieux Eclipse de base. A vous de voir.

Yii Framework 1.0.10

Yii Framework

Parallèlement au développement de la future mise  à jour majeur de Yii (1.1) dont la version alpha est disponible, le framework PHP continu ses avancées et améliorations sur sa version stable  1.0.10

Voici le traditionnel extrait de la liste des corrections et améliorations :

  • une dizaine de bugs corrigés (Captcha, cache, Tabview, ActiveRecord…)
  • CDbCriteria s’enrichit de nouvelles méthodes permettant de créer des conditions encore plus simplement (addInCondition et addSearchCondition)
  • une nouvelle méthode YiiBase::registerAutoloader permettant une intégration plus simple des frameworks tiers (ZendFramework par exemple)
  • un nouveau validateur CBooleanValidator permettant de valider facilement des cases à cocher par exemple
Categories: PHP Tags: , ,
Performance Optimization WordPress Plugins by W3 EDGE

Switch to our mobile site