Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何更改Codeigniter create_links()生成的链接的结构?_Php_Codeigniter_Codeigniter 3 - Fatal编程技术网

Php 如何更改Codeigniter create_links()生成的链接的结构?

Php 如何更改Codeigniter create_links()生成的链接的结构?,php,codeigniter,codeigniter-3,Php,Codeigniter,Codeigniter 3,我正在开发一个小型博客应用程序。其后端和前端之间有明显的分离: 后端是一个API,由Codeigniter 3制成,可以吐出 页面、帖子、分页等 此API由AngularJS(v.1.7.x)前端使用 前端立柱控制器的外观如下所示: // All posts .controller('PostsController', ['$scope', '$http', function($scope, $http){ //Get current page (?page=2, ?page=3 et

我正在开发一个小型博客应用程序。其后端和前端之间有明显的分离:

  • 后端是一个API,由Codeigniter 3制成,可以吐出 页面、帖子、分页等
  • 此API由AngularJS(v.1.7.x)前端使用 前端立柱控制器的外观如下所示:

    // All posts
    .controller('PostsController', ['$scope', '$http', function($scope, $http){
    
        //Get current page (?page=2, ?page=3 etc)
        const currPage = window.location.search;
    
        // Get all the posts on the current page 
        $http.get('api/' + currPage).then(function(response) {
    
            // Posts
            $scope.posts = response.data.posts;
    
            // posts pagination
            $scope.pagination = response.data.pagination;
        });
    }])
    
    我对Codeigniter(API)生成的分页有一个问题,这是由于它的根是
    http://apiblog.com/api/
    。分页的HTML如下所示:

    <ul class="pagination">
        <li><a href="http://apiblog.com/api/" data-ci-pagination-page="1" rel="prev">&lsaquo;</a></li>
        <li><a href="http://apiblog.com/api/" data-ci-pagination-page="1" rel="start">1</a></li>
        <li class="active"><span>2</span></li>
        <li><a href="http://apiblog.com/api/?page=3" data-ci-pagination-page="3">3</a></li>
        <li><a href="http://apiblog.com/api/?page=4" data-ci-pagination-page="4">4</a></li>
        <li><a href="http://apiblog.com/api/?page=3" data-ci-pagination-page="3" rel="next">&rsaquo;</a></li>
    </ul>
    
    帖子中负责在前端显示和分页帖子的控制器

    private function _initPagination($path, $totalRows, $query_string_segment = 'page') {
        //load and configure pagination 
        $this->load->library('pagination');
        $config['base_url'] = base_url($path);
        $config['query_string_segment'] = $query_string_segment; 
        $config['enable_query_strings'] =TRUE;
        $config['reuse_query_string'] =TRUE;
        $config['total_rows'] = $totalRows;
        $config['per_page'] = 12;
        if (!isset($_GET[$config['query_string_segment']]) || $_GET[$config['query_string_segment']] < 1) {
            $_GET[$config['query_string_segment']] = 1;
        }
        $this->pagination->initialize($config);
    
        $limit = $config['per_page'];
        $offset = ($this->input->get($config['query_string_segment']) - 1) * $limit;
    
        return ['limit' => $limit, 'offset' => $offset];
    }
    
    public function index() {
    
        //call initialization method
        $config = $this->_initPagination("/", $this->Posts_model->get_num_rows());
    
        $data = $this->Static_model->get_static_data();
        //$data['pagination'] = $this->pagination->get_as_array();
        $data['pagination'] = $this->pagination->create_links();
        $data['pages'] = $this->Pages_model->get_pages();
        $data['categories'] = $this->Categories_model->get_categories();  
    
    //use limit and offset returned by _initPaginator method
        $data['posts'] = $this->Posts_model->get_posts($config['limit'], $config['offset']);
    
        // All posts
        $this->output->set_content_type('application/json')->set_output(json_encode($data, JSON_PRETTY_PRINT));
    }
    
    private function\u initPagination($path、$totalRows、$query\u string\u segment='page')){
    //加载和配置分页
    $this->load->library('pagination');
    $config['base\u url']=base\u url($path);
    $config['query\u string\u segment']=$query\u string\u segment;
    $config['enable_query_strings']=TRUE;
    $config['reuse\u query\u string']=TRUE;
    $config['total_rows']=$totalRows;
    $config['per_page']=12;
    如果(!isset($\u GET[$config['query\u string\u segment']]))$\u GET[$config['query\u string\u segment']]<1){
    $\u GET[$config['query\u string\u segment']=1;
    }
    $this->pagination->initialize($config);
    $limit=$config['每页'];
    $offset=($this->input->get($config['query\u string\u segment'))-1)*$limit;
    返回['limit'=>$limit',offset'=>$offset];
    }
    公共职能指数(){
    //调用初始化方法
    $config=$this->_initPagination(“/”,$this->Posts_model->get_num_rows());
    $data=$this->Static_model->get_Static_data();
    //$data['pagination']=$this->pagination->get_as_array();
    $data['pagination']=$this->pagination->create_links();
    $data['pages']=$this->pages\u model->get\u pages();
    $data['categories']=$this->categories\u model->get\u categories();
    //使用_initPaginator方法返回的限制和偏移量
    $data['posts']=$this->posts\u model->get\u posts($config['limit'],$config['offset']);
    //所有职位
    $this->output->set_content_type('application/json')->set_output(json_encode($data,json_PRETTY_PRINT));
    }
    
    在后端(仪表板),POST的代码为:

    public function index() {
    
        //load and configure pagination 
        $this->load->library('pagination');
        $config['base_url'] = base_url("/dashboard/posts");
        $config['query_string_segment'] = 'page';
        $config['total_rows'] = $this->Posts_model->get_num_rows();
        $config['per_page'] = 10;
    
        if (!isset($_GET[$config['query_string_segment']]) || $_GET[$config['query_string_segment']] < 1) {
            $_GET[$config['query_string_segment']] = 1;
        }
        $limit = $config['per_page'];
        $offset = ($this->input->get($config['query_string_segment']) - 1) * $limit;
        $this->pagination->initialize($config);
    
        $data = $this->get_data();
        $data['posts'] = $this->Posts_model->get_posts($limit, $offset);
        $data['offset'] = $offset;
    
        $this->load->view('partials/header', $data);
        $this->load->view('dashboard/posts');
        $this->load->view('partials/footer');
    }
    
    公共功能索引(){
    //加载和配置分页
    $this->load->library('pagination');
    $config['base_url']=base_url(“/dashboard/posts”);
    $config['query_string_segment']='page';
    $config['total_rows']=$this->Posts_model->get_num_rows();
    $config['per_page']=10;
    如果(!isset($\u GET[$config['query\u string\u segment']]))$\u GET[$config['query\u string\u segment']]<1){
    $\u GET[$config['query\u string\u segment']=1;
    }
    $limit=$config['每页'];
    $offset=($this->input->get($config['query\u string\u segment'))-1)*$limit;
    $this->pagination->initialize($config);
    $data=$this->get_data();
    $data['posts']=$this->posts\u model->get\u posts($limit,$offset);
    $data['offset']=$offset;
    $this->load->view('partials/header',$data);
    $this->load->view('dashboard/posts');
    $this->load->view('partials/footer');
    }
    
    假定分页项目是由
    $data['pagination']=$this->pagination->create_links()在“幕后”生成的,我无法实现分页链接的必要配置


    如何实现这一点?

    在您的
    \u初始分页中,您有以下代码行

    $config['base_url'] = base_url($path);
    
    您可以将上面的更改为

    $config['base_url'] = "http://".$_SERVER['HTTP_HOST'] . $path;
    

    不能将base_url设置为?,因为base_url用于core library pagination.php的函数create_links()。或者扩展分页库可能是一种选择?@Vickel应用程序的功能与域名无关,因此基本url是动态的:
    $root=“http://”$\u SERVER['http\u HOST'$root.=str_replace(basename($_SERVER['SCRIPT_NAME']),“”,$_SERVER['SCRIPT_NAME'])$config['base_url']=$root。只需使用
    $config['base\u url']=“http://”$\u SERVER['http\u HOST']@ascsoftw我的后端(仪表板)也显示分页的帖子。我需要
    $root=“http://”$\u服务器['http\u主机]$root.=str_replace(basename($_SERVER['SCRIPT_NAME']),“”,$_SERVER['SCRIPT_NAME'])$config['base_url']=$root,我想。请将您的代码放在我提供的代码的上下文中。谢谢您尚未提供任何与CI相关的代码。需要查看获取数据的函数。我可以知道从API和您的仪表板调用的URL是否有任何差异吗?请告诉我们。
    
    $config['base_url'] = "http://".$_SERVER['HTTP_HOST'] . $path;