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

Статус
Закрыто для дальнейших ответов.

Wester

Новичок
Регистрация
31.10.2017
Сообщения
1
<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 - это страница где выводятся все статьи
 

Вложения

miketomlin

Well-Known Member
Регистрация
12.11.2013
Сообщения
101
Это называется фильтром. Например по адресу /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 в коде выше содержит слаг. Числовой идентификатор категории присутствует в базовой таблице, его дублировать не нужно.
 
Статус
Закрыто для дальнейших ответов.
Верх Низ