CodeIgniter 搜索结果分页

2024-01-06

嗯,我已经到处搜索了,但仍然找不到解决我的问题的方法。我对 php 和 codeigniter 仍然很陌生,所以也许我已经错过了答案,但无论如何,这就是我想要做的。

这是我的控制器 (c_index.php) - 调用搜索函数并对结果数组执行分页。

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class C_index extends CI_Controller {


public function __construct()
{
    parent::__construct();
    $this->load->model('m_search');
    $this->load->library("pagination");
    $this->load->library("table");
}
/** Index Page for this controller */
public function index()
{
    if($this->session->userdata('logged_in')){
        $this->load->view('v_user');    
    }   
    else{
        $this->load->view('index'); 
    }
}

public function search() 
{
            // start of search
    $search_term = $this->input->post('word');
    $books = $this->m_search->search_books($search_term);

            // start of pagination
    $config['base_url'] = "http://localhost/test/index.php/c_index/search";
    $config['per_page'] = 5;
    $config['num_links'] = 7;
    $config['total_rows'] = count($books);

    echo $config['total_rows'];
    $this->pagination->initialize($config);
    $data['query'] = array_slice($books,$this->uri->segment(3),$config['per_page']);
    $this->load->view("index",$data);

}

}

这是我的视图(index.php) - 基本上只显示分页结果

<h3> Search Results </h3>   
    <!-- table -->              
    <table class="table table-condensed table-hover table-striped" id="result_table">
        <tbody>
        <?php
        if(isset ($query)){
            if(count($query)!=0){
                foreach($query as $item){
                echo "<tr><td>". $item['title'] ." by " .$item['author'] ."<br/></td></tr>";
                }
                echo $this->pagination->create_links();
            }
            else
            {
                echo "No results found for keyword ' ". $this->input->post('word')." ' .";
            }
        }
        else
        {
            echo "Start a search by typing on the Search Bar";
        }
        ?>              
        </tbody>
    </table>

我的模型(m_search.php) - 基本上搜索数据库并返回结果数组。

<?php

类 M_search 扩展 CI_Model{

function search_books($search_term='default')
{

    $filter = $this->input->post('filter');
    //echo $filter;

    if($filter == 'title')
    {
        //echo 'title';
        $this->db->select('*');
        $this->db->from('book');
        $this->db->like('title',$search_term);
        // Execute the query.
        $query = $this->db->get();
        return $query->result_array();

    }else if($filter == 'author')
    {
        //echo 'author';
        $this->db->select('*');
        $this->db->from('book');
        $this->db->like('author',$search_term);
        // Execute the query.
        $query = $this->db->get();
        return $query->result_array();

    }else if($filter == 'type')
    {
        //echo 'type';
        $this->db->select('*');
        $this->db->from('book');
        $this->db->like('book_type',$search_term);
        // Execute the query.
        $query = $this->db->get();
        return $query->result_array();

    }else if($filter == 'status')
    {
        //echo 'status';
        $this->db->select('*');
        $this->db->from('book');
        $this->db->like('book_status',$search_term);
        // Execute the query.
        $query = $this->db->get();
        return $query->result_array();
    }else
    {
        //echo 'all';
        $this->db->select('*');
        $this->db->from('book');
        $this->db->like('book_status',$search_term);
        $this->db->or_like('book_type',$search_term);
        $this->db->or_like('author',$search_term);
        $this->db->or_like('title',$search_term);
        // Execute the query.
        $query = $this->db->get();
        return $query->result_array();
    }

}

}

现在我的问题是保留分页结果。

第一页很好,但每当我单击页面链接时,表格上的结果就会显示整个数据库,而不仅限于我的搜索结果。

我在某处读到,我需要使用会话来保留我的 search_term,以便在我切换页面时它可以工作,但我不知道把它放在哪里。 任何意见或建议将不胜感激。谢谢。


根据您的需要,有多种不同的方法来处理搜索和分页。根据您现有的代码,这就是我要做的。

Change

$search_term = $this->input->post('word');

to

$search_term = ''; // default when no term in session or POST
if ($this->input->post('word'))
{
    // use the term from POST and set it to session
    $search_term = $this->input->post('word');
    $this->session->set_userdata('search_term', $search_term);
}
elseif ($this->session->userdata('search_term'))
{
    // if term is not in POST use existing term from session
    $search_term = $this->session->userdata('search_term');
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CodeIgniter 搜索结果分页 的相关文章

随机推荐

  • 从字符串中删除重复项

    我正在尝试从 Java 中的字符串中删除重复项 这是我尝试过的 public void unique String s put your code here char newArray s toCharArray Set
  • 如何删除jsPlumb连接

    我正在玩jsplumb http jsplumb org jquery demo html 但我无法删除只有一个 div 的 id 的两个 div 之间的连接 要删除连接 请使用以下代码 jsPlumb deleteConnection c
  • 这是预期的行为吗

    如果这是一个模糊的问题 我很抱歉 因为我是 R 新手 在尝试 R 时 我发现了一个奇怪的行为 当我创建一个像这样的函数时 myfunction lt function a b print a b 并这样称呼它 myfunction b 10
  • 在 C++ 中以正确的编码获取字符串

    我之前问过类似的问题 但我仍然在 C 编码方面遇到麻烦 我尝试尽可能地描述问题 我有一个 C 客户端 通过 TCP 与 C 服务进行通信 现在我需要在消息框 Win32 API 中显示来自服务的消息 C 服务发送的字节采用 UTF 8 编码
  • 如何包含另一个文件夹中的文件?

    在我当前的项目中 我已将类文件和头文件分开 我的项目结构目前如下所示 Project Source src 类1 cpp 类2 cpp main cpp Header include class1 h class2 h 我的问题是我不知道如
  • 如何从 WMV 文件中提取特定帧? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 HomeVC 中快速赋予 xib 单元按钮操作

    我已经创建了 xib collectionview 单元 并且我能够在 HomeVC 中使用它的所有值 如下所示 class HomeVC UIViewController UICollectionViewDelegate UICollec
  • 如何在 CodeIgniter 中从另一个模型继承模型

    我在我的项目中使用 codeigniter 我有一个类模型 我称之为 Genesis 如下所示 class Genesis model extends CI Model function construct parent construct
  • 返回 LINQ 结果时何时调用 ToList 的经验规则

    我正在寻找通话的经验法则ToList ToArray MemoizeAll Rx on IEnumerables 而不是返回时返回查询本身IEnumerable东西 我经常发现最好只返回查询并让调用者决定是否需要列表 但有时由于 linq
  • Spark 2.x + Tika:java.lang.NoSuchMethodError:org.apache.commons.compress.archivers.ArchiveStreamFactory.detect

    我正在尝试解决 Apache Tika gt v 1 14 解析作业的 Spark submit 类路径运行时问题 问题似乎涉及 Spark Submit 类路径与我的 uber jar 平台 CDH 5 15 Spark 2 3 通过 C
  • 如何通过Kafka流式传输大文件?

    我正在将基于 ACID 的整体架构迁移到基于事件的微服务架构 在单体应用中 潜在的大文件存储在数据库中 我想与微服务共享此信息 包括文件内容 我的方法是将文件分割成编号块并发送多条消息 例如 1FileCreatedMessage带有元数据
  • 有人可以证实我对 ASP.NET 生命周期的理解吗?

    我的目标是找到一种方法在创建页面之前的最后一刻更新页面标题 我有一个母版页和一个内容占位符 它们始终包含具有特定属性的页面 该属性可以在代码中的任何位置更新 但我希望该标记的最终值是 html 标题 该页面的预渲染事件是设置标题的最佳位置吗
  • 带时区的 Strptime

    我有一个我解析的字符串DateTime strptime 字符串中日期的时区是 CET 但 Ruby 创建了一个 UTC DateTime 对象 当然它有 2 小时的偏移量 目前我正在解决这个问题DateTime strptime chan
  • 服务生成器改造

    有人可以帮助我理解createService下面代码中的方法 我需要了解方法的参数 Class 是什么S以及下面的深入代码 public class ServiceGenerator public static final String A
  • IE 中表格的 jQuery UI 性能问题

    我在让 UI 代码在 IE 中正常运行时遇到问题 我有一个表 值矩阵 每个单元格可以为空或包含项目列表 我希望用户能够在单元格之间拖动项目 所以我的 HTML 看起来像这样 table tr td td th col 1 th th col
  • 运行 HCatalog 时出错

    A LOAD eventnew txt USING HCatalogLoader 2015 07 08 19 56 34 875 主要 错误 org apache pig tools grunt Grunt 错误 1070 无法使用导入解析
  • 对话流(API.ai)中的数据上下文在哪里

    我一直在阅读有关对话流的内容 但有一件事我仍然不清楚 我将尝试举一个例子 我想实现如下转换 User Hello Google what are some interesting cities Bot Hello there Sydney
  • 卷曲错误“没有替代证书..”

    我们只有一台托管在 Amazon 的服务器 开发服务器 出现问题 通过运行以下命令向特定域发出curl 请求时会出现问题 gt curl https api plivo com 结果是 curl 51 SSL 没有替代证书主题名称与目标主机
  • Selenium sendKeys 不发送所有字符

    我使用 Java Selenium 和 Chrome 进行自动化测试 我们的开发人员最近将我们的 UI 从 AngularJS 升级到 Angular2 不确定这是否重要 但从那时起 sendKeys 就在文本字段中输入不完整的字符 这是一
  • CodeIgniter 搜索结果分页

    嗯 我已经到处搜索了 但仍然找不到解决我的问题的方法 我对 php 和 codeigniter 仍然很陌生 所以也许我已经错过了答案 但无论如何 这就是我想要做的 这是我的控制器 c index php 调用搜索函数并对结果数组执行分页