Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-08-2007 18:40:55

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Tutoriel sur smarty et le Zend Framework

Bonjour,

Je viens de rédiger un tutoriel sur smarty et le Zend Framework. Il sort tout juste du four, il contient certainement encore quelques coquilles :
http://www.kitpages.fr/zf_integrerSmarty.php

Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#2 10-08-2007 16:11:53

dinoxyz
Membre
Date d'inscription: 31-03-2007
Messages: 70

Re: Tutoriel sur smarty et le Zend Framework

Bonjour,
Tout d'abord, je tenais à vous féliciter pour ce tutoriel qui a été assez simple à suivre. J'ai rencontré des erreurs à cause de ma configuration en module conférer http://www.z-f.fr/forum/viewtopic.php?id=339 pour de plus ample renseignement, elle a encore un peu évolué en rajoutant un répertoire "template"  et "smarty" au même niveau que application, maintenant j'aimerai trouver une solution propre ou améliorer votre interface pour prendre en compte ce changement de répertoire que je perds par cette initialisation

Code:

$smarty->template_dir = TEMPLATE_DIR.'/views/scripts/';

Il faudrait rendre dynamique cette variable "TEMPLATE_DIR" pour savoir dans quel module, je suis. Sinon, si vous voyez une autre solution viable je suis preneur.

J'ai fini par le faire fonctioner en mode "module default" avec le TEMPLATE_DIR fixe.

@++, dinoxyz.

Dernière modification par dinoxyz (10-08-2007 18:01:11)


Système : Ubuntu (Linux)
Version : PHP 5.2.1
Mode debug actif

Hors ligne

 

#3 10-08-2007 18:08:58

dinoxyz
Membre
Date d'inscription: 31-03-2007
Messages: 70

Re: Tutoriel sur smarty et le Zend Framework

Une première solution pour les modules est d'uliser le répertoire "template" créé en haut avec une structure de répertoire normale.

Code:

$smarty->template_dir = TEMPLATE_DIR;

Sans le "view/script",

Code:

/application
  /modules
    /default
      /controllers
    /blog
      /controllers
/template
  /index
    index.tpl
  /blog
/smarty

J'ai aussi utilisé

Code:

Zend_Controller_Action_HelperBroker::removeHelper($viewRender);

à la place de

Code:

$controller->setParam('noViewRender', true);

Est-ce une bonne solution ?
Si quelqu'un voit une autre solution plus élégante je suis prenneur.

@++ Dinoxyz

Dernière modification par dinoxyz (10-08-2007 18:10:33)


Système : Ubuntu (Linux)
Version : PHP 5.2.1
Mode debug actif

Hors ligne

 

#4 12-08-2007 10:59:58

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Tutoriel sur smarty et le Zend Framework

Bonjour,

En fait il y a une solution plus complète qui règle les problèmes de modules : tu peux définir le template_dir de smarty dans le helper. Comme ça tu peux sans problème intégrer le nom du module, du controlleur ou de l'action dans le template_dir.

A mon avis, le plus propre serait de définir dans Kitpages_View_Smarty les méthodes :
- setScriptPath, getScriptPath
- setBasePath, getBasePath
(en modifiant le template_dir de $_smarty)

et ensuite d'utiliser ces fonctions dans Kitpages_Controller_Action_Helper_ViewManager :
dans preDispatch, tu récupères le nom du module, du controlleur et de l'action et du définis le scriptPath en fonction.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#5 12-08-2007 13:23:00

dinoxyz
Membre
Date d'inscription: 31-03-2007
Messages: 70

Re: Tutoriel sur smarty et le Zend Framework

Bonjour,

Je vais creuser ta solution et voir si je peux arriver à avoir quelque chose de mieux et dans ce cas je te t'enverrai les sources pour que tu puisses modifier tes classes si tu es intéressé.

@++, Dinoxyz.


Système : Ubuntu (Linux)
Version : PHP 5.2.1
Mode debug actif

Hors ligne

 

#6 13-08-2007 20:08:33

dinoxyz
Membre
Date d'inscription: 31-03-2007
Messages: 70

Re: Tutoriel sur smarty et le Zend Framework

Bonjour,

En ce moment je teste smarty et je n'arrive pas à faire passer un tableau en paramètre

dans le controller
$arr = array(1000, 1001, 1002);
$this-view->myArray = $arr;

Dans le template
<ul>
{foreach from=$myArray item=foo}
    <li>{$foo}</li>
{/foreach}
</ul>

J'ai une belle erreur Parse error: syntax error, unexpected T_OBJECT_OPERATOR

Désolé de vous embêter, avec ça mais je ne vois pas comment le résoudre.

Cordialement,
Dinoxyz

Dernière modification par dinoxyz (13-08-2007 23:25:59)


Système : Ubuntu (Linux)
Version : PHP 5.2.1
Mode debug actif

Hors ligne

 

#7 03-09-2007 15:40:54

Bertrand
Nouveau membre
Lieu: haute Normandie
Date d'inscription: 06-08-2007
Messages: 1
Site web

Re: Tutoriel sur smarty et le Zend Framework

Pour ma part , je fais plutot un truc du style:


controller:

$this->view->myList=array(1,2,3,4,5,6,7,8,9);


view:

  foreach ($myList as $myDetail) {


}

Hors ligne

 

#8 03-09-2007 22:53:15

dinoxyz
Membre
Date d'inscription: 31-03-2007
Messages: 70

Re: Tutoriel sur smarty et le Zend Framework

Merci à toi, je testerai.
Dinoxyz


Système : Ubuntu (Linux)
Version : PHP 5.2.1
Mode debug actif

Hors ligne

 

#9 05-09-2007 11:50:43

Damien
Membre
Lieu: Tassin la Demi Lune
Date d'inscription: 22-03-2007
Messages: 88

Re: Tutoriel sur smarty et le Zend Framework

Bertrand a écrit:

Pour ma part , je fais plutot un truc du style:


controller:

$this->view->myList=array(1,2,3,4,5,6,7,8,9);


view:

  foreach ($myList as $myDetail) {


}

Ce n'est pas du smarty ça ?

Hors ligne

 

#10 05-09-2007 23:28:10

dinoxyz
Membre
Date d'inscription: 31-03-2007
Messages: 70

Re: Tutoriel sur smarty et le Zend Framework

Je suis d'accord avec toi et ça ne passe pas avec le tutoriel.
@++


Système : Ubuntu (Linux)
Version : PHP 5.2.1
Mode debug actif

Hors ligne

 

#11 06-09-2007 09:03:46

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: Tutoriel sur smarty et le Zend Framework

Bonjour dinoxyz,

Je viens de faire le test chez moi, les tableaux marchent bien :
Dans mon controller :

Code:

        $this->view->tableau = array(2,5,8);
        echo $this->view->render("default/index/home.tpl");

et dans ma vue (j'utilise {| et |} comme délimiteurs dans smarty pour éviter les problèmes avec Javascript)

Code:

liste :<br/>
{|foreach from=$tableau item=toto|}
val={|$toto|}<br/>
{|/foreach|}

Et j'obtiens bien

Code:

liste :
val=2
val=5
val=8

J'avoue que je ne vois pas où est l'erreur dans ton message du 13/08 (que je n'avais pas vu passer.... c'est tombé pendant mes vacances smile ).

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#12 06-09-2007 21:13:02

dinoxyz
Membre
Date d'inscription: 31-03-2007
Messages: 70

Re: Tutoriel sur smarty et le Zend Framework

Merci, mais pour moi ça n'avais pas marché, je referai un test ce week-end  wink
@++ dinoxyz


Système : Ubuntu (Linux)
Version : PHP 5.2.1
Mode debug actif

Hors ligne

 

#13 08-10-2007 08:10:08

kaboume
Membre
Lieu: Bagneux
Date d'inscription: 21-09-2007
Messages: 24
Site web

Re: Tutoriel sur smarty et le Zend Framework

Bonjour,

J'ai implémenté la solution du helper pour tenir compte du multi-modules avec Smarty c'rst à dire rendre dynamique le répertoire de templates.

Voici les modifs que j'ai faites :

Dans le KitpagesControllerActionHelperViewManager :

Code:

/*
 * Created on 20 juin 07
 *
 * @author Philippe Le Van (http://www.kitpages.fr)
 * @copyright 2005-2007
 */
class KitpagesControllerActionHelperViewManager    extends Zend_Controller_Action_Helper_Abstract {
    
    private $_view = null;
    private $_basePathTempates = "";
    
    public function setView($view) {
        $this->_view = $view;
    }

    /**
     * Affecte le base path dans lequel se trouve l'arborescence des tempates
     * @parm string $basePathTempates Chemin relatif 
     */
    public function setBasePathTempates($basePathTempates) {        
        
        if (!empty($basePathTempates))    {
            if (substr($basePathTempates, -1) == DIRECTORY_SEPARATOR)    {
                $this->_basePathTempates = $basePathTempates;    
            }   
            else    {
                $this->_basePathTempates = $basePathTempates . DIRECTORY_SEPARATOR;
            }  
        }        
    }
    
    public function init()
    {
        $this->getActionController()->view = $this->_view;
        
        // Chemin d'accès aux templates détermniné dynamiquement à partir du module actuel,
        // controlleur actuel et action actuelle
        $dirTempates = $this->_basePathTempates . parent::getRequest()->getModuleName() . DIRECTORY_SEPARATOR . 
                         parent::getRequest()->getControllerName() . DIRECTORY_SEPARATOR . 
                             parent::getRequest()->getActionName() ;
        
        // Affectation de ce chemin à la vue pour utilisation par Smarty        
        $this->getActionController()->view->setScriptPath($dirTempates);        
    }
}

Dans le bootstrap :

Code:

// initialiser le helper
Zend_Loader::loadClass("KitpagesControllerActionHelperViewManager");
$viewManager = new KitpagesControllerActionHelperViewManager();              
$viewManager->setView($view); 
$viewManager->setBasePathTempates(".". DIRECTORY_SEPARATOR. "views" . DIRECTORY_SEPARATOR);   
Zend_Controller_Action_HelperBroker::addHelper($viewManager);

Dans le KitpagesViewSmarty :

Code:

 
    public function setScriptPath($path) {
        $this->setTemplateDir($path);
    }


   /**
    * Set templates directory
    *
    * @param string $path
    */
   public  function setTemplateDir($path)
   {
      $this->_smarty->template_dir = $path;
   }

    /**
     * Processes a view script and returns the output.
     *
     * @param string $name The script script name to process.
     * @return string The script output.
     */
    public function render($name) {
        return $this->_smarty->fetch($name);
    }

A noter que mes vues se trouvent dans
/views/modulex/controlleury/template.tpl

J''espère que ce code pourra vous aider...

A+
kaboume

Dernière modification par kaboume (08-10-2007 08:11:48)

Hors ligne

 

#14 08-10-2007 21:08:43

dinoxyz
Membre
Date d'inscription: 31-03-2007
Messages: 70

Re: Tutoriel sur smarty et le Zend Framework

J'avais laissé tomber cette solution mais peut-être qu'avec ta méthode, je referai un test.

Merci, pour ton code.

@++


Système : Ubuntu (Linux)
Version : PHP 5.2.1
Mode debug actif

Hors ligne

 

#15 09-10-2007 08:23:58

kaboume
Membre
Lieu: Bagneux
Date d'inscription: 21-09-2007
Messages: 24
Site web

Re: Tutoriel sur smarty et le Zend Framework

Pour info,

Dernière mise à jour de mon implémentation  sur mon blog :

http://www.ericmery.fr/blog/index.php?2 … ty-modules

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