Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 08-10-2010 16:11:10

__fabrice
Membre
Date d'inscription: 25-04-2007
Messages: 131

[RESOLU] Render d'un formulaire and un partial

Hello,

Dans mon layout, j'ai un partial :

Code:

<div class="grid_16" id="header_search_engine">
    <?php echo $this->partial("/searchengine/index.phtml");  ?>
</div>

Ensuite, j'ai formulaire dans /forms/SearchEngine.php, et un controlleur (SearchengineController.php) qui créer l'objet $form :

Code:

<h1>Moteur de recherche</h1>
<?php 
    echo $this->translate('search engine');
    echo $this->form;
?>

Comment faire que le formulaire d'affiche ? Faut-il passer dans un $this->view->placeholder(...) ou autre ?

Merci
Fabrice

Dernière modification par __fabrice (13-10-2010 12:44:14)

Hors ligne

 

#2 08-10-2010 18:06:19

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [RESOLU] Render d'un formulaire and un partial

Salut,

Tu peux passer des paramètres à ton partial:

Code:

<?php
echo $this->partial("/searchengine/index.phtml", array(
    'form' => $this->form
));
?>

Tu pourras y accéder depuis ton partial comme une variable de vue classique ($this->form).


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#3 08-10-2010 23:57:08

__fabrice
Membre
Date d'inscription: 25-04-2007
Messages: 131

Re: [RESOLU] Render d'un formulaire and un partial

Ok merci.

J'avais déjà testé, mais je me demande d'ou viens le $this->form ?... De n'importe quelle action d'un controlleur  (le partial est dans un layout) ?, pas de risque de conflit ?

Dans mon cas, c'est pour faire un moteur de recherche inclus dans toutes les pages(dans un layout avec un partial), avec un autocomplete (ZendX) ou avec Zend_Lucene.

PS : Ou peut-être pas obligé de se servir de Zend_Form non ?. Mais cela ne résoud pas le soucis ;  je dois bien avoir une action pour le partial.


Merci
Fabrice

Dernière modification par __fabrice (08-10-2010 23:59:24)

Hors ligne

 

#4 10-10-2010 10:57:08

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [RESOLU] Render d'un formulaire and un partial

Salut,

Le partial peut être considéré comme une vue. Des variables lui sont assigné comme à n'importe quelle vue, il n'y a pas de collision possible.

Quand tu assignes des variables à une vue depuis le contrôleur, tu assignes des valeurs à des clés, en interne Zend_View va stocker ça dans un tableau et va (je suppose) utiliser la méthode magique __get (invoquée automatiquement sur un $this->variable) pour retrouver ta valeur par sa clé dans ce tableau.

Dans un partial c'est le même fonctionnement, tu assignes des variables à des clés au moment d'invoquer le partial, tout comme tu le fais dans l'action de contrôleur avant de rendre ta vue.

Pour ton formulaire de recherche, le partial est une bonne solution. Nous les utilisons essentiellement pour isoler des morceaux d'html qui sont indépendants et réutilisables dans d'autres pages. Ça n'a pas de rapport avec les actions de contrôleur.

Tu peux très bien avoir un partial dans l'index qui contient un formulaire qui invoque une action d'un autre contrôleur, ça ne pose aucun problème. Zend_Form n'a rien à voir là dedans.


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#5 10-10-2010 12:30:39

__fabrice
Membre
Date d'inscription: 25-04-2007
Messages: 131

Re: [RESOLU] Render d'un formulaire and un partial

hello,

Merci.

En fait, utiliser Zend_Form dans un partial (appelé depuis un layout) n'est pas une bonne solution.
Car pour assigner le formulaire avec Zend_Form (au partial du layout) il faut le faire dans chaque controlleur... c'est idiot.

Du coup, dans le phtml du partial, j'ai mis directement le code html, c'est plus simple

Par contre, j'aurai bien voulu faire un autocomplete dans ce partial là. Mais c'est pareil, comment  assigner une fois pour toute l'autocomplete au partial dans le layout :

Code:

    public function autocompleteAction($search='') {
        $this->view->autocompleteElement = new ZendX_JQuery_Form_Element_AutoComplete('ac');
        $this->view->autocompleteElement->setLabel('Moteur de recherche : ');
        $this->view->autocompleteElement->setJQueryParam('source', '/searchengine/getsearch');
        $this->view->autocompleteElement->setJQueryParam('minLength', $this->configApplication->autocomplete->max_cars);
    }

On doit bien appeler l'action dans un controlleur. Utiliser un placeholder, ou this->action(...) ne change rien au problème...

Fabrice

Hors ligne

 

#6 10-10-2010 13:30:20

Delprog
Administrateur
Date d'inscription: 29-09-2008
Messages: 670

Re: [RESOLU] Render d'un formulaire and un partial

Salut,

Tu cherches à faire du actionStack, il faut effectivement utiliser l'aide de vue action().

Je n'utilise jamais cette technique, donc je te laisse te référer à la doc : http://framework.zend.com/manual/fr/zen … ial.action

Ou alors, je laisse d'autres personnes te renseigner mieux que moi smile


A+ benjamin.


http://www.anonymation.com/ - anonymation - Studio de création.
http://code.anonymation.com/ - anonymation - blog - développement et architecture web

Hors ligne

 

#7 10-10-2010 14:40:59

__fabrice
Membre
Date d'inscription: 25-04-2007
Messages: 131

Re: [RESOLU] Render d'un formulaire and un partial

Merci,
Je vais aller voir de ce coté alors smile

Fabrice

Hors ligne

 

#8 11-10-2010 11:43:50

__fabrice
Membre
Date d'inscription: 25-04-2007
Messages: 131

Re: [RESOLU] Render d'un formulaire and un partial

Hello,

Bon voila, j'ai fait çà avec l'ActionStack, simplement :

Code:

class Custom_Controller_Plugin_ActionSetup extends Zend_Controller_Plugin_Abstract {

 public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {
        if(!$request->isXmlHttpRequest()) {
            $front = Zend_Controller_Front::getInstance();
            if (!$front->hasPlugin('Zend_Controller_Plugin_ActionStack')) {
                $actionStack = new Zend_Controller_Plugin_ActionStack();
                $front->registerPlugin($actionStack, 97);
            } else {
                $actionStack = $front->getPlugin('Zend_Controller_Plugin_ActionStack');
            }
            
            $menuAction = clone($request);
            $menuAction->setActionName('autocomplete')->setControllerName('Searchengine');
            $actionStack->pushStack($menuAction);
        }
    }
}

L'action :

Code:

    public function autocompleteAction() {
        $this->view->autocompleteElement = new ZendX_JQuery_Form_Element_AutoComplete('ac');
        $this->view->autocompleteElement->setLabel($this->view->translate(''));
        $this->view->autocompleteElement->setJQueryParam('source', '/searchengine/getsearchautocomplete');
        $this->view->autocompleteElement->setJQueryParam('minLength', $this->configApplication->autocomplete->max_cars);

        // ActionStack
        $this->_helper->viewRenderer->setResponseSegment('autocomplete');
    }

Layout  :

Code:

    <div class="prefix_11 grid_5" id="header_search_engine">
        <?php  echo $this->partial("/common/_search_engine.phtml");  
        echo $this->layout()->autocomplete;
        ?>
    </div>

Faut que je vois pour arranger le design de l'autocomplete, car il a un décorateur par défaut qui sort le code html du formulaire recevant.

Fabrice

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