En los enlaces de página generados por Codeigniter Pagination, la página 1 siempre está seleccionada

¡Estoy a punto de tirarme de los pelos por esto!

En la carga inicial de mi página con paginación (por CI), se muestran todas las filas, incluso si solo quiero 3. Sin embargo, al hacer clic en otras páginas, funciona bien (se muestran las filas correctas), pero la página 1 siempre es " seleccionado" (no se puede hacer clic), incluso si hago clic en la página 2, 3, etc.

¿Alguna idea?

My CONTROLADOR:

function album($type, $album_id, $album_name) {

    $this->load->library('pagination');
    $config['base_url'] = base_url("photo_store/album/$type/$album_id/$album_name/");
    $config['total_rows'] = $this->Media_model->get_photos($album_id, 'display_date DESC', NULL, NULL, TRUE);
    $config['per_page'] = 3;
    $this->pagination->initialize($config);
    $album_photos = $this->Media_model->get_photos($album_id, 'display_date DESC', $config['per_page'], $this->uri->segment(6), FALSE);

    $this->_load_view(array(
        /* some other variables here */
        'album_photos' => $album_photos
    ));

)

private function _load_view($more_data) {
    $data = array_merge($more_data, array( /* some other variables here */ ));
    $this->load->view('template', $data);
}

My MODELO:

public function get_photos($album_id=NULL, $order_by='display_date DESC', $limit=NULL, $offset=NULL, $count=FALSE) {

    $result = array();
    $query = $this->db->select('medium.*')->join('medium', "$this->item.medium_id = medium.id", 'inner')->order_by($order_by);
    $limit = $limit ? $limit : '0';
    $offset = $offset ? $offset : '0';
    if ($limit!=='0' && $offset!=='0') {
        $query->limit($limit, $offset);
    }

    if ($album_id) { $result = $query->get_where($this->item, array('album_id' => $album_id)); }
    else { $result = $query->get($this->item); }

    if ($count){ return $result->num_rows(); }
    else { return $result->result(); }

}

My VER:

foreach ($album_photos as $photo) {
    //display photos here
}
echo $this->pagination->create_links();

preguntado el 03 de mayo de 12 a las 21:05

lo que es $this->_load_view() ¿haciendo? -

@Jakub: nada importante, de verdad. modifiqué el controller parte anterior para incluir _load_view() -

5 Respuestas

Simplemente puede agregar esto a la matriz de configuración para que la paginación sepa dónde encontrar la página actual:

$config['uri_segment'] = 4;

respondido 16 nov., 12:20

¡Asegúrese de notar si la pregunta tiene una respuesta aceptada y ha estado activa recientemente antes de publicar una respuesta breve! - durron597

Creo que parte del problema viene aquí:

if ($limit!=='0' && $offset!=='0') {
    $query->limit($limit, $offset);
}

Como no tienes un else parte de su declaración, la consulta nunca se limita a esa primera página.

Te sugiero que cambies ese código a

if ($limit!=='0') {
    $query->limit($limit, $offset);
}

o incluso solo

$query->limit($limit, $offset);

desde $limit teóricamente nunca debería ser null or 0 porque lo has configurado 3. $offset, a menos que se establezca, debe ser 0 para que puedas reemplazar null con él en la función de su modelo,

contestado el 03 de mayo de 12 a las 21:05

su primera sugerencia funciona (más o menos), la segunda de alguna manera hace que el create_links() El método no muestra nada. así que ahora estoy usando tu primera sugerencia. funciona porque la página 1 ahora solo muestra 1 elementos (¡sí!). mi nuevo problema es que, como tengo 3 resultados, debe haber cuatro páginas: (11) (3) (3) (3), sin embargo, la última página con 2 elementos (página 2) no aparece en los enlaces generados . ¿algunas ideas? - Obay

¿Qué sucede si navega manualmente a la cuarta página, es decir, ejemplo.com/page/4? ¿Te da algún error o simplemente no muestra nada? - sigilo

voy manualmente a la cuarta página por ... photo_store/album/category/4/tourism/9 y funciona bien, muestra las dos fotos. pero todavía no hay enlace a la página 4 - Obay

Intenta agregar $config['uri_segment'] = '6'; después de $this->load->library('pagination'); en su Controlador. - sigilo

Sí, son los valores predeterminados; puede personalizar el primer / último enlace o usar $config['use_page_numbers'] = TRUE; para que en su lugar se muestren los números de página reales. Más opciones de configuración disponibles aquí: codeigniter.com/user_guide/libraries/pagination.html - sigilo

Cuando se pasan más de 3 segmentos uri en la URL, la página seleccionada de paginación no se mostrará correctamente, resaltará la primera página todo el tiempo.

La paginación funciona, pero la página seleccionada no se muestra correctamente.

Para resolver esto, solución:

ir Paginación.php archivo que se encuentra en sistema->bibliotecas->Paginación.php

simplemente configura

var $uri_segment = 4;// or 5 or 6;

Funcionará.

Respondido el 28 de Septiembre de 12 a las 15:09

Editar los archivos del sistema siempre es una mala idea. Siempre puede lograr resultados similares sin hacer daño al hacer su propio MY_ controlador. En este caso MY_Pagination. - bota de botella

Simplemente puede agregar esto a la matriz de configuración para que la paginación sepa dónde encontrar la página actual:

$config['uri_segment'] = 4; // Your appropriate uri segment: 5 or 6

Respondido el 30 de diciembre de 15 a las 08:12

Intenta codificar tu controlador como se muestra a continuación:

public function index($page=''){
//...
$page = ($page!='')? $page : 0;
$config["cur_page"] = $page;

//...

}

Respondido el 02 de junio de 19 a las 11:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.