Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
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
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
Peut être une piste :
Personnelement je mets mes contextswitch dans l'init de mes controlleurs :
$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 :
$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
Pages: 1