Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 14-04-2008 00:18:03

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Zend Framework avec PHPTAL

Bonjour.

Je débute avec ZendFramework et je suis tombé sur une documentation expliquant comment intégrer Smarty à ZF.
J'ai plusieurs fois utilisé PHPTAL, j'avoue que j'apprécie ce moteur de template, et j'aimerai pouvoir l'intégrer à ZF.

Première question : est-ce une bonne idée ?
Seconde question : existe-t'il une doc à ce sujet ?

Si NON à la seconde question :
Troisième question : est-ce possible de se baser sur la doc Smarty/ZF pour intégrer PHPTAL à ZF ?


Merci d'avance


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#2 14-04-2008 09:05:25

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

Re: Zend Framework avec PHPTAL

Bonjour,

A priori, c'est assez simple de te baser sur une documentation ZF & smarty pour l'adapter à PHPTAL.

Tu peux utiliser http://www.kitpages.fr/zf_integrerSmarty.php

ou celui de la doc officielle (mais moins détaillé) : http://framework.zend.com/manual/en/zen … .interface

Cordialement,
Philippe Le Van


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

Hors ligne

 

#3 14-04-2008 09:10:12

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: Zend Framework avec PHPTAL

Je te remercie. Je regarderai tout ça ce soir.

Pour revenir à la première question : est-ce une bonne idée ? ou du moins une idée intéressante ? ou une idée qui va me mener droit dans le mur ?


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#4 14-04-2008 09:17:31

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

Re: Zend Framework avec PHPTAL

Je ne connais pas PHPTAL, mais je fais ça avec Smarty... Donc sur le principe, je ne trouve pas que ça soit une mauvaise idée.

Par contre si tu veux utiliser les view helpers du ZF, tu vas devoir complexifier un peu le système pour qu'ils s'intègrent bien (c'est a priori assez simple à faire).

A+, Philippe


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

Hors ligne

 

#5 14-04-2008 09:20:41

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: Zend Framework avec PHPTAL

A voir. C'est peut-être plus intéressant de garder toute la structure ZF pour le premier projet monté avec, et de le "tunner" pour la suite.
Merci.


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#6 14-04-2008 09:27:31

Mr.MoOx
Administrateur
Lieu: Toulouse
Date d'inscription: 27-03-2007
Messages: 1444
Site web

Re: Zend Framework avec PHPTAL

Dans la v2 du zf il y aura apparement un "tunage" de Zend_View smile

Hors ligne

 

#7 14-04-2008 09:54:06

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

Re: Zend Framework avec PHPTAL

salut j'ai déjà fais ça
fichier /library/Fast/Views

Code:

<?php
/**
 *
 * @author Jean-Yves Terrien
 *
 */

Zend_Loader::loadClass('Fast_View');

class Fast_View_Phptal extends Fast_View
{

   private $_tal;
   protected $_suffix = 'xhtml';
   /**
     * Constructeur
     *
     * @param string $tmplPath
     * @param array $extraParams
     * @return void
     */
   public function __construct()
   {
      parent::__construct();
      $this->setScriptPath(dirname(dirname(dirname(dirname(__FILE__)))) . '/application/views/phptal/');
      set_include_path(realpath('library/TemplatesEngines/PhpTal') . PATH_SEPARATOR . get_include_path());
      require_once 'PHPTAL.php';
      // create a new template object

      $this->_tal = new PHPTAL(); /* @var PHPTAL $template */
   }

   public function getSuffix() {
      return $this->_suffix;   
   }

      /**
     * Assign a variable to the view
     *
     * @param string $key The variable name.
     * @param mixed $val The variable value.
     * @return void
     */
   public function __set($key, $val) {
      if ('_' != substr($key, 0, 1)) {
         #Fastidf_Debug::show('__set '. $key, $val);
         $this->_tal->$key = $val;
         return;
      }
      throw new Zend_View_Exception('Setting private or protected class members is not allowed', $this);
   }

   /**
     * E_NOTICE for nonexistent values
     *
     * @param  string $key
     * @return null
     */
   public function __get($key)
   {
      if (isset($this->_tal->$key)) {
         return $this->_tal->$key;
      }  else {
         trigger_error('Template\'s key "' . $key . '" does not exist', E_USER_NOTICE);
      }

      return null;
   }

   public function __isset($key)
   {
      $vars = get_object_vars($this->_tal);
      // TODO : tester récursivement la présence de la clé demandée
      return true;
   }

   public function __unset($key)
   {
      unset($this->_tal->$key);
   }

   public function clearVars()
   {
      $this->_tal = new stdClass();
   }

   /**
     * Assign variables
     *
     */
   public function assign($spec, $value = null) {
      if (!is_array($spec)) {
         $spec = array($spec=>$value);
      }
      foreach ($spec as $key=>$val) {
         if ('_' == substr($key, 0, 1)) {
            throw new Zend_View_Exception('Setting private var is not allowed', $this);
         }
         if ($this->_tal == null) {
            throw new Zend_View_Exception('ETS not defined', $this);
         }
         $this->_tal->$key = $val;
      }
      return;
   }

   /**
     * Includes the view script in a scope with only public $this variables.
     *
     * @param string The view script to execute.
     */
   protected function _run()
   {
      $name = func_get_arg(0);

      $this->_tal->setTemplate($name);
      /*
      $this->_tal->setTemplate(dirname(dirname($name)) . '/main.xhtml');
      $this->_tal->content = $name;
      $this->_tal->templatesDir = dirname(dirname($name)) . '/';
      */
      echo $this->_tal->execute();
   }


}

placer phptal dans /library/TemplatesEngines/PhpTal
voici ma méthode setViewEngine de mon front contrôler dérivé de Zend_Controler_Front

Code:

   public static function setViewEngine ($name = null) {
      $className = ucfirst($name);
      if (null == $className) {
         $className = 'Zend_View';
         $suffix = 'phtml';
      } else {

         if (substr($className, 0, 10) != 'Fast_View_') {
            $className = 'Fast_View_' . $className;
         }
      }
      try {
         Zend_Loader::loadClass($className);
         self::$_instance->_view = new $className();
         self::$_instance->_templateEngine = strtolower($name);
         if (!isset($suffix)) $suffix = self::$_instance->_view->getSuffix();
         self::$_instance->_view->setEncoding(Fast_Registry::getParameters()->get('encoding', 'ISO-8859-1'));
         self::$_instance->_view->setEscape(Fast_Registry::getParameters()->get('escape', 'htmlentities'));
         $viewManager = Zend_Controller_Action_HelperBroker::getStaticHelper('viewRenderer');
         $viewManager->setView(self::$_instance->_view)->setViewSuffix($suffix);
      } catch (Exception $e) {
         Zend_Loader::loadClass('Fast_Exception_View');
         throw new Fast_Exception_View(Fast_Exception_View::INVALID_ENGINE. $className);
      }
   }

elle me permet de choisir mon moteur de template

dans le ini de mes controller  (Fast_Controller_Action dérivé de Zend_Controller_Action pour ne pas toujours le réécrire) je fixe le path pour la recherche des fichier de vues (et le maintemplate en effet j'utilise un maintemplate qui inclus des template de contenu)

Code:

      $this->initView();

      if (class_exists('Fast_View')&&($this->view instanceof Fast_View)) {
         $viewBaseDir = $this->view->getStandardBaseDir();
         $sufix = $this->view->getSuffix();
      } else {
         $viewBaseDir = 'script';
         $sufix = 'phtml';
      }
      $this->view->setMainTemplate($this->view->getScriptPath(null).'main.'.$sufix);
      //Ajouter le chemin vers les templates du module pour les contenus
      $this->view->setScriptPath(dirname($this->getFrontController()->getControllerDirectory($this->_request->getModuleName())) . '/views/'.$viewBaseDir.'/');

il n'y a rien à changer dans les contrôleurs j'utilise phtml, ets smarty, ophp et phptal
sur simple changement d'un paramètre de config c'est l'un ou l'autre des moteur qui est utilisé.

tu peux regarder sur http://sekaijin.ovh.org j'ai posté un article "utiliser le moteur de son choix"

A+JYT

Hors ligne

 

#8 14-04-2008 10:01:35

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: Zend Framework avec PHPTAL

Magnifique ! Merci beaucoup. Je planche là dessus ce soir.
Merci encore.


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#9 18-04-2008 00:08:38

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: Zend Framework avec PHPTAL

Allez hop, je n'ai pas encore eu le temps de m'occuper de ça, je m'y mets dès maintenant !


EDIT : Petite question : j'ai appliqué ceci http://framework.zend.com/manual/fr/zen … dular.html pour différencier partie publique et partie privée de mon site.
Est-ce qu'il y a des risques de conflits avec l'adaptation PHPTAL ? Car pour l'instant je bloque avec l'exemple de sekaijin

Dernière modification par neojick (18-04-2008 01:15:34)


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#10 18-04-2008 22:20:27

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: Zend Framework avec PHPTAL

Petit UP pour sekaijin qui est passé dans le coin et qui n'a peut-être pas vu ma question.


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#11 20-04-2008 02:22:07

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: Zend Framework avec PHPTAL

J'ai adapté l'aide de sekaijin pour intégrer PHPTAL, j'ai fais des modifs pour que tout soit hors de la partie accessible via le navigateur, cependant j'ai un dernier soucis par rapport à mon arborescence.
Mes contrôleurs sont dans un dossiers modules, et j'ai deux parties : site et admin

En direct, tout marche très bien pour appeler QUE la partie de site

Code:

//Fast_Controller_Front::run(dirname(dirname(__FILE__)) . '/application/modules/site/controllers');

Alors qu'avec setControllerDirectory pour mon arborescence, j'ai un message d'erreur et j'ai l'impression de ne plus passer par la Class Fast de sekaijin

Code:

$frontController = Fast_Controller_Front::getInstance();
$frontController->setControllerDirectory(array(
      'default' => dirname(dirname(__FILE__)) . '/application/modules/site/controllers',
      'admin'    => dirname(dirname(__FILE__)) . '/application/modules/admin/controllers'
));

$frontController->dispatch();

Voici le message d'erreur qui me fait penser que je ne passe plus dans FAST !

Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (error)' in C:\xampp\htdocs\monsite\library\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php:249 Stack trace: #0 C:\xampp\htdocs\wmonsite\library\ZendFramework\library\Zend\Controller\Front.php(914): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #1 C:\xampp\htdocs\monsite\html\index.php(52): Zend_Controller_Front->dispatch() #2 {main} thrown in C:\xampp\htdocs\monsite\library\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php on line 249

Dernière modification par neojick (20-04-2008 12:02:12)


Chan IRC de ZF en français : zftalk-fr

Hors ligne

 

#12 20-04-2008 16:44:42

neojick
Membre
Date d'inscription: 13-04-2008
Messages: 223
Site web

Re: Zend Framework avec PHPTAL

Je.... crois que j'ai réussi.... !

Suffisais simplement de fusionner les deux :

Code:

Fast_Controller_Front::run(array(
      'default' => dirname(dirname(__FILE__)) . '/application/modules/site/controllers',
      'admin'    => dirname(dirname(__FILE__)) . '/application/modules/admin/controllers'
));

Chan IRC de ZF en français : zftalk-fr

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