PHP цикл для элементов HTML

203
11 июня 2017, 19:22

Здравствуйте!

Столкнулся с такой проблемой и никак в голову не приходит решение данной задачи. У меня в карточке товара есть карусель, для просмотра нескольких фотографий из базы данных. Но иногда фотографий меньше. По стандарту в базе 3 поля: image_prev1, image_prev2, image_prev3.

Допустим, я добавил 2 фотографии в товар, а третья выходит пустой и так и выводится на сайте, как пустой белый блок. а мне нужно чтобы если это возможно прогонялась циклом и смотрело, есть ли фотография поля, если да то выводить.

Answer 1

Можете просто проверять переменные на пустоту, и если переменная не пустая тогда добавлять её в карусель:

<?php
//Функцию желательно вынести куда нибудь подальше от HTML
function isValidCarouselImage($field) {
    if (empty($field)) {
        return false;
    }
    $array = explode('.', $field);
    $extension = end($array);
    $available_extensions = ['jpg', 'jpeg', 'png'];
    if (!in_array($extension, $available_extensions)) {
        return false;
    }
    return true;
}
?>
<ul class="carousel-list">
    <?php if (isValidCarouselImage($model_prev1)):?>
    <li class="carousel-element"><img src="<?=$model_prev1?>" class="swipebox"></li> 
    <?php endif;?>
    <?php if (isValidCarouselImage($model_prev2)):?>
    <li class="carousel-element"><img src="<?=$model_prev2?>" class="swipebox"></li> 
    <?php endif;?>
    <?php if (isValidCarouselImage($model_prev3)):?>
    <li class="carousel-element"><img src="<?=$model_prev3?>" class="swipebox"></li> 
    <?php endif;?>
</ul> 

Но лучше бы хранить всё это в одной колонке в json думаю, если скажут завтра сделать 5 превью не надо будет добавлять ещё 2 колонки, ещё лишние строчки кода для слайдера, и проще будет выводить всё это.

UPD. Добавил функцию проверки, но лучше это делать в момент сохранения, а не уже вывода.

Answer 2

Здравствуйте.

Проверяйте на значение поля в таблице:

<?php
...
//допустим у вас есть значения картинок...
$query_result->image_prev1="img1";
$query_result->image_prev2="img2";
$query_result->image_prev3="img3";
...
if($query_result->image_prev1 !== "")
    //выводим картинку
if($query_result->image_prev2 !== "")
    //выводим картинку
if($query_result->image_prev3 !== "")
    //выводим картинку
...
//допустим у вас нет последней картинки и...
$query_result->image_prev1="img1";
$query_result->image_prev2="img2";
$query_result->image_prev3="";
...
if($query_result->image_prev3 !== "")
    //не выведет картинку
?>
READ ALSO
вопрос про массив php

вопрос про массив php

Здравствуйте, я выбираю из бд данные и помещаю их в массив кодом:

225
Как сделать, чтоб select работал в регистрации

Как сделать, чтоб select работал в регистрации

Выдает ошибку, что надо поменять? input нету, так как это опции

300
Регистрация в VK через API

Регистрация в VK через API

Добрый деньНеоднократно натыкался в интернете на программы которые позволяют регистрировать аккаунты для вк в автоматическом режиме

180
Ошибка - Parse error: syntax error, unexpected T_DOUBLE_ARROW [дубликат]

Ошибка - Parse error: syntax error, unexpected T_DOUBLE_ARROW [дубликат]

На данный вопрос уже ответили:

214