在定义变量时,将显示不完整的列表结果.但是,如果没有定义变量,则显示完整的清单结果



我试着创建一个列表

<?php
$list=""
$list .='<h3><strong>'. $item->n_make.' - '.$item->n_model.'</strong></h3>
        <p>'.$item->n_month.' - '.$item->n_year.'</p>
        <p>'.$item->n_short_description.'</p>
        <hr/>';             
?>
<?php
echo $list;
?>

使用它,问题是只显示最后一个列表,而不是所有列表都显示

然而,当我像这样使用它而不定义列表变量

<?php
$list .='<h3><strong>'. $item->n_make.' - '.$item->n_model.'</strong></h3>
        <p>'.$item->n_month.' - '.$item->n_year.'</p>
        <p>'.$item->n_short_description.'</p>
        <hr/>';             
?>
<?php
echo $list;
?>

然后它正确地显示所有的清单,但它显示php未定义变量的通知:list

有什么问题

完整代码

<?php foreach ($this->items as $i => $item) : ?>
            <?php $canEdit = $user->authorise('core.edit', 'com_promo'); ?>
                <?php if (isset($this->items[0]->state)) : ?>
                    <?php $class = ($canChange) ? 'active' : 'disabled'; ?>
                <?php endif; ?>
<?php
$list.='<h3><strong>'. $item->n_make.' - '.$item->n_model.'</strong></h3>
        <p>'.$item->n_month.' - '.$item->n_year.'</p>
        <p>'.$item->n_short_description.'</p>
        <p></p><hr/>';  
?>              

        <?php endforeach; ?>

    <?php if ($canCreate) : ?>
        <a href="<?php echo JRoute::_('index.php?option=com_promo&task=detailform.edit&id=0', false, 2); ?>"
           class="btn btn-success btn-small"><i
                class="icon-plus"></i>
            <?php echo JText::_('COM_PROMO_ADD_ITEM'); ?></a>
    <?php endif; ?>
    <input type="hidden" name="task" value=""/>
    <input type="hidden" name="boxchecked" value="0"/>
    <input type="hidden" name="filter_order" value="<?php echo $listOrder; ?>"/>
    <input type="hidden" name="filter_order_Dir" value="<?php echo $listDirn; ?>"/>
    <?php echo JHtml::_('form.token'); ?>
</form>
<?php       
    $listings = explode("<hr/>", $list);
    $numberOfListings = count($listings);
    $Reset =1;
    for($i = 0; $i < $numberOfListings; ++$i) 
    {
        if ($Reset == 7)
        { ?> 
        <div style="margin: 0 500px 5px 12px; float: left;">
        </br></hr>
<img src="/templates/default/images/deal.jpg"/>     

  </div>
   <hr />
<p></p>
   <?php } if ($Reset == 12) { ?> 
   <div style="margin: 0 500px 5px 12px; float: left;">
        </br></hr>

<img src="/templates/default/images/scheme.jpg"/>   

   </div>
   <hr />
<p></p>
    <?php }
         echo $listings[$i] . "<hr/>";
         if($Reset>15){
                $Reset =1;
          }
          $Reset++;
    }
    ?>

然而,当尝试将解决方案作为共享放置在循环内部或外部时,它会显示2个通知而没有任何列表显示

Notice: Undefined variable: items
Warning: Invalid argument supplied for foreach() in
<<p> 编辑解决方案/strong>
<?php
$list="";
if(count($this->items) >0){ 
    foreach($this->items as $newslist)
    //$i=1;
    {
        $list .='<h3><strong>'.$newslist->n_make.' - '.$newslist->n_model.'</strong></h3>
        <p>'.$newslist->n_month.' - '.$newslist->n_year.'</p>
        <p>'.$newslist->n_short_description.'</p>
        <p></p><hr/>';
        //$i=$i+1;
    }
}else{
       $list='<div>There are no News.</div>';
}       
?>

显然这里有一个循环,尽管这里没有显示。

如果你在循环中定义了$list,它将在每次运行时重置,所以只有最后一个赋值(你的最后一个项目)会显示。

最简单的解决方案是将var定义放在循环之外。

<?php
$list=""
foreach($items as $item) {
    $list .='<h3><strong>'. $item->n_make.' - '.$item->n_model.'</strong></h3>
        <p>'.$item->n_month.' - '.$item->n_year.'</p>
        <p>'.$item->n_short_description.'</p>
        <hr/>';             
}
echo $list;
?>

或者您可以检查$list是否存在并将定义保留在循环中:

<?php
foreach($items as $item) {
    if(!isset($list)) {
        $list="";
    }
    $list .='<h3><strong>'. $item->n_make.' - '.$item->n_model.'</strong></h3>
        <p>'.$item->n_month.' - '.$item->n_year.'</p>
        <p>'.$item->n_short_description.'</p>
        <hr/>';             
}
echo $list;
?>