如何在PHP博客(非wordpress)上按类别过滤帖子?

时间:2017-12-28 20:05:49

标签: php

我正在创建一个项目,我创建了一个允许用户创建和发布博客文章的系统。我希望能够有一个下拉功能,可以按照标记的特定类别过滤和显示帖子。我该怎么做呢?

这不是一个WordPress网站,我自己做的任何研究都主要为WordPress网站提供了结果。

如果有人能帮助我,或者至少指出我的方向,那就太棒了。我在使用PHP方面相当新,所以我会接受任何帮助。

以下是index.php中显示帖子的部分:

<div class="container">
        <div class="row">
        <div class="col-lg-12 col-md-12 col-sm-12 col-xs-12" id="centertext">
            <h1>Posts</h1>

            <?php
            while ($query->fetch()):
        $lastspace = strrpos($description, '');
        ?>
        <!-- THIS IS THE STRUCTURE FOR EACH POST /-->
        <article>
            <div class="preview">
                <div class="ptop">
                    <?php echo "<img src='admin/images/".$image."' width='100%' height='100%' >";?>
          <div class="basicinfo">
            <h2><?php echo $title?></h2>
            <?php echo $category?>
          </div>
                </div>
                <div class="pbottom">
          <p><?php echo substr($description, $lastspace).'...<br><br><a href="post.php?id='.$post_id.'">VIEW POST</a>'?></p>
        </div>
            </div>
        </article>
    <?php endwhile?> 

        </div>          
        </div>
    </div>

这是我在文件顶部唯一的其他PHP:

<?php
include('includes/db_connect.php');

$query = $db->prepare("SELECT post_id, title, image, LEFT(description, 300) AS description, category FROM post INNER JOIN categories ON categories.category_id=post.category_id order by post_id desc limit $start, $per_page");
$query->execute();
$query->bind_result($post_id, $title, $image, $description, $category);

?>

以下是我数据库中的帖子和类别表:

发表

CREATE TABLE `post` (
  `post_id` int(11) NOT NULL,
  `user_id` int(11) NOT NULL,
  `title` varchar(255) NOT NULL,
  `category_id` int(11) NOT NULL,
  `description` text NOT NULL,
  `posted` datetime NOT NULL,
  `photo_id` int(11) DEFAULT NULL,
  `image` varchar(300) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

分类

CREATE TABLE `categories` (
  `category_id` int(11) NOT NULL,
  `category` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

2 个答案:

答案 0 :(得分:1)

一种方式:

在页面上,您需要<select>,其中包含不同的类别。当他们选择一个时,他们被重定向到yoursite.com/index.php?category=xyz),其中xyz是他们选择的类别。

在PHP查询中,您必须添加:WHERE category='$_GET["category"]'(确保为安全性清理此值,使用类似mysql_real_escape_string()或PDO)。

答案 1 :(得分:0)

首先我要确定数据库模型。您可以构建n-to-n模型或1-to-n模型。在1对n模型中,任何帖子只能有一个类别,在n到n模型中,帖子可以有多个类别。

接下来我将确定我想要用户界面的复杂程度。基本上天空是极限,但要记住你的观众。你可以,例如只允许选择一个类别,或者允许选择多个类别。如果您允许多个:那么您是否希望条目必须包含所有类别(“和”逻辑)或允许任何具有任何类别(“或”逻辑)的帖子,其中许多选项也取决于你有多少条目。

一旦你完成了它,它就变得更加简单了:

  • 用户界面确定表单的外观
  • 逻辑和数据库模型确定您需要的SQL查询
  • 然后它只显示您从数据库中返回的条目......