web-dev-qa-db-fra.com

Sessions Joomla au sein d'une boucle ne transmettant qu'une seule valeur

J'ai besoin de passer des variables de one PHP module à another PHP module dans une boucle et affiche simultanément le module plusieurs fois. J'utilise Joomla sessions pour passer des variables et cela me pose quelques problèmes. Seul le dernière valeur de la variable est transmis au deuxième module, ce qui signifie que la valeur atteinte par une variable lorsque le loop is over est passé au deuxième module même si j'utilise sessions within the loop.

premier module

for ($i=1;$i<5;$i++) 
{
    $session = JFactory::getSession();
    $session->set('number', $i);

    // calling second module by position

    $modules = JModuleHelper::getModules("second-position");
    foreach($modules as $mod)
      {
         echo JModuleHelper::renderModule($mod, $attribs);
      }
}

deuxième module

$session = JFactory::getSession();
$x = $session->get('number');

echo $x;

sortie, je reçois

4444

sortie souhaitée

1234

Qu'est-ce qui ne va pas et comment le corriger? Merci d'avance.

2
saibbyweb

Ok je vois le problème maintenant. C'est parce que vous avez surchargé la variable de session dans la boucle, à chaque fois.

Au lieu de cela, essayez ceci:

premier module

$session = JFactory::getSession();
$modules = JModuleHelper::getModules('second-position');

for ($i=1; $i<5; $i++) 
{
    $session->set('number', $i);

    foreach($modules as $mod)
    {
        echo JModuleHelper::renderModule($mod, $attribs);
    }
}

Deuxième module

$session = JFactory::getSession();

for ($i=1; $i<5; $i++) 
{
    echo $session->get('number' . $i);
}

Mise à jour

Ne mettez pas la boucle dans la boucle. Vous pouvez simplement réaliser ce que vous voulez en utilisant:

$session = JFactory::getSession();

for ($i=1; $i<5; $i++) 
{
    $session->set('number' . $i, $i);
    echo $session->get('number' . $i);
}
1
Lodder