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
// 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">‹</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">›</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;