Перейти к содержимому

Фотография
- - - - -

Как вывести все статьи из определённой категории в блоге?


  • Вы не можете создать новую тему
  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 Wester

Wester

    Прохожий

    Топикстартер
  • Новичок
  • 0
    1 сообщ.

Отправлено 31 Октябрь 2017 в 10:20

<body>
 
  <div id="wrapper">
 
<?php include "config/header.php"; ?>
 
 
 
    <div id="content">
      <div class="container">
        <div class="row">
          <section class="content__left col-md-8">
            <div class="block">
              <a href="/article.php">Все записи</a>
              <h3>Новое в блоге</h3>
              <div class="block__content">
                <div class="articles articles__horizontal">
 
<?php
        $articles = mysqli_query($connection, "SELECT * FROM `articles` ORDER BY `id` DESC LIMIT 4");
       
while($art = mysqli_fetch_assoc($articles) )
{
?>
 
                 <article class="article">
                   <div class="article__image" style="background-image: url(/static/images/<?php echo $art['images'];?>);"></div>
                   <div class="article__info">
                     <a href="/articles.php?id=<?php echo $art ['id']; ?>"><?php echo $art['title'];?></a>
                     <div class="article__info__meta">
                      <?php 
                      $art_cat = false;
                      foreach ($category as $cat) 
                      {
                      if($cat['id'] == $art['category_id'])
                      {
                      $art_cat = $cat;
                      break;
                      }
                      }
                      ?>
                       <small>Категория: <a href="/articles.php?category=<?php echo $art_cat['id'];?>"><?php echo $art_cat['title']; ?></a></small>
                     </div>
                     <div class="article__info__preview"><?php echo mb_substr (strip_tags($art['text']), 0, 100, 'utf-8') . ' ...'; ?></div>
                   </div>
                 </article>
 
<?php
 
}
?>
 
 
                </div>
              </div>
            </div>
 
            <div class="block">
              <a href="article.php?category=<?php echo $art_cat ['id']; ?>">Все записи</a>
              <h3>Солнечная система [Новое]</h3>
              <div class="block__content">
                <div class="articles articles__horizontal">
 
                 <?php
        $articles = mysqli_query($connection, "SELECT * FROM `articles` WHERE `category_id` = 4 ORDER BY `id` DESC LIMIT 4");
       
while($art = mysqli_fetch_assoc($articles) )
{
?>
 
                 <article class="article">
                   <div class="article__image" style="background-image: url(/static/images/<?php echo $art['images'];?>);"></div>
                   <div class="article__info">
                     <a href="/articles.php?id=<?php echo $art ['id']; ?>"><?php echo $art['title'];?></a>
                     <div class="article__info__meta">
                      <?php 
                      $art_cat = false;
                      foreach ($category as $cat) 
                      {
                      if($cat['id'] == $art['category_id'])
                      {
                      $art_cat = $cat;
                      break;
                      }
                      }
                      ?>
                       <small>Категория: <a href="/articles.php?category=<?php echo $art_cat['id']; ?>"><?php echo $art_cat['title']; ?></a></small>
                     </div>
                     <div class="article__info__preview"><?php echo mb_substr (strip_tags($art['text']), 0, 100, 'utf-8') . ' ...'; ?></div>
                   </div>
                 </article>
 
<?php
}
?>
 
                </div>
              </div>
            </div>
 
            <div class="block">
              <a href="article.php?category=<?php echo $art_cat ['id']; ?>">Все записи</a>
              <h3>Space IT [Новое]</h3>
              <div class="block__content">
                <div class="articles articles__horizontal">
 
                  <?php
        $articles = mysqli_query($connection, "SELECT * FROM `articles` WHERE `category_id` = 3 ORDER BY `id` DESC LIMIT 4");
       
while($art = mysqli_fetch_assoc($articles) )
{
?>
 
                 <article class="article">
                   <div class="article__image" style="background-image: url(/static/images/<?php echo $art['images'];?>);"></div>
                   <div class="article__info">
                     <a href="/articles.php?id=<?php echo $art ['id']; ?>"><?php echo $art['title'];?></a>
                     <div class="article__info__meta">
                      <?php 
                      $art_cat = false;
                      foreach ($category as $cat) 
                      {
                      if($cat['id'] == $art['category_id'])
                      {
                      $art_cat = $cat;
                      break;
                      }
                      }
                      ?>
                       <small>Категория: <a href="/articles.php?category=<?php echo $art_cat['id']; ?>"><?php echo $art_cat['title']; ?></a></small>
                     </div>
                     <div class="article__info__preview"><?php echo mb_substr (strip_tags($art['text']), 0, 100, 'utf-8') . ' ...'; ?></div>
                   </div>
                 </article>
 
<?php
}
?>

 
Нужно что бы при нажатии на "Все записи" в блоке "Солнечная система " или "SPACE IT" выводились все статьи именно из этих категорий. Полный код в закрепленной странице.  Article - это страница где выводятся все статьи

Прикрепленные файлы

  • Прикрепленный файл  index.php   6,54К   43 Количество загрузок:
  • Прикрепленный файл  article.php   4,49К   4 Количество загрузок:

  • 0

Спонсор

#2 miketomlin

miketomlin

    Прохожий

  • Участник
  • 10
    49 сообщ.

Отправлено 02 Ноябрь 2017 в 14:35

Это называется фильтром. Например по адресу /category/тут_слаг_или_числовой_id (у вас /articles.php?category=тут_числовой_id) выбираете из таблицы категорий запись с соотв. идентификатором и, если она найдена, подставляете идентификатор в условие финального запроса на выборку N записей из т.н. базовой таблицы (в данном случае таблицы статей). Код обычно обобщается с кодом выборки по другим признакам (например, по автору), с другим условием (полнотекстовый поиск), из другой базовой таблицы (например, таблицы комментариев), а также без фильтрации. Для списка без фильтрации вы присоединяете все необходимые для вывода метаданные (категорий, авторов и т.п.) при помощи LEFT JOIN, а для списков по конкретному признаку можно исключить соотв. таблицу из списка присоединяемых таблиц и вместо этого подставить в финальный запрос уже полученные фактические данные, например:

SELECT `articles`.*,"{$page['id']}" `category_id`,"{$page['name']}" `category_name` ...

В общем случае, естественно, articles и category тоже подменяете.

 

P.S. Мешать код взаимодействия с БД и разметку не следует. Во-первых, будут «заморозки» при выводе, а во-вторых, если вы не найдете запрошенной категории, нужно выводить совсем др. страницу – страницу 404-ой ошибки. Даже с буферизацией вывода в памяти ваш вариант смотрится достаточно криво.


P.P.S. category_id в коде выше содержит слаг. Числовой идентификатор категории присутствует в базовой таблице, его дублировать не нужно.


Сообщение отредактировал miketomlin: 02 Ноябрь 2017 в 14:29

  • 1



Похожие темы Свернуть

Статистика

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей