没有图像时显示默认图像


Displaying default image when there is no image

当CMS中没有上传图像时,我想显示一个默认图像。

到目前为止,我得到了这个代码:

<li><img alt="" class="img-responsive" src="
                        <? if($artikel[0]['images'] == ''){ ?>
                                images/defaultimg.jpg
                        <? }else{ ?>
                        cms/images/<?
                                $plaatje = $artikel[0]['images'];
                                $plaatje = explode(''/', $plaatje);
                                $plaatje = $plaatje[1];
                                $plaatje = explode('"', $plaatje);
                                $plaatje = $plaatje[0];
                                echo $plaatje;
                        }
                        ?>"></li>

但这并不能显示图像。我知道图像在那里,所以我认为输出的html代码有问题。

有人看到了吗?

感谢

按要求输出代码:

<img alt="" class="img-responsive" src="
                                                                cms/images/">

我得到了正确的代码:

                <?php
                  $image = "images/defaultimg.jpg";
                  $pl = $artikel[0]['images'];
                  $pl = explode(''/', $pl);
                  $pl = $pl[1];
                  $pl = explode('"', $pl);
                  $pl = $pl[0];
                  $pl = explode('.', $pl);
                  $pl = $pl[1];
                  echo $pl;
                  if($pl == 'jpg'){ //Check if string is empty
                      $plaatje = $artikel[0]['images'];
                      $plaatje = explode(''/', $plaatje);
                      $plaatje = $plaatje[1];
                      $plaatje = explode('"', $plaatje);
                      $plaatje = $plaatje[0];
                      // If the string supplied in the if condition isn't empty i assume that there's an image
                      // so i prepend the imagefolder as source
                      $image = 'cms/images/'.$plaatje;
                  }
                  $html = '<li><img alt="" class="img-responsive" src="'.$image.'"></li>';
                  echo $html
                ?>

为什么不把if-else逻辑从标记中分离出来,而不是把它放在源属性上。示例:

<?php
$image = '';
if($artikel[0]['images'] == '') {
    $image = 'images/defaultimg.jpg'; // wrap it with quotes
} else {
    $plaatje = $artikel[0]['images'];
    $plaatje = explode(''/', $plaatje);
    $plaatje = $plaatje[1];
    $plaatje = explode('"', $plaatje);
    $image = 'cms/images/' . $plaatje[0]; // append the filename with that particular path
}
?>
<li><img alt="" class="img-responsive" src="<?php echo $image; ?>"></li>

试试这个

<li><img alt="" class="img-responsive" src="
                        <?php if(empty($artikel[0]['images'])){ 
                                echo "images/defaultimg.jpg";
                         }else{ 

                                $plaatje = $artikel[0]['images'];
                                $plaatje = explode(''/', $plaatje);
                                $plaatje = $plaatje[1];
                                $plaatje = explode('"', $plaatje);
                                $plaatje = $plaatje[0];
                                echo "cms/images/".$plaatje;
                        }
                        ?>"></li>

AS@Ghost说,从视图中分离逻辑,另一个更干净的解决方案:

<?php
    if (empty($artikel[0]['images']){
        $artikel[0]['images'] = 'images/defaultimg.jpg';
    }else{
        $artikel[0]['images'] = 'cms/images/' . basename($artikel[0]['images']);
    }
?>
<li><img alt="" class="img-responsive" src="<?php echo $artikel[0]['images']; ?>"></li>

问题似乎出在代码的布局上,正如您在输出中清楚地看到的那样,您得到了换行符,可能还有更多未知的未知项。

最好重构成这样。

<?php
  $image = "images/defaultimg.jpg";
  if($artikel[0]['images'] != ''){ //Check if string is empty
      $plaatje = $artikel[0]['images']; //Do your magic here
      $plaatje = explode(''/', $plaatje);
      $plaatje = $plaatje[1];
      $plaatje = explode('"', $plaatje);
      $plaatje = $plaatje[0];
      // If the string supplied in the if condition isn't empty i assume that there's an image
      // so i prepend the imagefolder as source
      $image = 'cms/images/'.$plaatje;
  }
  $html = '<li><img alt="" class="img-responsive" src="$image"></li>';
  echo $html
?>

首先,这将提高代码的可读性,其次,您可以毫不头疼地看到您正在尝试做什么。

这样,您就不必关心2个案例,只需要处理一个案例,其余的由默认变量处理。

但请注意,在你的$artikel[0][‘images’]中也可能有一些错误,所以最后你会在你的图像源中添加一个错误字符串,但你不希望这样。

无论何时向用户显示内容,都应该检查该文件是否存在。在那里,你又一次得到了你未知的未知数。

您的变量分配将看起来像这个

if(file_exists('cms/images/'.$plaatje)){
   $image = 'cms/images/'.$plaatje;
}

这将防止出现上述问题,并且由于您只有一个退出点,因此在您之后处理该代码的人员将不胜感激。

我得到了正确的代码。
                        <?php
                          $image = "images/defaultimg.jpg";
                          $pl = $artikel[0]['images'];
                          $pl = explode(''/', $pl);
                          $pl = $pl[1];
                          $pl = explode('"', $pl);
                          $pl = $pl[0];
                          $pl = explode('.', $pl);
                          $pl = $pl[1];
                          echo $pl;
                          if($pl == 'jpg'){ //Check if string is empty
                              $plaatje = $artikel[0]['images'];
                              $plaatje = explode(''/', $plaatje);
                              $plaatje = $plaatje[1];
                              $plaatje = explode('"', $plaatje);
                              $plaatje = $plaatje[0];
                              // If the string supplied in the if condition isn't empty i assume that there's an image
                              // so i prepend the imagefolder as source
                              $image = 'cms/images/'.$plaatje;
                          }
                          $html = '<li><img alt="" class="img-responsive" src="'.$image.'"></li>';
                          echo $html
                        ?>