1

Тема: Как сделать пагинацию в кастомном модуле?

День добрый!

Нужна помощь, не могу разобраться как сделать пагинацию в своем компоненте.

Вот что наработал

public function getAllEvents($category_url){
       /* $offset = (int) $this->uri->segment(6);
        $row_count = 20;*/

        $query = $this->getListEvents(1, 3);

        if (count($query)) {
            $this->load->library('Pagination');

            $config['base_url'] = site_url($category_url);
            $config['total_rows'] =count($this->getListEvents()) ;
            $config['per_page'] = 1;
            $config['uri_segment'] = $this->uri->total_segments();

            $this->pagination->num_links = 5;
            $this->pagination->initialize($config);
            $this->template->assign('pagination', $this->pagination->create_links_ajax());
            // End pagination
        }


        \CMSFactory\assetManager::create()
            ->setData('eventsForDate', $query);

    }

    public function getListEvents($num =0, $offset = 0){

        $this->db->select('mod_subscribes_event.title event_title, mod_subscribes_event.date event_date, mod_subscribes_event.img event_img, mod_subscribes_event.price event_price, mod_subscribes_event.status event_status, content.cat_url content_cat_url, content.url content_url');

        $this->db->from('content');
        $this->db->join('mod_subscribes_event', 'mod_subscribes_event.link_page_full = content.id');
        $this->db->order_by("event_date", "desc");

        $query = $this->db->get($this->table, $num, $offset);

        $event_row = $query->result_array();

        if ($this->db->_error_message()) {
            throw new Exception($this->db->_error_message());
        }

        $eventsForDate = [];

        foreach ($event_row as $event){
            $date = date("Y-m-d", strtotime($event['event_date']));
            $eventsForDate[$date][] = $event;
        }

        return $eventsForDate;
    }

помогите разобраться?

2

Re: Как сделать пагинацию в кастомном модуле?

Добился того что бы заработало разбиение на сегменты


 public function getAllEvents($category_url){
        $offset = (int) $this->uri->segment(3);
        $row_count = 3;

        $query = $this->getListEvents($offset, $row_count);

        if (count($query)) {

            $this->load->library('Pagination');

            $config['base_url'] = site_url($category_url);
            $config['total_rows'] = count($query) ;
            $config['per_page'] = 1;

            $this->pagination->num_links = 5;
            $this->pagination->initialize($config);

            /*var_dump($this->pagination->create_links());*/

            \CMSFactory\assetManager::create()
                ->setData(array(
                    'pagination' => $this->pagination->create_links(),
                    'eventsForDate' => $query,
                ));

            return $this->fetch_tpl('event');
        }

    }

    public function getListEvents($offset = 0, $row_count = 0){

        $this->db->select('mod_subscribes_event.title event_title, mod_subscribes_event.date event_date, mod_subscribes_event.img event_img, mod_subscribes_event.price event_price, mod_subscribes_event.status event_status, content.cat_url content_cat_url, content.url content_url');

        $this->db->from('content');
        $this->db->join('mod_subscribes_event', 'mod_subscribes_event.link_page_full = content.id');
        $this->db->order_by("event_date", "desc");

        /*$query = $this->db->get($this->table, $num, $offset);*/

        $query = $this->db->get($this->table, $row_count, $offset)->result_array();

        if ($this->db->_error_message()) {
            throw new Exception($this->db->_error_message());
        }

        $eventsForDate = [];

        foreach ($query as $event){
            $date = date("Y-m-d", strtotime($event['event_date']));
            $eventsForDate[$date][] = $event;
        }

        return $eventsForDate;
    }

Но вот не задача, общий список с пагинацией находится по адресу http://trening.loc/all/events, а когда пытаюсь перейти по пагинации на другую страницу http://trening.loc/all/events/1 то получаю ошибку страница не найдена.

Что я забыл сделать?

3

Re: Как сделать пагинацию в кастомном модуле?

в конфиге роутера укажите что /events/1 => /events/

CybernatiC

4

Re: Как сделать пагинацию в кастомном модуле?

Спасибо, я правда переделал чере категории маьерталов, но учту на будущее.

5

Re: Как сделать пагинацию в кастомном модуле?

cybernatic пишет:

в конфиге роутера укажите что /events/1 => /events/

Прописал

$route["/reviews/(.*)"] = "/reviews/";

но все равно при переходе на http://site/reviews/2 отображается "страница не найдена".

На всякий случай - полный index()

    public function index() {
        $this->core->set_meta_tags(lang('Reviews', 'reviews'));

        $this->load->library('form_validation');

        // Create captcha
        $this->dx_auth->captcha();
        $tpl_data['cap_image'] = $this->dx_auth->get_captcha_image();

        $this->template->add_array($tpl_data);

        if (count($_POST) > 0) {            
            $this->form_validation->set_rules('name', lang('Your name', 'reviews'), 'trim|required|min_length[3]|max_length[' . $this->username_max_len . ']|xss_clean');
            $this->form_validation->set_rules('email', lang('Email', 'reviews'), 'trim|required|valid_email|xss_clean');
            $this->form_validation->set_rules('message', lang('Message', 'reviews'), 'trim|required|max_length[' . $this->message_max_len . ']|xss_clean');

            if ($this->dx_auth->use_recaptcha) {
                $this->form_validation->set_rules('recaptcha_response_field', lang("Protection code", 'reviews'), 'trim|xss_clean|required|callback_recaptcha_check');
            }
            else {
                $this->form_validation->set_rules('captcha', lang("Protection code", 'reviews'), 'trim|required|xss_clean|callback_captcha_check');
            }

            if ($this->form_validation->run($this) == FALSE) { // there are errors
                $this->form_validation->set_error_delimiters("", "");
                CMSFactory\assetManager::create()->setData('validation', $this->form_validation);
                form_error();
            } else { // form is validate
                $this->_save_to_db();
            }
        }

        $page = 0;
        if(count($_GET) > 0){
            if( isset($_GET['per_page']) ){
                $page = $_GET['per_page'];                
            }
        }

        $this->db->limit( $this->limit, $page*$this->limit );
        $this->db->order_by('id','desc');

        $this->load->library('Pagination');
        $this->pagination = new \CI_Pagination();        
        $paginationConfig['base_url'] = site_url('reviews/');  
        
        $total_rows = $this->db->query("SELECT COUNT(*) FROM mod_reviews")->result();
        foreach ($total_rows[0] as $row) {
            $total_rows = $row;
        }

        $paginationConfig['total_rows'] = $total_rows;
        $paginationConfig['last_link'] = $total_rows;
        $paginationConfig['per_page'] = $this->limit;
        $paginationConfig['uri_segment'] = 2;
        include_once "./templates/{$this->config->item('template')}/paginations.php";
        $paginationConfig['page_query_string'] = FALSE;

        $this->pagination->initialize($paginationConfig);
        $pagination = $this->pagination->create_links();

        $request = $this->db->get('mod_reviews');
        $DBReviews = $request->result_array();

        CMSFactory\assetManager::create()
                    ->setData('reviews', $DBReviews)
                    ->setData('pagination', $pagination)
                    ->render('reviews');
    }

Thumbs up Thumbs down

6

Re: Как сделать пагинацию в кастомном модуле?

Последний слеш видимо лишний

CybernatiC

7

Re: Как сделать пагинацию в кастомном модуле?

Пробуйте вначале настроить без роутинга, он косячный.

Когда то разрабатывал модули для ImageCMS Corporate