Добрый вечер, уважаемые, попробую максимально точно обозначить ситуацию и ее проблему. Итак, на моем ipb стоит расширение Refferals System, которое нужно немного расширить, а если быть точным, то в таблицу, где выводятся реффералы пользователя нужно вывести и реффералов моих реффералов и их реффералов и так до определенной глубины вложенности. Переходим от слов к коду:
<foreach loop="MyInvitedMembersLoop:$invited as $user">
<php>
$this->DB->build(array('select' => 'name', 'from' => 'members', 'where' => 'dp3_rs_referred_by = '.$user['i_invited_id']));
$this->DB->execute();
while($row = $this->DB->fetch())
{
$chlds[] = $row['name'];
}
print_r($chlds);
</php>
/*и так далее*/
Суть данного куска в том, что идет перебор тех самых реффералов. Потому как только стартует "родной" foreach плагина я начинаю искать по таблица дочерних реффералов моего рефферала (пока что стоит добиться результата на уровне вложенности 2, а там дело возьмет рекурсия и иже с ней). Итогом выполнения будет array $chlds. Консоль благополучно выдает нам значения этого array-я:
Array
(
[0] => СынПётра
[1] => ДругПётра
)
Но так как мы имеем дело с ipb, то не может быть речи о том, чтобы вывести нужные нам данные в foreach-у php вставки,- необходимо использовать тег <foreach> и вот как выглядит кусок вместе с ним:
<foreach loop="MyInvitedMembersLoop:$invited as $user">
<php>
$this->DB->build(array('select' => 'name', 'from' => 'members', 'where' => 'dp3_rs_referred_by = '.$user['i_invited_id']));
$this->DB->execute();
while($row = $this->DB->fetch())
{
$chlds[] = $row['name'];
}
print_r($chlds);
</php>
<if test = "is_array($chlds)">
<foreach loop="$chlds as $chld">
<p>*{$chld}</p>
</foreach>
<else />
<p>null</p>
</if>
Итог - 4 null в месте вывода (по одному на рефферала) и плевки в журнал ошибок:
Warning: Invalid argument supplied for foreach() in /home/enfanter/public_html/logus/cache/skin_cache/cacheid_1/skin_referrals.php on line 225 Warning: Invalid argument supplied for foreach() in /home/enfanter/public_html/logus/cache/skin_cache/cacheid_1/skin_referrals.php on line 225 Array ( [0] => СынПётра [1] => ДругПётра ) Warning: Invalid argument supplied for foreach() in /home/enfanter/public_html/logus/cache/skin_cache/cacheid_1/skin_referrals.php on line 225 Array ( [0] => СынПётра [1] => ДругПётра ) Warning: Invalid argument supplied for foreach() in /home/enfanter/public_html/logus/cache/skin_cache/cacheid_1/skin_referrals.php on line 225
Из чего следуют 2 весьма бугуртные для меня вещи:
1. Где же я допустил ошибку в написании этого "форича" злосчастного;
2. Как так $chlds вообще не считается массивом (этот вывод основан на выводе <p>null</p> на страницу)?
В 225 строке кэш файла как раз тот самый foreach, транслированный на php лад:
$_ips___x_retval = '';
$__iteratorCount = 0;
foreach( $chlds as $chld )
{
$__iteratorCount++;
$_ips___x_retval .= "
<p>*{$chld}</p>
";
/*и так далее*/
Маленькая добавка, если выводить содержимое этого же array-я в <php> аналогичным кодом, то все прекрасно выводится.
На коленях стою...