Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 16-06-2008 15:57:02

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

[Zend_View_Interface][1.5] Implémentation d'un moteur de Templates

Bonjour,

Je suis encore une jeune nouveau sur FZ. J'ai réussi a afficher un hello world et commencé à développer mon site avec...

Dans mes développements précédents j'utilisais TBS que je trouve pas mal comme moteur de Templates.

J'aime bien le fait de ne pas avoir de PHP dans les vues...

J'ai regardé comment utiliser un autre moteur de template que celui de ZF et je suis tombé sur Zend_View_Interface.

J'ai vue l'exemple avec Smarty mais j'ai quelques questions smile

Selon la doc (http://framework.zend.com/manual/fr/zen … .interface)

Code:

class Zend_View_Smarty implements Zend_View_Interface
{
    ...
    ...
    ...
    
    public function assign($spec, $value = null)
    {
        if (is_array($spec)) {
            $this->_smarty->assign($spec);
            return;
        }

        $this->_smarty->assign($spec, $value);
    }
    
    ...
    ...
    ...
}

Est-ce une ré-écriture d'une méthode "assign" de Smarty ou bien est-ce ce que ça n'a rien à voir ?

Dans TBS il y a une méthode mergeBlock();

Faut-il que je fasses :

Code:

public function mergeBlock($vars)
{
    $this->_tbs->mergeBlock($vars);
}

Voilà la grande question... Je vous avoue très sincèrement que je n'ai pas encore testé, honte à moi !!!

J'avance sur les bases pour le moment mais je me prépare pour la suite !

Une autre petite question...

Si les développeurs de Zend ont choisi cette méthode pour les templates c'est surement qu'elle n'est pas si mal smile

En général utilisez vous le système de Templates de Zend ou un autre (sans php dans les vues ?).

Merci de vos réponses.


Cordialement,
Kaimite

Dernière modification par Kaimite (16-06-2008 15:59:13)

Hors ligne

 

#2 16-06-2008 16:42:09

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [Zend_View_Interface][1.5] Implémentation d'un moteur de Templates

j'ai expérimenté plusieurs approches Le tout en 1.0.3
Zend phtml (include d'un Entête et un pied en phtml dans chaque view)
Phtml + Masterpage (Une seule page qui inclus le scrtip phtml de la vue) les prémices d'un Zend_Layout de la 1.5

ophtml un librairie php qui permet en mode full objet de construire sa page (Pas de HTML dans le code seulement du php)
ETS (le moteur de template de marcopoly)
Smarty (le moteur bien connu)
phpTal (le moteur de template de zope)

Je regarde en ce moment l'utilisation de ext-php

La solution Zend est simple mais mélange le php et le html je ne trouve pas cela bien propre mais c'est simple et efficace. la solution phtml + masterpage est mieux structuré (tout comme Zend_Layout ) et permet de ne pas avoir à répéter dans chaque script des parties communes. mais le code est toujours aussi mélangé et peu lisible.

les solution à base de template sont intéressantes car elle séparent bien le html du php mais elle ont l'inconvénient d'introduire une grammaire supplémentaire celle du langage de tempate. suivant leur capacité elle nécessite plus ou moins d'apprentissage. mais finalement elle ne font que remplacer un langage mélangé au html par un autre.

la solution ophtml (Object PHTML) est beaucoup plus propre sont fonctionnement ressemble à l'objet select de Zend_DB dans la façon de construire le code. on crée un objet document et on chaine les appel de méthodes pour construire le contenu. il est assez facile de faire cela de façon modulaire et un n'écrit jamais de HTML mais c'est tout de même plutôt verbeux un exemple en ets qui fait 152 lignes de HTML avec des tag {variables} pèse  262 de php avec OPHTML le gros inconvénient c'est que ce n'est pas du tout exploitable par un designer.
http://www.z-f.fr/forum/viewtopic.php?id=765

je ne trouve donc aucune solution idéale. les moteurs de template ont l'avantage qu'ont peut prendre une page faite par un webdesigner et en faire un template facilement lais elle alourdissent pas mal le travail à faire et nécessitent l'apprentissage d'un langage de plus. par contre les couches vue traitement sont bien séparées
les solution php (pur ou avec html) ne sont pas viable lorsqu'on travaille avec des designers et surtout les couches vues traitement sont perméable. il faut être vigilant.

Je suis en traint de regarder ext-php cette librairie permet de faire des aplication ExtJS (Web 2.0 Ajax) directement en php. je ne suis pas sur que ce soit là encore une super bonne approche.

A+JYT
ps : un articles sur les moteurs de templates et Zend
http://sekaijin.ovh.org/?p=13

Dernière modification par sekaijin (16-06-2008 16:48:22)

Hors ligne

 

#3 16-06-2008 17:03:02

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: [Zend_View_Interface][1.5] Implémentation d'un moteur de Templates

Merci pour ta réponse.
J'ai déja bookmarké ton site ce w-e smile J'ai vu tes exemples sur l'implémentation des différents Templates dans ZF mais je pense que je vais devoir me faire un peu les dents avant de bien digérer tes exemples smile

En fait ce que j'ai apprécié chez TBS c'est le fait qu'il me permette d'éviter les if else sur des éléments optionnels.

Je m'explique :

En phtml :

Code:

if ( $this -> Url != "" ) {
    echo '<a href="' . $this -> Url . '">' . $this -> Pseudo . '</a>';
}
else {
    echo $this -> Pseudo;
}

Avec TBS :

Code:

<a href="mailto:[blk.email;magnet=a;mtype=m+m]">[blk.nom]</a>

Maintenant c'est vrai que j'ai la chance, ou pas, d'être seul à bosser sur le web dans ma boite...
Donc pas de soucis par rapport à un intégrateur HTML n'ayant pas de notions de PHP

Je vais essayer de faire un petit mix entre tes exemples et la doc sur Zend_View_Interface.
Si j'ai d'autre questions comme l'a dit un grand balaise avant moi "I'll be back" :-)

Cordialement,
Kaimite

Hors ligne

 

#4 16-06-2008 23:22:57

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: [Zend_View_Interface][1.5] Implémentation d'un moteur de Templates

Bonsoir,

J'me réponds un peu à moi même mais voici ce que j'ai trouvé, un peu par hasard...

Dans mon controller :

Code:

class ArticleController extends Zend_Controller_Action {
    
    function init() {
        $this -> _helper -> viewRenderer -> setNoRender();
    }
}

et dans mon action :

Code:

    function listeAction () {
        
        $Articles = new Article();
        $lesArticles = $Articles -> renvoyerArticlesDe($this -> _request -> getParam('rubriques_id', null));
                
        if ( $lesArticles !== false ) {
            $tplVue = new myTinyButStrong();
            $tplVue -> chargerTemplate(VIEWS_DIR . "/scripts/article/liste.tpl.html");
            $tplVue -> afficherTemplate();    
        }
        else {
            $this -> _forward("vide");
        }
    }

Bon dans cette action il n'y a pas de code pour insérer les articles dans le template mais j'obtiens bien le résultat de mon template dans $Layout -> content !

Cette solution est-elle bancale ?

Merci de vos réponses.

Cordialement,
Kaimite

Hors ligne

 

#5 17-06-2008 18:09:41

fte
Membre
Lieu: 06 13 83
Date d'inscription: 16-05-2008
Messages: 112
Site web

Re: [Zend_View_Interface][1.5] Implémentation d'un moteur de Templates

Corrigez-moi si je me trompe mais le systeme MVC utilise le meme principe, dans chaque action il y a un $this->view = new Zend_View() implicite.

<s>Est-ce qu'il est possible dans cet exemple, de déplacer le test, chargement et affichage dans la classe myTinyButStrong pour réduire à un simple, en début d'action :

$tplVue = new myTinyButStrong();

voire meme cette ligne dans le predispatch ? ou en plugin ?</s>


Oups je viens juste de découvrir l'excellente solution de Sekaijin :
http://zend-framework.developpez.com/se … /template/

Dernière modification par fte (17-06-2008 18:25:18)

Hors ligne

 

#6 17-06-2008 23:08:05

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: [Zend_View_Interface][1.5] Implémentation d'un moteur de Templates

fte a écrit:

Est-ce qu'il est possible dans cet exemple, de déplacer le test, chargement et affichage dans la classe myTinyButStrong pour réduire à un simple, en début d'action :

$tplVue = new myTinyButStrong();

voire meme cette ligne dans le predispatch ? ou en plugin ?

Tu veux dire mettre le $this -> _helper -> viewRenderer -> setNoRender(); dans le constructeur de ma class myTinyButStrong() ?

Cordialement,
Kaimite

Hors ligne

 

#7 18-06-2008 11:58:43

Kaimite
Membre
Lieu: Marseille
Date d'inscription: 16-06-2008
Messages: 144
Site web

Re: [Zend_View_Interface][1.5] Implémentation d'un moteur de Templates

Ok !
Je viens de mieux comprendre la question...
Etonnant je suis plus frais à 11:43 qu'a 23:08 !!!

Je ne peux pas inclure le $tplVue -> afficherTemplate(); dans le contructeur de myTinyButStrong() car je dois quand même indiquer au templates les marqueurs et autres boucles à afficher.

La seule chose que je puisse faire c'est éventuellement y inclure le chargement du templates...

Pour donner un truc du genre :

Code:

$tplVue = new myTinyButStrong(VIEWS_DIR . "/scripts/article/liste.tpl.html");

// --> INSERTION DES MARQUEURS DU TEMPLATES

$tplVue -> afficherTemplate();

fte a écrit:

voire meme cette ligne dans le predispatch ? ou en plugin ?

heuuu je n'en suis pas encore là... Je ne sais même pas si je vais utiliser TBS. Utiliser le système de vue de ZF me permet de garder les _helper() et d'autres méthodes de view très pratiques ($view -> url() par exemple).

En utilisant TBS je les perds en tout cas dans le vue, je peux tout à fait les anticiper dans l'action du controller et les transmettre à mon template TBS.

Je ne sais pas si je peux utiliser un _helper dans une action.

Peux-être que si je fais $this -> view -> _helper -> mon_helper()... à voir !

Voilà, je continue mon apprentissage de ZF... d'autres questions sont à venir !

Cordialement,
Kaimite

Hors ligne

 

#8 18-06-2008 15:11:23

fte
Membre
Lieu: 06 13 83
Date d'inscription: 16-05-2008
Messages: 112
Site web

Re: [Zend_View_Interface][1.5] Implémentation d'un moteur de Templates

Cela ne me semble pas insurmontable mais partir sur un moteur de template (j'etais parti perso sur Smarty, c'est ok) fonctionne mais on s'isole de la masse des utilisateurs qui utilisent Zend_View à moins d'avoir deja beaucoup de templates terminés.

Concernant le plugin c'est une classe avec 6 methodes qui se charge avant ou apres ta page.  Il y a ces méthodes différentes car cela correspond à différentes étapes (avant ou apres le chargement de la page, avant ou apres la redirection, etc).

La doc indigeste mais exhaustive : http://framework.zend.com/manual/fr/zen … ugins.html

Mieux : http://www.kitpages.fr/zf_helper_plugin.php

Pourquoi pas un plugin pour le template, mais le tuto par Sekaijin est la norme élégante. Le plugin m'est utile que pour vérifier les controles d'acces aux parties du site (ACL) pour l'instant.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages