Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP在SMARTY模板中准确显示循环数据_Php_Loops_Smarty_Smarty3_Smarty2 - Fatal编程技术网

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所示。这只是为了检查一下,行得通。。谢谢:)