Попытка динамической карусели bootstrap-4, в которой изображения поступают из базы данных. Но только один div может быть активным в карусели, так как я могу достичь этого? Как я могу стать активным в первом div в цикле foreach.

<?php 
    include '../employee.php';
    $obj= new employees();
    $result=$obj->select_image();
 ?>
<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

    <title>Hello, world!</title>
  </head>
  <body>
<div id="carouselExampleInterval" class="carousel slide" data-ride="carousel">
  <div class="carousel-inner">
  <?php 
    foreach ($result as $values){
  ?>
  <?php echo $values['profile_pic']; ?> 
    <div class="carousel-item active" data-interval="2000">
      <img src="<?php echo $values['profile_pic']; ?>" class="d-block w-100" alt="...">
    </div>
    <?php 
    }
    ?>

   </div>
  <a class="carousel-control-prev" href="#carouselExampleInterval" role="button" data-slide="prev">
    <span class="carousel-control-prev-icon" aria-hidden="true"></span>
    <span class="sr-only">Previous</span>
  </a>
  <a class="carousel-control-next" href="#carouselExampleInterval" role="button" data-slide="next">
    <span class="carousel-control-next-icon" aria-hidden="true"></span>
    <span class="sr-only">Next</span>
  </a>
</div>


    <!-- Optional JavaScript -->
    <!-- jQuery first, then Popper.js, then Bootstrap JS -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
  </body>
</html>
1
dhruv 1 Май 2019 в 09:30

4 ответа

Лучший ответ

Я ценю все усилия, которые все возможны, но я нашел еще одно решение, которое я считаю самым простым.

Я просто использовал здесь $ count!

<?php 
    include '../employee.php';
    $obj= new employees();
    $result=$obj->select_image();
 ?>
<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <!-- Bootstrap CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

    <title>Dhruv</title>
  </head>
  <body>

<div class="container-fluid">
    <div class="row">
            <div class="col-lg-12">
                <div id="carouselExampleInterval" class="carousel slide" data-ride="carousel">
                      <div class="carousel-inner">
                      <?php 
                      $count = 0;
                        foreach ($result as $values){
                      ?>
                        <div class="carousel-item <?php 
                            if($count==0){
                              echo "active";  
                            }
                            else{
                                echo " ";
                            }
                        ?>" data-interval="2000">
                          <img src="<?php echo $values['profile_pic']; ?>" class=" w-100 d-block " alt="...">
                        </div>
                        <?php 
                        $count++;
                        }
                        ?>
                       </div>
                      <a class="carousel-control-prev" href="#carouselExampleInterval" role="button" data-slide="prev">
                        <span class="carousel-control-prev-icon" aria-hidden="true"></span>
                        <span class="sr-only">Previous</span>
                      </a>
                      <a class="carousel-control-next" href="#carouselExampleInterval" role="button" data-slide="next">
                        <span class="carousel-control-next-icon" aria-hidden="true"></span>
                        <span class="sr-only">Next</span>
                      </a>
                    </div>
            </div>
    </div>
</div>
</div>

    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
  </body>
</html>
1
dhruv 1 Май 2019 в 09:11

Простой метод в php будет иметь логическое значение и использовать его, чтобы определить, является ли это первой итерацией вашего цикла.

<?php
    $isFirst = True;

    foreach ($result as $values){
        echo $values['profile_pic']; 

        if ($isFirst == True) {
            $isFirst == False;
?>  
    <div class="carousel-item active" data-interval="2000">
    <?php
        } else {
    ?>
    <div class="carousel-item" data-interval="2000">
    <?php
        }
    ?>
      <img src="<?php echo $values['profile_pic']; ?>" class="d-block w-100" alt="...">
    </div>
<?php 
    }
?>
1
ItsPete 1 Май 2019 в 06:49

Вы можете использовать индекс в вашем цикле for и проверить, равен ли он 0 (первый цикл).

<?php
    foreach ($result as $index => $values) {
?>
<?php echo $values['profile_pic']; ?>
    <div class="carousel-item <?php echo $index === 0 ? 'active' : ''; ?>" data-interval="2000">
        <img src="<?php echo $values['profile_pic']; ?>" class="d-block w-100" alt="...">
    </div>
<?php 
    }
?>
0
really_operator 1 Май 2019 в 06:47

Есть несколько вариантов, как вы можете решить эту проблему. Я опишу самый простой способ ее решения, но дайте мне знать, если ваш массив не соответствует моему состоянию.

1. Если ключи вашего массива числовые, вы можете использовать этот тип условия

  • PHP 7.3

<?php
foreach ($result as $key =>  $values) {
    ?>
    <?php echo $values['profile_pic']; ?>
    <div class="carousel-item <?php if ($key === array_key_first($result)): ?>active<?php endif;?>" data-interval="2000">
        <img src="<?php echo $values['profile_pic']; ?>" class="d-block w-100" alt="...">
    </div>
    <?php
}
?>

Я добавил php <?php if ($key === array_key_first($result)): ?>active<?php endif; ?> что означает, что active класс должен быть помещен только в первый элемент вашего массива

  • PHP <= 7.3

<?php
foreach ($result as $key => $values) {
    ?>
    <?php echo $values['profile_pic']; ?>
    <div class="carousel-item <?php if ($key === key($result)): ?>active<?php endif; ?>"
         data-interval="2000">
        <img src="<?php echo $values['profile_pic']; ?>" class="d-block w-100" alt="...">
    </div>
    <?php
}

Ключевое условие: php <?php if ($key === key($result)): ?>active<?php endif; ?>

  • Все версии PHP (самые простые)

<?php
foreach ($result as $index => $values) {
    ?>
    <?php echo $values['profile_pic']; ?>
    <div class="carousel-item <?php if ($index === 0): ?>active<?php endif; ?>"
         data-interval="2000">
        <img src="<?php echo $values['profile_pic']; ?>" class="d-block w-100" alt="...">
    </div>
    <?php
}

Здесь вы проверяете только index, который является числовым, и помещаете класс active только в первый ([0]) элемент вашего массива

0
alexey-novikov 1 Май 2019 в 07:07