【问题标题】:How to get the title and link to the previous and next post in php如何在php中获取标题和指向上一篇和下一篇文章的链接
【发布时间】:2019-07-12 08:16:31
【问题描述】:

我是 PHP 新手,通过开发一个小的 CRUD 博客来学习。我现在面临的挑战是如何在用户打开文章后获取标题和指向上一篇和下一篇博文的链接。这是为了确保轻松导航到下一篇和上一篇文章,而无需点击后退按钮来选择下一篇文章。

下面的图片解释了我的写作。 enter image description here

我已尝试查询数据库并使用 > than id 或 less than id 链接到下一篇和上一篇文章,但均无效。

 <?php
    $previous = "SELECT * FROM posts WHERE `posts`.`id` < $id";
    $next = "SELECT * FROM posts WHERE `posts`.`id` > $id";                      
    echo "<li><a href='{{url('post.php/' . $previous)}}'> Previous</a></li>";
    echo "<li><a href='{{url('post.php/' . $next)}}'> Next</a></li>";
?>    

我实际上想要上一个和下一个链接指向下一篇和上一篇文章的标题。

【问题讨论】:

  • "高于" $currentId 将导致所有文章。我敢肯定你指的是最近发表的文章。
  • 没错。下一个升序,上一个降序
  • 因此,如果您相信下一个 ID 始终是下一个并且前一个 ID 始终是前一个,您可以计算“where id = $thisID-1” for previous 和“$thisID+ 1" 用于跟随。
  • 抛出错误。
  • 我的意思是,为什么不只是将链接显示为&lt;a href='post.php/"SELECT `id` FROM posts WHERE `id` &lt; {id} ORDER BY `id` DESC LIMIT 1";'&gt; Previous&lt;/a&gt;?难道不需要先执行SQL查询获取之前的ID,然后链接到&lt;a href="post.php/123456"&gt; Previous&lt;/a&gt;吗?

标签: php post permalinks next


【解决方案1】:
#current blog post

$blog_id = 5;
$b_query=$conn->prepare("SELECT * FROM blogs WHERE blog_id=:id AND blog_status=:status");
$b_query->execute(array(
    'id' => $blog_id,
    'status' => 1
));
$b_query_get=$b_query->fetch(PDO::FETCH_ASSOC);

/* We check the existence of such data from the database. */
$single_post_control=$b_query->rowCount();
if($single_post_control == 0   ){
    echo "error";
    exit;
}

/* next post - previous post*/
$b_pre_nex=$conn->prepare("SELECT * FROM blogs WHERE   blog_id = (SELECT MIN(blog_id)  FROM blogs WHERE blog_id > :pre_nex_id AND blog_status=:pre_nex_status )  OR blog_id = (SELECT MAX(blog_id) FROM blogs WHERE blog_id < :pre_nex_id AND blog_status=:pre_nex_status) ");
$b_pre_nex->execute(array(
    'pre_nex_id' => $blog_id_get,
    'pre_nex_status' => 1
));

$control=$b_pre_nex->rowCount();
if($control == 0 || $control  > 3  ){
    echo "error";
    exit;
}

/* Here, we are splitting our previous and next posts separately.*/
$prev_post = $b_pre_nex->fetch(PDO::FETCH_ASSOC);
$next_post = NULL;
while ( $rows = $b_pre_nex->fetch(PDO::FETCH_ASSOC) ) {
    $next_post = $rows;
}
if(!isset($next_post)) {
    $next_post = null;
}


echo '<a href="#" style="float:left">'.$prev_post['blog_name'].'</a>';

echo '<a href="#" style="float:right">'.$next_post['blog_name'].'</a>';

也许它可以派上用场。

【讨论】:

    【解决方案2】:
    /**
     * Rows per page
     */
    $limit = 1;
    
    // Find out how many items are in the table
    $total = $db->get_total_count('cat_id', 'category', array('show_home_page' => 1, 'type_id' => 5, 'status' => 1));
    
    
    // How many pages will there be
    $pages = ceil($total / $limit);
    
    // What page are we currently on?
    $page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
        'options' => array(
            'default'   => 1,
            'min_range' => 1,
        ),
    )));
    
    // Calculate the offset for the query
    $offset = ($page - 1)  * $limit;
    
    // Some information to display to the user
    $start = $offset + 1;
    $end = min(($offset + $limit), $total);
    
    // The "back" link
    $prevlink = ($page > 1) ? '<a href="#prev" class="program_nav" data-id="'.($page - 1).'" title="Back"><i class="fa fa-chevron-left"></i></a>' : '<a href="#prev" class="disabled" title="Back"><i class="fa fa-chevron-left"></i></a>';
    
    // The "forward" link
    $nextlink = ($page < $pages) ? '<a href="#next" class="program_nav" data-id="'.($page + 1).'" title="Next"><i class="fa fa-chevron-right"></i></a>' : '<a href="#next" class="disabled" title="Next"><i class="fa fa-chevron-right"></i></a>';
    
    
    $total_query = 'SELECT COUNT(cat_id) FROM category WHERE show_home_page = 1 AND type_id = 5 AND status = 1';
    
    $query = 'SELECT c.name, c.url FROM category as c WHERE c.show_home_page = 1 AND c.type_id = 5 AND c.status = 1 ORDER BY c.order ASC';
    
    $programs = $db->get_table_custom($total_query, $query, true, $limit, $page);
    

    【讨论】:

    • 致命错误:未捕获错误:调用 C:\xampp\htdocs\cms\post.php:133 数组中的成员函数 get_total_count() 堆栈跟踪:#0 {main} 抛出 C :\xampp\htdocs\cms\post.php 在第 133 行
    • 这就是我得到的
    • 这是示例。你需要适应你自己的项目。
    • 没有解释的代码转储对答案并不完全有用。你能解释一下这是如何回答这个问题的吗?
    猜你喜欢
    • 2018-07-22
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多