IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

Nouveau moteur de rendu PHP orienté Objet


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut Nouveau moteur de rendu PHP orienté Objet
    Bonjour,

    Je viens de mettre en ligne un site dédié pour un nouveau moteur de rendu PHP orienté objet de ma conception.

    Je l'ai mis au point dans le cadre de mes développements PHP; son objectif est de s'affranchir de la rédaction du code HTML en passant pas une hiérarchie d'objets PHP plus ou moins évolués.
    A titre d'exemple, le site montre comment construire les exemples de Bootstrap dans une philosophie Pho.

    Comme je pense qu'il est maintenant relativement stable et potentiellement intéressant pour d'autres développeurs, je le place en OpenSource.

    Vos avis et commentaires sont les bienvenus.

    http://pho.execute.fr
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut Paul,

    J'ai regardé rapidement ton code et je me pose la question si ce genre d'approche vaut la surcharge que ce genre de moteur implique. Si pour produire une page complète avec un ou deux milliers de balises html, il faille tout passer par des instances de classe relatives à chaque balise, j'ai peur que cela soit vachement gourmand et au final contre-productif.

    En tout cas, j'avais expérimenté ce genre d'approche il y a des années de ça et j'ai rapidement abandonné au profit d'une gestion par blocs.
    D'ailleurs je vais d'ici la semaine prochaine poster mon moteur de rendu sur github.
    Je suis en train d'écrire le mode d'emploi.

    J'ai relevé un problème potentiel dans le code de la classe htmlTag.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($this->attributes as $name => $value) {
        $result .= ' ' . $name . '="' . $value . '"';
    }
    ici tu devrais par précaution être sûr que les noms des attributs sont corrects et échapper les valeurs sauf quand cela correspond à une URL (href, src) qui une fois échappée pourrait poser souci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($this->attributes as $name => $value) {
        $result .= $name. '="'.htmlspecialchars($value, ENT_QUOTES, 'utf-8').'"';
    }
    Dans ta fonction public function addAttribute($name, $value = false), en fonction de la valeur de l'attribut , il est possible de virer l'attribut en question ! unset($this->attributes[$name]); ! C'est fort dans une fonction nommée add...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function addAttribute($name, $value)
    {
        // attribute : letters and data-xxx
        if (($value !== '') && (ctype_alpha($name) || (mb_substr($name, 0, 5) === 'data-')))
        {
            $this->attributes[$name] = $value;
        }
     
        return $this;
    }

  3. #3
    Membre éclairé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Points : 747
    Points
    747
    Par défaut
    Au boulot, nous avons une appli web qui tournait avec un moteur de ce type et nous l'avons viré car difficilement gérable pour les designers qui préfèrent bosser sur des templates XML/HTML.

    Nous avons développé un moteur de template type Smarty mais beaucoup plus simpliste et le résultat est sans appel : tout le monde s'y retrouve beaucoup mieux et les designers ne nous appellent plus toutes les 10min (comme je disais, résultat sans appel^^).

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 430
    Points
    28 430
    Par défaut
    Merci pour vos retour.

    Alors clairement c'est un framework pour programmeur et non pour designer ^^

    Par contre je travaille habituellement avec des designers qui me fournissent des maquettes sous Photoshop, c'est à dire un look sans aucune forme d'intégration HTML...je me charge de l'intégration, donc en soit ce n'est pas un problème.

    Question maintenance, l'énorme intérêt que je vois dans cette approche c'est que je bosse par brique logique et non plus par template justement. Le but n'est pas de remplacer les balises par des objets mais bien de créer des objets complexes (qui certes eux assemblent des balises/objets) en s'éloignant de plus en plus du code HTML final. A petite échelle, la classe htmlCheckbox en est une illustration; je veux une case à cocher, je me fiche de savoir comment il faut ruser pour que le libellé soit associé à la case (label et input). bsNavbar est encore plus flagrant.

    Citation Envoyé par rawsrc Voir le message
    J'ai regardé rapidement ton code et je me pose la question si ce genre d'approche vaut la surcharge que ce genre de moteur implique. Si pour produire une page complète avec un ou deux milliers de balises html, il faille tout passer par des instances de classe relatives à chaque balise, j'ai peur que cela soit vachement gourmand et au final contre-productif.
    je ne sais pas bien quelles pages web réclament autant de balises, mais ce n'est probablement pas quelque chose qui est tapé à la main, quelque soit la méthode utilisée, ça ressemble plus à du reporting qu'à une WebApplication, me trompe-je ?

    Citation Envoyé par rawsrc Voir le message
    En tout cas, j'avais expérimenté ce genre d'approche il y a des années de ça et j'ai rapidement abandonné au profit d'une gestion par blocs.
    D'ailleurs je vais d'ici la semaine prochaine poster mon moteur de rendu sur github.
    Je suis en train d'écrire le mode d'emploi.
    je serais curieux de voir ça

    Citation Envoyé par rawsrc Voir le message
    J'ai relevé un problème potentiel dans le code de la classe htmlTag.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($this->attributes as $name => $value) {
        $result .= ' ' . $name . '="' . $value . '"';
    }
    ici tu devrais par précaution être sûr que les noms des attributs sont corrects et échapper les valeurs sauf quand cela correspond à une URL (href, src) qui une fois échappée pourrait poser souci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach ($this->attributes as $name => $value) {
        $result .= $name. '="'.htmlspecialchars($value, ENT_QUOTES, 'utf-8').'"';
    }
    oui, je ne suis pas certain qu'il faille le faire à ce niveau...notamment car cela peut très bien être aussi du code Javascript, mais je suis d'accord pour souligner cette faiblesse.

    Citation Envoyé par rawsrc Voir le message
    Dans ta fonction public function addAttribute($name, $value = false), en fonction de la valeur de l'attribut , il est possible de virer l'attribut en question ! unset($this->attributes[$name]); ! C'est fort dans une fonction nommée add...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function addAttribute($name, $value)
    {
        // attribute : letters and data-xxx
        if (($value !== '') && (ctype_alpha($name) || (mb_substr($name, 0, 5) === 'data-')))
        {
            $this->attributes[$name] = $value;
        }
     
        return $this;
    }
    oui ça par contre c'est voulu et documenté :
    Comme son nom ne l'indique pas, addAttribute permet aussi bien de définir un attribut, que de le modifier ou le supprimer. En effet, chaque attribut ne peut être défini qu'une seule fois, un second appel remplacera la valeur du précédent appel. D'autre part, si le paramètre $value est vide ou faux, le paramètre est supprimé.
    car l'idée est aussi de pouvoir manipuler les propriétés des objets en mémoire avant la génération finale du code HTML.

    Citation Envoyé par valaendra Voir le message
    Au boulot, nous avons une appli web qui tournait avec un moteur de ce type et nous l'avons viré car difficilement gérable pour les designers qui préfèrent bosser sur des templates XML/HTML.

    Nous avons développé un moteur de template type Smarty mais beaucoup plus simpliste et le résultat est sans appel : tout le monde s'y retrouve beaucoup mieux et les designers ne nous appellent plus toutes les 10min (comme je disais, résultat sans appel^^).
    Un autre des objectifs recherché avec Pho c'est d'avoir un code HTML ultra compact, totalement normalisé, avec des temps de chargement les plus courts possibles. A titre d'exemple je vous propose de regarder le code source des pages de ce site. Malgré un code totalement illisible de prime abord, on retrouve une structure tout à fait exploitable en "inspectant" les objets sous Chrome par exemple, et le code est garanti sans coquille grâce au framework. La page principale comprend 20 lignes de code...avec évidemment un certain nombres d'objets derrière comme un appFacebook() qui gère toute la partie facebook. Le code JS n'est pas passé par un minificateur, j'aurais pu (ou du) mais il est lui mis en cache de suite, alors que le code HTML est rechargé à chaque page.

    Les moteurs que vous évoqués sont-ils publics ?

    Merci
    Paul
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/02/2008, 10h24
  2. [POO] PHP Orienté Objet
    Par sliderman dans le forum Langage
    Réponses: 6
    Dernier message: 03/07/2007, 14h45
  3. [POO] Utilisation de PHP Orienté Objet
    Par Gibou dans le forum Langage
    Réponses: 7
    Dernier message: 26/11/2006, 03h30
  4. [Debat] Php Orienté Objet et les bibliotheques
    Par kagura dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 21/11/2006, 18h55
  5. [POO] Cours sur le PHP orienté objet
    Par gforce dans le forum Langage
    Réponses: 12
    Dernier message: 06/11/2006, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo