Я строю сайт с использованием Bootstrap 3, PHP & MySQL использует пример кода для слайдера карусели Bootstrap, найденного на бирже экспертов, который использует синтаксис heredoc для автоматической генерации тега «Активный элемент».
Я знаю, что мог бы просто использовать другой слайдер, поскольку это действительно сложно, но должен быть способ заставить его работать.
Я рвал на себе волосы в течение нескольких часов, так как добавил наложение слайдера и код базы данных в области администрирования, чтобы включить / отключить, что работает, однако мне нужно, чтобы он отображал только «div оверлея», если он есть. выбран в базе данных на веб-интерфейсе.
Я добавил поле базы данных под баннерами, называемыми «оверлей», где 1 = включено, а 0 = отключено.
Как я могу реализовать это в приведенном ниже источнике? Любой другой слайдер это будет легко с простой петлей while, однако эта карусель начальной загрузки — это кошмар!
<div class="container">
<div id="banners" class="carousel slide shadow" data-ride="carousel">
<?php
$bresult = mysql_query("SELECT * FROM banners WHERE id <> 1 ORDER BY iorder ASC") or die(mysql_error());
// SETTING FOR INITIAL ITEM IS 'ITEM ACTIVE'
$active = ' active';
$display_blockCarousel = NULL;
// ITERATE OVER EACH ROW OF THE RESULTS SET
while ($row = mysql_fetch_assoc($bresult))
{
$ID = $row['id'];
$iname = $row['main_image']; // banner image
$www = $row['url'];
$caption = $row['caption'];
$alt = $row['alt'];
$iorder = $row['iorder']; // banner order
// CREATE THE HTML STRING USING HEREDOC SYNTAX
$tag = <<<EOD
<div class="item$active">
<a href="$www"><img class="img-responsive" src="images/banner_images/$iname" alt="$alt"></a>
<div class="carousel-caption"><h3>$caption</h3></div>
</div>
EOD;
// RESET THE 'ACTIVE' ELEMENT
$active = NULL;
// APPEND THE HTML STRING TO THE VARIABLE
$display_blockCarousel .= $tag;
// END OF THE WHILE LOOP
}
?>
<div class="carousel slide" id="banners">
<div class="overlay"></div>
<div class="carousel-inner"> <!--- OVERLAY! --->
<?php echo "$display_blockCarousel"; ?>
</div><!-- / carousel-inner -->
</div> <!-- / carousel slide -->
<!-- Carousel nav -->
<a class="carousel-control left" href="#banners" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span>
</a>
<a class="carousel-control right" href="#banners" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span>
</a>
</div>
</div>
Другой способ написания исходного кода будет (без синтаксиса heredoc):
<?php
$bresult = mysql_query("SELECT * FROM banners ORDER BY iorder ASC") or die(mysql_error());
$rows = array();
while ($row = mysql_fetch_assoc($bresult)) {
$rows[] = $row;
}
?>
<div class="container">
<div id="banners" class="carousel slide shadow" data-ride="carousel">
<div class="carousel-inner" role="listbox">
<?php $i = 1; ?>
<?php foreach ($rows as $row): ?>
<?php $item_class = ($i == 1) ? 'item active' : 'item'; ?>
<div class="<?php echo $item_class;?>">
<a href="<?php echo $row['url']; ?>"><img src="<?php echo 'images/banner_images/'. $row['main_image']; ?>" alt="<?php echo $row['alt']; ?>" /></a>
<div class="container">
<div class="carousel-caption"><h3><?php echo $row['caption']; ?></h3></div>
</div>
</div>
<?php $i++; ?>
<?php endforeach; ?>
</div>
<!-- Carousel nav -->
<a class="carousel-control left" href="#banners" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left"></span></a>
<a class="carousel-control right" href="#banners" data-slide="next">
<span class="glyphicon glyphicon-chevron-right"></span></a>
</div> <!-- / carousel slide -->
<?php if($row['overlay']==="1"){ echo '<div class="overlay"></div>'; } ?>
<!--- no way of using an if statement as outside the loop! ---->
</div>
Как вы видете
<?php if($row['overlay']==="1"){ echo '<div class="overlay"></div>'; } ?>
<!--- no way of using an if statement as outside the loop! ---->
Нет способа индивидуально проверить, равно ли поле базы данных «наложение» здесь 1, так как оно находится вне цикла, и этот div должен быть именно здесь, чтобы работать. Я что-то пропустил?
Задача ещё не решена.
Других решений пока нет …