Codeigniter 3 blog: ¿cómo puedo usar la paginación del método index () dentro del método search ()?

Estoy trabajando en un @ básiblog application en Codeigniter 3.1.8. Las publicaciones son paginado. La aplicación usa unapagination.php archivo de configuración

Hay un cuadro de búsqueda para buscar publicaciones. Yo deseopaginar los resultados de búsqueda y, como los métodosindex() ysearch() están en la misma Publicaciones controlador, estoy buscando una manera de evitar la redundancia de código mediante el uso de la paginación dentro deindex() para los resultados de búsqueda también.

En el controlador de publicaciones tengo:

class Posts extends CI_Controller {
  public function __construct() {
    parent::__construct();
    $this->load->model('Static_model');
    $this->load->model('Posts_model');
    $this->load->model('Categories_model');
    $this->load->model('Comments_model');
  }

  public function index() {
    //load and configure pagination 
    $this->load->library('pagination');
    $config['base_url'] = base_url("/posts");
    $config['query_string_segment'] = 'page';
    $config['total_rows'] = $this->Posts_model->get_num_rows();
    $config['per_page'] = 12;
    if (!isset($_GET[$config['query_string_segment']]) || $_GET[$config['query_string_segment']] < 1) {
      $_GET[$config['query_string_segment']] = 1;
    }
    $limit = $config['per_page'];
    $offset = ($this->input->get($config['query_string_segment']) - 1) * $limit;
    $this->pagination->initialize($config);
    $data = $this->Static_model->get_static_data();
    $data['categories'] = $this->Categories_model->get_categories();
    $data['posts'] = $this->Posts_model->get_posts($limit, $offset);
    $this->load->view('partials/header', $data);
    $this->load->view('posts');
    $this->load->view('partials/footer');
  }

  public function search() {
    $this->form_validation->set_rules('search', 'Search term', 'required|trim|min_length[3]');
    $this->form_validation->set_error_delimiters('<p class = "error search-error"> ', ' </p>
      ');
      // If search fails
      if ($this->form_validation->run() === FALSE) {
        return $this->index();
      } else {
        $expression = $this->input->post('search');
        $data = $this->Static_model->get_static_data();
        $data['categories'] = $this->Categories_model->get_categories();
        $data['posts'] = $this->Posts_model->search($expression, $limit, $offset);
        $data['expression'] = $expression;
        $this->load->view('partials/header', $data);
        $this->load->view('search');
        $this->load->view('partials/footer');
      }
    }
  }

Los Posts_model model tiene el código tanto paraposts list y elResultados de la búsqued:

public function get_posts($limit, $offset) {
    $this->db->order_by('id', 'DESC');
    $query = $this->db->get('posts', $limit, $offset);
    return $query->result();
}

public function search_count($expression) {
    $query = $this->db->like('title', $expression)
                  ->or_like('description', $expression)
                  ->or_like('content', $expression);
    $query = $this->db->get('posts');
    return $query->num_rows();  
}

public function search($expression, $limit, $offset) {
    $query = $this->db->like('title', $expression)
              ->or_like('description', $expression)
              ->or_like('content', $expression);
    $this->db->order_by('posts.id', 'DESC');
    $query = $this->db->get('posts', $limit, $offset);
    return $query->result();
}

Para ser claro, quiero evite copiar este en elsearch() método:

$this->load->library('pagination');
    $config['query_string_segment'] = 'page';
    $config['total_rows'] = $this->Posts_model->get_num_rows();
    $config['per_page'] = 12;
    if (!isset($_GET[$config['query_string_segment']]) || $_GET[$config['query_string_segment']] < 1) {
      $_GET[$config['query_string_segment']] = 1;
    }
    $limit = $config['per_page'];
    $offset = ($this->input->get($config['query_string_segment']) - 1) * $limit;
    $this->pagination->initialize($config);

Me quedé atrapado en mi intento depedir prestad la paginación deindex() asearch().

¿Lo que falta

Respuestas a la pregunta(1)

Su respuesta a la pregunta