Вывод на страницу значений через ооп

Всех с наступающим ! Пробую себя в ООП и столкнулся с проблемой.Не получается вывести значения из массива на главную страницу.Выводятся значения в один и тот же див. Не знаю что не так делаю,быть может есть решение для этого? Я догадываюсь что нужно обернуть html разметку в цикл,но не додумываюсь как это сделать в данном случае

 class TopicViewModel extends DbhClass
    {

        public function veiewTopic()
        {

            $con = $this->connect()->prepare("SELECT * FROM topics");
            $con->execute();
            $topicsView = $con->fetchAll(PDO::FETCH_ASSOC);

            foreach ($topicsView as $key => $value) {
                $valId = $value['id'];
                $name_topic = $value['name_topic'];
 echo "<p class='text-title'>"."$name_topic"."</p>";

       }


        }
    }

И на главной

    <a class="popup-with-zoom-anim" href="#small-dialog">
                <div class="portfolio logo1" data-cat="logo">
                    <div class="portfolio-wrapper">
                            <img src="images/pic1.jpg"  alt="Image 2" />
                        <div class="label">
                            <div class="label-text">
                                <?php

                                $viewTopic = new TopicViewModel();
                                $viewTopic->veiewTopic();

                                ?>
<!--                                <p class="text-title">Bird Document</p>-->
                                <span class="text-category">Logo</span>
                            </div>
                            <div class="label-bg"></div>
                        </div>
                    </div>
                </div>
            </a>

Ответы (1 шт):

Автор решения: Pashok

Так проблема решается циклом не внутри div, а выводом div внутри цикла. В качестве дополнения можно исправить следующим образом вашу Модель Topic. Но лучше почитать про MVC, если вы хотите правильно выстроить логику получения и вывода данных.

class TopicViewModel extends DbhClass
{
    public function getTopics()
    {
        $con = $this->connect()->prepare("SELECT * FROM topics");
        $con->execute();
        $topics = $con->fetchAll(PDO::FETCH_ASSOC);

        return $topics ?? [];
    }
}

И вывод исправится таким образом. Из вопроса не понятно в какой div вам выводить новый topic, так что пусть будет этот:

<?php
$topicModel = new TopicViewModel();
$topics = $topicModel->getTopics();
?>
<a class="popup-with-zoom-anim" href="#small-dialog">
  <div class="portfolio logo1" data-cat="logo">
    <?php foreach($topics as $topic): ?>
      <div class="portfolio-wrapper">
        <img src="images/pic1.jpg"  alt="Image 2" />
        <div class="label">
          <div class="label-text">
            <p class='text-title'><?= $topic['name_topic']; ?></p>
            <span class="text-category">Logo</span>
          </div>
          <div class="label-bg"></div>
        </div>
      </div>
    <?php endforeach; ?>
  </div>
</a>
→ Ссылка