回显重复代码时的最佳做法

时间:2014-04-03 11:08:05

标签: php html

我有一个困扰我很长时间的问题。假设我有一个包含几个嵌套div和span的代码。所有这些构成了一个内部有图像的正方形。

echo '<div> <div> <div> <div> <span> <img src='.$image.'> </span></div></div></div>';

只有这段代码有大约15行。

根据我所知道的,当以这种形式回复db的结果时,我将整个html代码放入循环中。这样看起来很笨拙。

有更好的做法吗?

foreach ($query->result() as $row)
{
   $row->address_link=strtolower($row->network);
    echo '<li class="col-md-3 isotope-item '.$row->network.'">';    
                                echo '<div class="portfolio-item img-thumbnail">';
                               echo '<table border="0"><tr>';
                                    echo '<a href="order/'.$row->address_link.'/'.$row->value.'" class="thumb-info">';                                     
                                       echo '<img alt="" class="img-responsive" src="img/'.$row->address_link.'.png">';
                                        echo '<span class="thumb-info-title">';
                                            echo '<span class="thumb-info-inner">'.$row->value.' Euro</span>';                                            
                                        echo '</span>';
                                        echo '<span class="thumb-info-action">';
                                            echo '<span title="Universal" href="order/'.$row->address_link.'/'.$row->value.'" class="thumb-info-action-icon"><i class="icon icon-link"></i></span>';     
                                        echo '</span>'; 
                                    echo '</a>';
                                echo '</div>';
                                 echo '</tr><tr>';
                            echo '<span class="thumb-info-type">'.$row->value*$row->rate.' Eur</span>';
                            echo '</tr></table>';
                            echo '</li>';    
}

2 个答案:

答案 0 :(得分:3)

如果您不熟悉php,可以为此定义function

function wrapImage($src){
   return '<div> <div> <div> <div> <span> <img src='.$src.'> </span></div></div></div>';
}

只需使用不同参数的echo wrapImage($src)即可。

编辑:考虑以下方式呈现数据:

<?php 
    $query = 'select * from Unicorns';
    foreach ($query->result() as $row){
    $row->address_link=strtolower($row->network);
?>   
    <!-- html -->
    <li class="col-md-3 isotope-item <?php echo $row->network; ?>">  
        <div class="portfolio-item img-thumbnail">
            <table border="0"><tr>
                <a href="order/<?php echo $row->address_link.'/'.$row->value; ?>" class="thumb-info">                                   
                    <img alt="" class="img-responsive" src="img/'.$row->address_link.'.png">
                        <span class="thumb-info-title">
                        <span class="thumb-info-inner"><?php echo $row->value; ?> Euro</span>                                            
                    </span>
                    <span class="thumb-info-action">
                        <span title="Universal" href="order/<?php echo $row->address_link.'/'.$row->value ?>" class="thumb-info-action-icon"><i class="icon icon-link"></i></span>  
                    </span>
                </a>
            </div>
            </tr><tr>
        <span class="thumb-info-type"><?php echo ($row->value*$row->rate); ?> Eur</span>
        </tr></table>
        </li>
     <!-- /html -->
<?php } ?>

它被称为spaghetti code ..它不是最好的做法,但是如果HTML比PHP数据更好,那么它比你的例子更好。

答案 1 :(得分:1)

首先,不要在循环中使用echo(优化),将输出存储在变量中并仅打印一次。

重复代码可以存储在函数

function square($image){
  return '<div> <div> <div> <div> <span> <img src='.$image.'> </span></div></div></div>';
}
$output = '';
while ($loop){
  $output .= square($image);
}
echo $output