Я новичок в smarty и пытаюсь реализовать вложенный цикл foreach. Итак, у меня есть две таблицы subCategory и члены, где члены и подкатегория могут быть объединены с помощью subcategory_id. Например, существует около 5 категорий и около 50 членов, принадлежащих к любой из этих 5 категорий. Я хочу зациклить сначала подкатегории, а затем показать участников в каждой категории. Но я не в состоянии сделать второй foreach в умном. В обычном php я умею делать но не в smarty. Пожалуйста помоги.
PHP-код
$result = mysqli_query($conn,"SELECT * FROM subCategory ");
$list_subchannels = array();
while ( $row = mysqli_fetch_assoc($result) )
{
$subcategory = $row['subcat_id'];
$result1 = mysqli_query($conn,"SELECT * FROM member JOIN subCategory ON member.subcategory_id = subCategory.subcat_id WHERE member.subcategory_id = '$subcategory' ");
$list_subchannels = array();
while ( $row1 = mysqli_fetch_assoc($result1) )
{
$list_subchannels[] = $row1;
$smarty->assign($row1['subcat_name'],$list_subchannels);
}$list_subcategories[] = $row;
$smarty->assign("subcategory",$list_subcategories);
}
Код .tpl
{foreach from=$subcategory key=k item=b}
Sub Category Names: {$b.subcat_name}
<!-- Listing Item -->
{foreach from=$b.subcat_name key=k item=a}
<h3>Member Name: {$a.channel_name}</h3>
<span>Member Id: {$a.member_id}</span>
{/foreach}
<!-- Listing Item / End -->
{/foreach}
Он правильно отображает все имена подкатегорий (т.е. первый foreach), но отображает членов под ними. ТИА
PHP-код:
$result = mysqli_query($conn,"SELECT * FROM subCategory ");
$list_subchannels = array();
while ( $row = mysqli_fetch_assoc($result) )
{
$subcategory = $row['subcat_id'];
$result1 = mysqli_query($conn,"SELECT * FROM member JOIN subCategory ON member.subcategory_id = subCategory.subcat_id WHERE member.subcategory_id = '$subcategory' ");
$list_subchannels = array();
while ( $row1 = mysqli_fetch_assoc($result1) )
{
// $list_subchannels[] = $row1; // COMMENT
// $smarty->assign($row1['subcat_name'],$list_subchannels); // COMMENT
$list_subchannels[$subcategory] = $row1; // HERE
}
$list_subcategories[] = $row;
$smarty->assign("subcategory",$list_subcategories);
$smarty->assign("subchannels", $list_subchannels); // HERE
}
Код TPL:
{foreach from=$subcategory key=k item=b}
Sub Category Names: {$b.subcat_name}
<!-- Listing Item -->
{foreach from=$subchannels[$b.subcat_id] key=k item=a} // HERE
<h3>Member Name: {$a.channel_name}</h3>
<span>Member Id: {$a.member_id}</span>
{/foreach}
<!-- Listing Item / End -->
{/foreach}
Попробуйте использовать {function} {/ function}.
Например:
{function name=subcategory_listing level=0}
{foreach $subcategory as $subc}
{if $level == 0}
Sub Category Names: {$subc.subcat_name}
{else}
<h3>Member Name: {$subc.channel_name}</h3>
<span>Member Id: {$subc.member_id}</span>
{/if}
{subcategory_listing cats=$subc.subcat_name level=$level+1}
{/foreach}
{/function}
{subcategory_listing cats=$subcategory}