Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-03-2011 08:21:53

f.garoby
Membre
Date d'inscription: 02-03-2011
Messages: 105

Problème avec des partialLoop imbriqués

Bonjour,
Je rencontre un problème avec l'utilisation de plusieurs partialLoop imbriqués.
En effet, lorsque j'appelle seulement le premier "niveau", tout se passe bien, mon partialLoop appelle correctement le fichier .phtml et lui passe bien le tableau de valeurs à afficher.
Mais si, dans ce .phtml, je fais appel à un nouveau partialLoop, il semblerait que celui entre en conflit avec celui du niveau supérieur.
Ci-dessous, le code en question :
index.phtml

Code:

<?php
    echo $this->partialLoop()
              ->setObjectKey( 'release' )
              ->partialLoop( 'release/partials/partial-release.phtml', $this->releases );
?>

release/partial-relase.phtml

Code:

<div class="divRelease">
    <div class="header">
        <a href="<?php echo $this->baseUrl();?>/release/edit/id/<?php echo  $this->escape( $this->release->getId() ); ?>">
            <img class="edit" src="<?php echo $this->baseUrl();?>/images/edit.png" alt="edit release" title="edit release" />
        </a>
        <h4>
            <a href="<?php echo $this->baseUrl();?>/release/display/id/<?php echo $this->release->getId(); ?>"><?php echo $this->release->getName();?></a>
        </h4>
        <div class="description">
            <?php echo $this->escape( $this->release->getDescription() ); ?>
        </div>
        <div class="status <?php echo $this->escape( $this->release->getStatus()->getName() ); ?>" title="<?php echo $this->escape( $this->release->getStatus()->getName() ); ?>">
            <span class="startDate">
                <img src="<?php echo $this->baseUrl();?>/images/flag-start.png" />
                <?php echo $this->escape( $this->release->getStartDate() ); ?>
            </span>
            <span class="endDate">
                <img src="<?php echo $this->baseUrl();?>/images/flag-end.png" />
                <?php echo $this->escape( $this->release->getEndDate() ); ?>
            </span>
        </div>
    </div>
    <div class="content">
        <div class="sprints">
            <a href="<?php echo $this->baseUrl();?>/sprint/edit/">
                <img class="edit" src="<?php echo $this->baseUrl();?>/images/add.png" alt="add sprint" title="add sprint" />
            </a>
            <h4>Sprints</h4>
            <?php
                echo $this->partialLoop()
                          ->setObjectKey( 'sprint' )
                          ->partialLoop( 'sprint/partials/partial-sprint-with-stories.phtml', $this->release->getSprints() );
            ?>
        </div>
    </div>
</div>

L'erreur se situe à la ligne 3 de "release/partial-release.phtml", lors du 1° appel à la variable $this->release :

PHP a écrit:

Notice: Key "release" does not exist.
Fatal error: Call to a member function getId() on a non-object in C:\www\Escarmouche\application\views\scripts\release\partials\partial-release.phtml on line 3

Mais, et c'est là que ça devient 'achement bizarre, si je supprime le bloc PHP en fin de ce fichier (la 2° boucle partialLoop), tout refonctionne à nouveau... neutral
(je précise que ce partialLoop aussi fonctionne correctement, si pris séparément).

Y aurait-il donc un conflit lorsque plusieurs partialLoop tournent, ou doit-on faire quelque chose de particulier pour les "isoler" l'un de l'autre ? Google n'a pas été mon ami, sur ce coup-là ! sad

Hors ligne

 

#2 02-03-2011 08:40:49

f.garoby
Membre
Date d'inscription: 02-03-2011
Messages: 105

Re: Problème avec des partialLoop imbriqués

J'avance dans ma recherche d'explications : il semblerait que ce soit l'appel à "setObjectKey" qui fout la grouille...
Après étude du code-source des classes PartialLoop et Partial, je dirais que cette méthode écrase la clé précédente (celle du niveau supérieur, donc), d'où gros problème.

Hors ligne

 

#3 02-03-2011 09:17:20

f.garoby
Membre
Date d'inscription: 02-03-2011
Messages: 105

Re: Problème avec des partialLoop imbriqués

Je continue à me répondre à moi-même.
J'ai trouvé une "solution" de secours : elle consiste à sauvegarder dans une variable la valeur renvoyée par getObjectKey() et à la remettre après le partialLoop du niveau inférieur.

Code:

$objectKey = $this->partialLoop()->getObjectKey();
                echo $this->partialLoop()
                          ->setObjectKey( 'sprint' )
                          ->partialLoop( 'sprint/partials/partial-sprint-with-stories.phtml', $this->release->getSprints() );
                          
                $this->partialLoop()
                     ->setObjectKey( $objectKey );

Cette solution fonctionne mais ne me semble pas très propre. Je laisse donc le sujet ouvert, en espérant avoir une proposition plus propre.

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