当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
?>