php - PHP在SMARTY模板中准确显示while循环数据
问题描述
在下面的代码中,当我尝试为$viewAd
模板文件赋值并显示结果时,它在分配给模板时不会显示准确的结果。$viewAd
但是,当我直接在 PHP 页面中回显时,它会在页面顶部显示准确的所需结果。我已经给出了下面的截图。
我的 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 回显的正确结果显示其中包含广告的每个类别
屏幕截图 2:当分配给模板的变量仅显示包含广告的最后一个类别时,结果不正确
为什么将变量分配给模板时没有得到相同的结果?我还尝试了$viewAds = array()
在 while 循环之前声明的数组方法,后来我分配了$viewAds[] = $viewAd
. 然后在 tpl 文件中,我尝试像这样使用 foreach 循环来回显该值,{foreach $viewAds as $vas}{$vas}{/foreach}
但仍然没有显示每个类别和广告(所需的结果如第一个屏幕截图所示)。因为,它也不能使用数组,我删除它并尝试回显{$viewAds}
直接的方式和 foreach 也是。没有运气,没有任何工作。All 给出了第二个屏幕截图中的结果。仅显示包含广告的最后一个类别。但是,由于 PHP 文件中的直接回显给出了正确的结果,我确信我的 PHP 逻辑是正确的。只是我无法在模板文件中正确分配该结果并显示它。我在这里犯了什么错误?我错过了什么吗?
解决方案
您需要 $viewAd
在开始第一个循环之前进行初始化,例如:
$viewAd = "";
然后每个类别应附加到$viewAd
:
$viewAd .= "<h4>".$s['pcat_category']."</h4>";
这样,所有类别都将包含在您的最终 HTML 中。
推荐阅读
- python - 检查 NumPy 数组的所有元素是否符合条件
- firebase - 如何让简单的人脸检测工作?
- javascript - 你如何创建这个正则表达式来阻止字符?
- owl-carousel - 如何将全局轮播(owl-carousel)添加到撇号-cms?
- c# - 多值字典枚举
- angular - 角度:自定义导入 - 指定文件路径
- python - 当我运行此代码时,我什么也没有,它应该打印折腾的结果
- python - 为什么我收到错误“列表索引超出范围”以及如何解决?
- android - 根据模拟器,我的简单计算器“停止工作”并且根本无法打开
- java - 通过 JNI 调用方法时导致 IncompatibleClassChangeError 的原因是什么?