代码之家  ›  专栏  ›  技术社区  ›  Adam J

Codeigniter通过Ajax/Jquery进行分页

  •  0
  • Adam J  · 技术社区  · 6 年前


    https://www.db-fiddle.com/f/5Q7QezddpNEGabaia2w5FQ/0

    视图

    <div class="row">
        <div class="col-sm-12">
            <div class="card">
                <div class="card-header">
                    <h4 class="card-title">Scores</h4>
                </div>
                <div class="card-body">
                    <div align="right" id="pagination_link"></div>
                    <div class="table-responsive" id="week_table"></div>
                </div>
            </div>
        </div>
    </div>
    <script>
        var league_id = "1";
    
        function load_league_week_scores(week, league, page) {
                $.ajax({
                    url:"<?php echo base_url();?>leagues/league_scores_pagination/"+week+"/"+league+"/"+page,
                    method: "GET",
                    dataType: "json",
                    success: function(data)
                    {
                        $('#week_table').html(data.week_table);
                        $('#pagination_link').html(data.pagination_link);
                    }
                })
            }
        $(document).ready(function () {
            load_league_week_scores(1,league_id,1);
        });
    
        $(document).on("click", ".pagination li a", function(event) {
            event.preventDefault();
            var page = $(this).data("ci-pagination-page");
            load_league_week_scores(page, league_id, page);
        })
    </script>
    

    $route['leagues/league_scores_pagination/(:num)/(:num)/(:num)'] = "leagues/league_scores_pagination/$1/$2/$3";
    

    控制器

    <?php
    if (!defined('BASEPATH')) {
        exit('No direct script access allowed');
    }
    
    class Leagues extends CI_Controller
    {
        private $league_id;
    
    
        function league_scores_pagination($week, $league, $page)
        {
            $this->load->model('Leagues_model', 'leagues_model');
            $this->load->library('pagination');
            $this->leagues_model->setLeagueId($league);
    
            $num_weeks = $this->leagues_model->GetGamesCount();
            $total_rows = $num_weeks * 5;
            //https://www.youtube.com/watch?v=nfDMTzmGi9Q
            $config = array();
            $config['base_url'] = "#";
            $config["total_rows"] = $total_rows;
            $config["per_page"] = 5;
            $config["uri_segment"] = 4; // I've made changes to this nothing has fixed it.
            $config['full_tag_open']    = '<div class="paging text-center"><nav><ul class="pagination">';
            $config['full_tag_close']   = '</ul></nav></div>';
            $config['num_tag_open']     = '<li class="page-item"><span class="page-link">';
            $config['num_tag_close']    = '</span></li>';
            $config['cur_tag_open']     = '<li class="page-item active"><span class="page-link">';
            $config['cur_tag_close']    = '<span class="sr-only">(current)</span></span></li>';
            $config['next_tag_open']    = '<li class="page-item"><span class="page-link">';
            $config['next_tag_close']  = '<span aria-hidden="true"></span></span></li>';
            $config['prev_tag_open']    = '<li class="page-item"><span class="page-link">';
            $config['prev_tag_close']  = '</span></li>';
            $config['first_tag_open']   = '<li class="page-item"><span class="page-link">';
            $config['first_tag_close'] = '</span></li>';
            $config['last_tag_open']    = '<li class="page-item"><span class="page-link">';
            $config['last_tag_close']  = '</span></li>';
            $config["links"] = $num_weeks;
            $config["num_links"] = $num_weeks;
            $this->pagination->initialize($config);
    
            $output = array(
                'pagination_link' => $this->pagination->create_links(),
                'week_table' => $this->leagues_model->fetch_details($week)
            );
    
            echo json_encode($output);
        }
    }
    

    型号

    <?php
    
    
    class Leagues_model extends CI_Model
    {
        private $league_id;
    
        public function __construct()
        {
            parent::__construct();
        }
    
        public function setLeagueId($league_id)
        {
            $this->league_id = $league_id;
        }
    
        public function GetGamesCount($league_id = "")
        {
            if (!empty($league_id)) {
                $this->league_id = $league_id;
            }
    
            // Get our league count
            $league_size = $this->GetLeagueSize();
    
            if (empty($league_size)) {
                return false;
            }
    
            $sql = "SELECT COUNT(nfl_user_matchups_id) as league_games FROM nfl_user_matchups WHERE leagues_id = ?";
            $query = $this->db->query($sql, $this->league_id);
            $count_leagues = $query->row()->league_games;
            $return_count = $count_leagues / $league_size;
    
            return $return_count;
        }
    
        public function GetLeagueSize()
        {
            if (empty($this->league_id)) {
                return false;
            }
            $sql = "SELECT max_capacity FROM leagues WHERE leagues_id = ?";
            $query = $this->db->query($sql, $this->league_id);
    
            return $query->row()->max_capacity;
        }
    
        public function fetch_details($week)
        {
            $output = "";
            $sql = "SELECT week, home_team_id, away_team_id, my_score, their_score, a.team_name as home_team, b.team_name as away_team 
                        FROM nfl_user_matchups nm 
                            LEFT JOIN user_teams a ON nm.home_team_id = a.user_teams_id 
                            LEFT JOIN user_teams b ON nm.away_team_id = b.user_teams_id 
                        WHERE nm.week = ? AND nm.leagues_id = ? 
                        GROUP BY Greatest(home_team_id, away_team_id), Least(home_team_id, away_team_id)";
    
            $query = $this->db->query($sql, array($week, $this->league_id));
            $output .= '<table class="table table-bordered">';
            foreach ($query->result() as $row) {
                if($row->my_score > $row->their_score) {
                    $home_bold = 'style="font-weight: bold;"';
                    $away_bold = '';
                } else {
                    $away_bold = 'style="font-weight: bold;"';
                    $home_bold = '';
                }
                $output .= '<tr><td ' . $home_bold . '>' . $row->home_team . '</td>';
                $output .= '<td>' . $row->my_score . '-' . $row->their_score . '</td>';
                $output .= '<td ' . $away_bold . '>' . $row->away_team . '</td></tr>';
            }
            $output .= '</table>';
            return $output;
        }
    }
    

    正如我说的,我得到了预期的结果,但是分页 create_links() 函数无法正确填充。下面是一段视频,它解释了什么是有效的,什么是不起作用的:

    https://www.screencast.com/t/7eqyatyGV

    0 回复  |  直到 6 年前
        1
  •  1
  •   Mohammedshafeek C S    6 年前

    需要更新的内容

    • 你在“联赛成绩分页”中做的计算是错误的。我将结果的总数传递为5(静态和查询返回的结果非常多),并且正在生成分页。
    • 你没有在你的模态中做任何分页代码。
    • var week_id=1;由我自己添加。您需要通过任何方法将其传递给控制器以使其成为动态的

    更新的代码

    <script>
        var league_id = "1";
        var week_id = 1;
    
        function load_league_week_scores(week, league, page) {
    
                $.ajax({
                    url:"<?php echo base_url();?>leagues/league_scores_pagination/"+week+"/"+league+"/"+page,
                    method: "GET",
                    dataType: "json",
                    success: function(data)
                    {
                        $('#week_table').html(data.week_table);
                        $('#pagination_link').html(data.pagination_link);
                    }
                })
            }
        $(document).ready(function () {
            load_league_week_scores(week_id,league_id,1);
        });
    
        $(document).on("click", ".pagination li a", function(event) {
            event.preventDefault();
            var page = $(this).data("ci-pagination-page");
            load_league_week_scores(week_id, league_id, page);
        })
    </script>
    
    
        function league_scores_pagination($week, $league, $page)
        {
            $per_page = 2;
    
            $this->load->model('Leagues_model', 'leagues_model');
            $this->load->library('pagination');
            $this->leagues_model->setLeagueId($league);
    
            $num_weeks = $this->leagues_model->GetGamesCount();
            $total_rows = 5;//$num_weeks * 5;
            //https://www.youtube.com/watch?v=nfDMTzmGi9Q
            $config = array();
            $config['base_url'] = "#";
            $config["total_rows"] = $total_rows;
            $config["per_page"] = $per_page;
            $config["uri_segment"] = 4; // I've made changes to this nothing has fixed it.
            $config['full_tag_open']    = '<div class="paging text-center"><nav><ul class="pagination">';
            $config['full_tag_close']   = '</ul></nav></div>';
            $config['num_tag_open']     = '<li class="page-item"><span class="page-link">';
            $config['num_tag_close']    = '</span></li>';
            $config['cur_tag_open']     = '<li class="page-item active"><span class="page-link">';
            $config['cur_tag_close']    = '<span class="sr-only">(current)</span></span></li>';
            $config['next_tag_open']    = '<li class="page-item"><span class="page-link">';
            $config['next_tag_close']  = '<span aria-hidden="true"></span></span></li>';
            $config['prev_tag_open']    = '<li class="page-item"><span class="page-link">';
            $config['prev_tag_close']  = '</span></li>';
            $config['first_tag_open']   = '<li class="page-item"><span class="page-link">';
            $config['first_tag_close'] = '</span></li>';
            $config['last_tag_open']    = '<li class="page-item"><span class="page-link">';
            $config['last_tag_close']  = '</span></li>';
            $config['page_query_string'] = FALSE;
            $config['use_page_numbers'] = TRUE;
            // $config["links"] = $num_weeks;
            // $config["num_links"] = $num_weeks;
            $this->pagination->initialize($config);
    
            $output = array(
                'pagination_link' => $this->pagination->create_links(),
                'week_table' => $this->leagues_model->fetch_details($week,$page,$total_rows,$per_page)
            );
    
            echo json_encode($output);
        }
    
    public function fetch_details($week, $page, $total_rows, $per_page = 10)
    {
    
        $totalpages = ceil($total_rows / $per_page);
    
        if (isset($page) && is_numeric($page)) {
           $currentpage = (int) $page;
        } else {
           $currentpage = 1;
        }
    
        if ($currentpage > $totalpages) {           
           $currentpage = $totalpages;
        }
    
        if ($currentpage < 1) {
           $currentpage = 1;
        }
    
        $offset = ($currentpage - 1) * $per_page;
    
    
        $output = "";
        $sql = "SELECT week, home_team_id, away_team_id, my_score, their_score, a.team_name as home_team, b.team_name as away_team 
                    FROM nfl_user_matchups nm 
                        LEFT JOIN user_teams a ON nm.home_team_id = a.user_teams_id 
                        LEFT JOIN user_teams b ON nm.away_team_id = b.user_teams_id 
                    WHERE nm.week = ? AND nm.leagues_id = ? 
                    GROUP BY Greatest(home_team_id, away_team_id), Least(home_team_id, away_team_id) LIMIT ?, ?";
    
        $query = $this->db->query($sql, array($week, $this->league_id, $offset, $per_page));
        $output .= '<table class="table table-bordered">';
        foreach ($query->result() as $row) {
            if($row->my_score > $row->their_score) {
                $home_bold = 'style="font-weight: bold;"';
                $away_bold = '';
            } else {
                $away_bold = 'style="font-weight: bold;"';
                $home_bold = '';
            }
            $output .= '<tr><td ' . $home_bold . '>' . $row->home_team . '</td>';
            $output .= '<td>' . $row->my_score . '-' . $row->their_score . '</td>';
            $output .= '<td ' . $away_bold . '>' . $row->away_team . '</td></tr>';
        }
        $output .= '</table>';
        return $output;
    }
    

    http://baseurl_here/leagues/league_scores_pagination/1/1/4

    推荐文章