J'avais auparavant exactement la même exigence de pagination, et j'ai pu le faire fonctionner en utilisant CodeIgniter Active Record.
Tout d'abord, définissez l'option SQL_CALC_FOUND_ROWS
en tant que pseudo-colonne dans votre instruction select et définissez la requête d'échappement sur false :
$this->db->select('SQL_CALC_FOUND_ROWS null as rows, other columns ...',FALSE);
Ensuite, après avoir exécuté votre requête avec la limite et le décalage en place, affectez le jeu de résultats à un tableau de retour :
$data = $this->db->get();
$return['results'] = $data->result();
// Do something with the results
Enfin, exécutez une deuxième requête pour obtenir les lignes trouvées et affectez-les également au tableau de retour. J'utilise ici le chaînage de méthodes pour tout faire en une seule étape.
$return['rows'] = $this->db->query('SELECT FOUND_ROWS() count;')->row()->count;
Et renvoyez le résultat et le tableau de nombre de lignes.
return $return;