PHP在SMARTY模板中准确显示循环数据
在以下代码中,当我尝试将PHP在SMARTY模板中准确显示循环数据,php,loops,smarty,smarty3,smarty2,Php,Loops,Smarty,Smarty3,Smarty2,在以下代码中,当我尝试将$viewAd值分配给模板文件并显示结果时,分配给模板时不会显示准确的结果。但是,当我直接回显PHP页面中的$viewAd时,它会在页面顶部显示准确的所需结果。我已经给出了下面的截图 我的PHP结构如下所示: $cat = $pdo->prepare("SELECT QUERY HERE"); $cat-> execute(); while($s = $cat->fetch()){ $ads = $pdo->prepare
$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
$cat=$pdo->prepare(“在此处选择查询”);
$cat->execute();
而($s=$cat->fetch()){
$ads=$pdo->prepare(“此处另一个选择查询”);
$ads->execute();
$ads_count=$ads->rowCount();
如果($ads_count>0){
$viewAd=“”.$s['pcat_category']。“”;//回显类别名称
而($a=$ads->fetch()){
if(isLoggedIn()){
//如果登录,则显示与会员相关的广告
$viewAd.=“一些HTML数据”;
foreach($mbs形式的会员资格数据){
$viewAd.=“扩展HTML数据”;
}
$viewAd.='关闭HTML数据';
}否则{
//如果未登录,则显示与外部人员相关的广告
$viewAd.=“一些HTML数据”;
foreach($mbs形式的会员资格数据){
$viewAd.=“扩展HTML数据”;
}
$viewAd.='关闭HTML数据';
}
}
echo$viewAd;//返回顶部模板上方的所需结果
}
}
$smarty->assign($viewAd',$viewAd);//已分配给模板,但未返回所需结果
屏幕截图1:使用直截了当的PHP echo显示每个类别的正确结果,其中包含广告
屏幕截图2:当分配给模板的变量仅显示最后一个包含广告的类别时,结果不正确
为什么我在将变量分配给模板时没有得到相同的结果?我还尝试了数组方法,在while循环之前声明了
$viewAds=array()
,之后分配了$viewAds[]=$viewAd
。然后在tpl文件中,我尝试像这样使用foreach循环回显值{foreach$viewAds as$vas}{$vas}{/foreach}
,但仍然没有显示每个类别和广告(如第一个屏幕截图中所示的预期结果)。因为,使用数组也不起作用,所以我将其删除,并尝试直接使用foreach回送{$viewAds}
。运气不好,什么都没用。在第二个屏幕截图中给出结果。仅显示最后一个包含广告的类别。然而,由于PHP文件中的direct echo给出了正确的结果,我确信我的PHP逻辑是正确的。只是我无法在模板文件中正确分配结果并显示它。我在这里犯了什么错误?我错过了什么吗?在开始第一个循环之前,需要初始化$viewAd
,例如:
$viewAd = "";
然后,每个类别都应附加到$viewAd
:
$viewAd .= "<h4>".$s['pcat_category']."</h4>";
$viewAd.=''.s['pcat_category'];
这样,所有类别都将包含在最终HTML中。为什么要回显变量并将其分配给模板?@GiacomoM我没有回显它以分配。。。我回显它是为了检查是否只有模板返回无效结果,还是原始代码将无效结果返回给。。当我回显它时,我看到原始PHP代码返回正确的结果,如屏幕截图1所示。这只是为了检查一下,行得通。。谢谢:)