PHP 在 SMARTY 模板中准确显示 while 循环数据
PHP display while loop data accurately in SMARTY template
在下面的代码中,当我尝试将 $viewAd
值分配给模板文件并显示结果时,它在分配给模板时不会显示准确的结果。但是,当我在 PHP 页面中直接回显 $viewAd
时,它会在页面顶部显示准确的期望结果。我已经在下面给出了屏幕截图。
我的 PHP 结构是这样的:
$cat = $pdo->prepare("SELECT QUERY HERE");
$cat-> execute();
while($s = $cat->fetch()){
$ads = $pdo->prepare("ANOTHER SELECT QUERY HERE");
$ads-> execute();
$ads_count = $ads->rowCount();
if($ads_count > 0){
$viewAd = "<h4>".$s['pcat_category']."</h4>"; // Echoing Category Name
while($a = $ads->fetch()){
if(isLoggedIn()){
// If logged in display Ads relevant to members
$viewAd .= 'SOME HTML DATA';
foreach($membershipData as $mbs){
$viewAd .= 'EXTENDED HTML DATA';
}
$viewAd .= 'CLOSING HTML DATA';
}else{
// If not logged in display ads relevant to outsiders
$viewAd .= 'SOME HTML DATA';
foreach($membershipData as $mbs){
$viewAd .= 'EXTENDED HTML DATA';
}
$viewAd .= 'CLOSING HTML DATA';
}
}
echo $viewAd; // RETURNS DESIRED RESULT ABOVE THE TEMPLATE ON TOP
}
}
$smarty->assign('viewAds', $viewAd); // ASSIGNED TO TEMPLATE BUT DOES NOT RETURN DESIRED RESULT
屏幕截图 1:使用直接 PHP 的正确结果 echo 显示每个类别,其中包含广告
屏幕截图 2:分配给模板的变量仅显示最后一个包含广告的类别时结果不正确
为什么我将变量分配给模板时没有得到相同的结果?我还尝试了数组方法,我在 while 循环之前声明了 $viewAds = array()
,后来我分配了 $viewAds[] = $viewAd
。然后在 tpl 文件中,我尝试像这样 {foreach $viewAds as $vas}{$vas}{/foreach}
使用 foreach 循环来回显该值,但仍然没有显示每个类别和广告(如第一个屏幕截图所示的预期结果)。因为,它在使用数组时也不起作用,所以我删除了它并尝试直接回显 {$viewAds}
并且也使用 foreach。没有运气,没有任何工作。全部给出第二个屏幕截图中的结果。仅显示最后一个包含广告的类别。但是,由于 PHP 文件中的直接回显给出了正确的结果,我确信我的 PHP 逻辑是正确的。只是我无法在模板文件中正确分配结果并显示它。我在这里犯的错误是什么?我错过了什么吗?
您需要在开始第一个循环之前初始化 $viewAd
,例如:
$viewAd = "";
然后每个类别都应该附加到 $viewAd
:
$viewAd .= "<h4>".$s['pcat_category']."</h4>";
这样所有类别都将包含在您的最终 HTML 中。
在下面的代码中,当我尝试将 $viewAd
值分配给模板文件并显示结果时,它在分配给模板时不会显示准确的结果。但是,当我在 PHP 页面中直接回显 $viewAd
时,它会在页面顶部显示准确的期望结果。我已经在下面给出了屏幕截图。
我的 PHP 结构是这样的:
$cat = $pdo->prepare("SELECT QUERY HERE");
$cat-> execute();
while($s = $cat->fetch()){
$ads = $pdo->prepare("ANOTHER SELECT QUERY HERE");
$ads-> execute();
$ads_count = $ads->rowCount();
if($ads_count > 0){
$viewAd = "<h4>".$s['pcat_category']."</h4>"; // Echoing Category Name
while($a = $ads->fetch()){
if(isLoggedIn()){
// If logged in display Ads relevant to members
$viewAd .= 'SOME HTML DATA';
foreach($membershipData as $mbs){
$viewAd .= 'EXTENDED HTML DATA';
}
$viewAd .= 'CLOSING HTML DATA';
}else{
// If not logged in display ads relevant to outsiders
$viewAd .= 'SOME HTML DATA';
foreach($membershipData as $mbs){
$viewAd .= 'EXTENDED HTML DATA';
}
$viewAd .= 'CLOSING HTML DATA';
}
}
echo $viewAd; // RETURNS DESIRED RESULT ABOVE THE TEMPLATE ON TOP
}
}
$smarty->assign('viewAds', $viewAd); // ASSIGNED TO TEMPLATE BUT DOES NOT RETURN DESIRED RESULT
屏幕截图 1:使用直接 PHP 的正确结果 echo 显示每个类别,其中包含广告
屏幕截图 2:分配给模板的变量仅显示最后一个包含广告的类别时结果不正确
为什么我将变量分配给模板时没有得到相同的结果?我还尝试了数组方法,我在 while 循环之前声明了 $viewAds = array()
,后来我分配了 $viewAds[] = $viewAd
。然后在 tpl 文件中,我尝试像这样 {foreach $viewAds as $vas}{$vas}{/foreach}
使用 foreach 循环来回显该值,但仍然没有显示每个类别和广告(如第一个屏幕截图所示的预期结果)。因为,它在使用数组时也不起作用,所以我删除了它并尝试直接回显 {$viewAds}
并且也使用 foreach。没有运气,没有任何工作。全部给出第二个屏幕截图中的结果。仅显示最后一个包含广告的类别。但是,由于 PHP 文件中的直接回显给出了正确的结果,我确信我的 PHP 逻辑是正确的。只是我无法在模板文件中正确分配结果并显示它。我在这里犯的错误是什么?我错过了什么吗?
您需要在开始第一个循环之前初始化 $viewAd
,例如:
$viewAd = "";
然后每个类别都应该附加到 $viewAd
:
$viewAd .= "<h4>".$s['pcat_category']."</h4>";
这样所有类别都将包含在您的最终 HTML 中。