web-dev-qa-db-ja.com

単一の値のみを渡すループ内のJoomlaセッション

ループ内でone PHP moduleからanother PHP moduleにいくつかの変数を渡し、同時にモジュールを複数回表示する必要があります。変数を渡すためにJoomla sessionsを使用し、いくつかの問題を引き起こしています。変数の最後の値のみが2番目のモジュールに渡されます。つまり、loop is overを使用しても、sessions within the loop.が2番目のモジュールに渡されたときに変数によって取得された値のみを意味します

最初のモジュール

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);
      }
}

2番目のモジュール

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

echo $x;

出力、私は得る

4444

必要な出力

1234

何が悪いのか、そしてそれをどのように修正するのですか?前もって感謝します。

2
saibbyweb

わかりました。問題が発生しました。これは、ループ内のセッション変数を毎回オーバーライドしているためです。

代わりに、これを試してください:

最初のモジュール

$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);
    }
}

2番目のモジュール

$session = JFactory::getSession();

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

更新

ループをループ内に配置しないでください。あなたは単にあなたが使いたいものを達成することができます:

$session = JFactory::getSession();

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