проблема с нумерацией страниц и лимитом - PullRequest
0 голосов
/ 03 января 2012

У меня есть 3 таблицы site_settings, проповеди и проповедников. В таблице site_settings установите максимальное количество отображаемых проповедников. Таблица проповедников содержит все детали проповедников, а таблица проповедей содержит проповеди всех проповедников. Использую пагинацию для отображения проповедников (2 / с.). если значение таблицы site_settings равно 1 или 2, то ни один из проповедников не отобразит 2, если 3 или 4, то проповедники 4 ... Я не знаю, что происходит. Это проблема с нумерацией страниц или ограничением? Я использую следующий код для этого (в модели)

Метод в модели

function viewAll($offset=0, $limit=null) {

        $this->db->select('settings_value');
        $this->db->from('site_settings');
        $this->db->where('settings_name', 'preachercount');
        $count = $this->db->get()->row();
        echo $count->settings_value;

        $preacher = array();
        $this->db->select('preacher.preacher_id,preacher.first_name,preacher.last_name,preacher.preacher_image,preacher.preacher_logo,preacher.preacher_bio_brief');
        $this->db->distinct('preacher.preacher_id');
        $this->db->from('preacher');
        $this->db->join('sermons', 'sermons.preacher_id=preacher.preacher_id');
        $this->db->order_by('preacher.sort_order');
        $this->db->limit($count->settings_value);
        $query = $this->db->get('', $limit, $offset);
        if ($query->num_rows() > 0) {

            foreach ($query->result() as $row) {
                $preacher[$row->preacher_id]['preacher_id'] = $row->preacher_id;
                $preacher[$row->preacher_id]['preacher_name'] = $row->first_name . ' ' . $row->last_name;
                $preacher[$row->preacher_id]['preacher_image'] = $row->preacher_image;
                $preacher[$row->preacher_id]['preacher_logo'] = $row->preacher_logo;
                $preacher[$row->preacher_id]['preacher_bio_brief'] = $row->preacher_bio_brief;

                $this->db->select('*');
                $this->db->from('sermons');
                $this->db->where('preacher_id', $row->preacher_id);
                $this->db->order_by('sort_order ');
                $sermon_array = array();

                $query = $this->db->get();
                if ($query->num_rows() > 0) {
                    foreach ($query->result() as $row1) {
                        $sermon_array[$row1->sermon_id] ['sermon_image'] = $row1->sermon_image;
                        $sermon_array[$row1->sermon_id] ['sermon_title'] = $row1->sermon_title;
                        $sermon_array[$row1->sermon_id] ['audio_file'] = $row1->audio_file;
                        $sermon_array[$row1->sermon_id] ['sermon_description'] = $row1->sermon_description;
                    }
                }
                $preacher[$row->preacher_id]['sermon'] = $sermon_array;
            }
            return $preacher;
        }
        return false;
    }

Метод в контроллере

function list() {

        $paginate_segment = $this->uri->segment(3) ? $this->uri->segment(3) : 0;
        $winner_list = $this->sermon_model->viewAllpreachers(0, null);
        $config['base_url'] = base_url() . 'sermons/index/';
        $config['total_rows'] = ($winner_list) ? count($winner_list) : 0;
        $config['per_page'] = 2;
        $config['full_tag_open'] = '';
        $config['full_tag_close'] = '';
        $config['uri_segment'] = 3;
        $config['num_links'] = 4;
        $config['display_pages'] = TRUE;
        $config['first_link'] = 'First';
        $config['first_link'] = 'First';
        $config['first_tag_open'] = '<div>';
        $config['first_tag_close'] = '</div>';
        $config['last_link'] = 'Last';
        $config['next_link'] = 'Next';
        $config['prev_link'] = 'Prev';
        $config['cur_tag_close'] = ' | ';
        $config['num_tag_close'] = ' | ';

        //initialize pagination
        $this->pagination->initialize($config);
        $this->data['preachers'] = $this->sermon_model->viewAllpreachers($paginate_segment, $config['per_page']);
        $this->data['links'] = $this->pagination->create_links();
        $this->data['page'] = $this->config->item('APP_template_dir') . 'site/home/sermons_view';
        $this->load->vars($this->data);
        $this->load->view($this->_container);
    }

1 Ответ

0 голосов
/ 03 января 2012

Как указано в комментариях, вы используете ограничение в два раза и вам нужно объединить эти методы:

function viewAll($offset=0, $limit=null) {

    $this->db->select('settings_value');
    $this->db->from('site_settings');
    $this->db->where('settings_name', 'preachercount');
    $count = $this->db->get()->row();

    // now use value of [$count] if [$limit] is null - else use [$limit]
    $limit = (is_null($limit)) ? $count : $limit ;

    $preacher = array();
    $this->db->select('...');
    $this->db->distinct('preacher.preacher_id');
    $this->db->from('preacher');
    $this->db->join('sermons', 'sermons.preacher_id=preacher.preacher_id');
    $this->db->order_by('preacher.sort_order');
    // then remove the [limit()] call
    // $this->db->limit($count->settings_value); <-- NOT NEEDED
    $query = $this->db->get('', $limit, $offset);

Это позволяет эффективно передавать $limit в метод или использовать настройкииз БД.

...