Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 27-02-2009 18:26:48

enjoy
Membre
Date d'inscription: 25-02-2009
Messages: 15

Prototype Ajax.Updater dans une View= ContextSwitch, AjaxContext

Bonjour, j'ai déjà lu des problèmes à ce sujet en faisant des recherches dans le forum mais je n'ai pas trouvé d'exemple.
On dit que tout est ici http://framework.zend.com/manual/fr/zen … textswitch
mais je n'ai pas bien saisie.

J'ai pourtant réussi à faire ce que je voulais mais je voudrais utiliser ContextSwitch et/ou AjaxContext si cela est fait pour...

Je mets à jour les lignes d'une table en fonction d'une string:
------------------------------------------------------
index.phtml:

<label for="contactSearchString">Rechercher : </label>
<input
    type=text name="contactSearchString" id="contactSearchString"
    onchange="updateElementByUrl('<?php
    echo $this->url(array('controller'=>'contact',
        'action'=>'table')); ?>',$('contactSearchString').serialize(true), 'contactAdminBasicTable')" />
<!--Table -->
<div id=contactAdminBasicTable><?php

include_once('table.phtml');
?></div>

------------------------------------------------------
fonction JS:

function updateElementByUrl(url, pars, target) {

    var myAjax = new Ajax.Updater(target, url, {
        method :'get',
        parameters :pars
    });
}

------------------------------------------------------
controller :

class Admin_ContactController extends Zend_Controller_Action



function tableAction()
{ if ($this->_request->isXmlHttpRequest())
{
    if(isset($_GET['contactSearchString'])){
        $contactSearchString=$_GET['contactSearchString'];}

        $contacts = SocieteContact::getInstance();
        $this->view->contacts = $contacts->listAllByString($contactSearchString);
        $this->_helper->layout->disableLayout();
}}

------------------------------------------------------
function indexAction()
{
    $this->view->title = "Gestion des Contacts";
    $contacts = SocieteContact::getInstance();
    $this->view->contacts = $contacts->listAll();
   
}
------------------------------------------------------
table.phtml :

<table class=adminBasicTable>
    <tr>
        <th>Nom</th>
        <th>Prénom</th>
        <th>Titre</th>
        <th>Signataire</th>
        <th>Type</th>
        <th>Société</th>
        <th>Modifier/Supprimer</th>
    </tr>
    <?php
    //$i=0;

    foreach($this->contacts as $contact) :
    $voirUrl=$this->url(array('controller'=>'contact','action'=>'voir', 'id'=>$contact->societe_contact_id));
    //$class=$i%2?'adminBasicTrPaire':'adminBasicTrImpaire';?>
    <tr onmouseover="changeColor(this, true);"
        onmouseout="changeColor(this, false);"
        onclick="clickLink('<?php echo $voirUrl?>');">

        <td><?php echo $this->escape($contact->utilisateur_nom);?></td>
        <td><?php echo $this->escape($contact->utilisateur_prenom);?></td>
        <td><?php echo $this->escape($contact->societe_contact_titre);?></td>
        <td><?php echo $this->escape($contact->societe_contact_signataire?'oui':'non');?></td>
        <td><?php if(array_key_exists($this->escape($contact->contact_type),$contactTypesArray)) echo $contactTypesArray[$this->escape($contact->contact_type)];?></td>
        <td><?php echo $this->escape($contact->societe_nom);?></td>
        <td><a
            href="<?php echo $this->url(array('controller'=>'contact',
            'action'=>'modifier', 'id'=>$contact->societe_contact_id));?>">Modifier</a>
        <a
            href="<?php echo $this->url(array('controller'=>'contact',
            'action'=>'supprimer', 'id'=>$contact->societe_contact_id));?>">Supprimer</a></td>
    </tr>

    <?php endforeach;?>

</table>
------------------------------------------------------

Je n'ai donc pas utiliser de Context du tout? Lorsque j'ai essayé d'en mettre cela NE DESACTIVAIT PAS LE LAYOUT, du coup j'avais la page dans la page...
Quelqu'un pourrait-til mexpliquer comment ca marche??
S'il faut renommer les fichiers qui remplace le contenu du div en ajax.phtml ou xml.phtml??

Dernière modification par enjoy (27-02-2009 18:27:39)

Hors ligne

 

#2 16-09-2009 16:33:38

TDjey
Nouveau membre
Date d'inscription: 17-04-2008
Messages: 7

Re: Prototype Ajax.Updater dans une View= ContextSwitch, AjaxContext

Bonjour,

J'ai le même soucis de l'inclusion de la page, je n'arrive pas à enlever le layout.
Aurais-tu trouvé une solution?

Hors ligne

 

#3 17-09-2009 15:50:15

phpman
Membre
Date d'inscription: 20-03-2008
Messages: 138

Re: Prototype Ajax.Updater dans une View= ContextSwitch, AjaxContext

Peut être une piste :

Personnelement je mets mes contextswitch dans l'init de mes controlleurs :

Code:

$contextSwitch = $this->_helper->getHelper('contextSwitch');
$contextSwitch->addActionContext('mon-action', 'json')->initContext();

J'ai eu le même problème de layout qui se désactive pas lorsque dans l'init je rajoutais après :

Code:

$this->_helper->layout->setLayout('mon_autre_layout');

Le setLayout réactive le layout, donc il faut absolument le mettre avant le contextSwitch sous peine de voir ton layout apparaitre dans tes réponses.


Donc soit tu fais un setLayout en postDispatch, ce qu'il ne faut pas faire, soit tu l'a simplement mis après ton contextswitch dans ton init, soit il est dans un controlleur que tu a étendu et est aussi éxécuté après ton contextSwitch.

Ce n'est qu'une piste, peut être que cela vient d'ailleurs.

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