2015-02-05 3 views
2

У меня есть страница блога сообщений, которую я пытаюсь разбивать на страницы с помощью CodeIgniter. Нумерация и ограничение, похоже, работают нормально, за исключением того, что я продолжаю получать 404, когда пытаюсь перейти на другую страницу.CodeIgniter pagination не будет проходить первую страницу

Странная вещь - обычные виновники, вызывающие эту проблему, являются правильными. BaseUrl и uri_segment.

Мой контроллер выглядит следующим образом:

$config    = array(); 
$config["base_url"] = $this->config->site_url("/blog"); 
$config["total_rows"] = $this->blog_model->count(); 
$config["per_page"] = 2; 
$config["uri_segment"] = 2; 
$config["num_links"] = round($config["total_rows"]/$config["per_page"]); 

$config['use_page_numbers'] = TRUE; 

$this->pagination->initialize($config); 
$page = ($this->uri->segment(2)) ? $this->uri->segment(2) : 0; 

$this->load->view('blog', array(
    'user' => $this->user, 
    'blog' => $this->blog_model->loadPosts($config['per_page'], $page), 
    'links' => $this->pagination->create_links(), 
    'footer' => $this->blog_model->loadFooter() 
)); 

А потом в моей модели я захватывая посты

public function loadPosts($limit, $start) 
{ 
    $this->db->limit($limit, $start); 
    $this->db->order_by("date", "desc"); 
    //this loads the contact info 
    $query = $this->db->get('entries'); 
    return $query->result(); 
} 

Мой полный URL является www.mysite.com/blog, а затем с нумерацией страниц появляется, как www.mysite.com/blog/2.

Для base_Url Я также пробовал base_url() . "/blog";.

И я попытался установить uri_segment на 1 и 3, но ничего не работает.

Как я пытался играть с маршрутизацией и добавил только, чтобы увидеть, если он будет делать что-нибудь:

$route['blog/(:num)'] = 'blog/$1'; 
+0

Вам не нужно использовать uri-> сегмент. Задайте параметр в своей функции контроллера, это займет значение вашего сегмента. например ($ page = 0). Никакой ошибки невозможно. Кроме того, удалите правило маршрута, поскольку оно ничего не делает и может быть сложным позже. – AdrienXL

+0

@AdrienXL Я был в состоянии попробовать что-либо с маршрутом. Я уже отключил его, как только увидел, что ничего не сделал. Мне всегда приходилось устанавливать uri_segment, и я читал много статей, которые утверждают, что разбиение на страницы не будет работать вообще. Как я могу настроить его в контроллере, не используя его? – zazvorniki

ответ

2

Вы не можете передать параметр в функции индекса() контроллера, как это случайная функция.

Если вы попытаетесь сделать контроллер/var вместо контроллера/функции/var, CodeIgniter выполнит поиск функции var() внутри контроллера, которая не существует. Это то, что происходит, когда вы пытаетесь получить доступ к blog/2: 2() не является функцией вашего контроллера.

Вы можете создать новую функцию в своем контроллере, скажем, на странице() и переместить свой код внутри. Таким образом, вы назовете blog/page/2. Функция page() будет существовать и не получит 404. Также не следует указывать base_url для разбивки на страницы.

$config["base_url"] = site_url("blog/page"); 

Другим решением, если вы абсолютно необходимо в URL, как /blog/2, маршруты:

$route['blog/(:any)'] = 'blog/index/$1'; 

переназначить также может быть решение: http://www.codeigniter.com/user_guide/general/controllers.html#remapping

+0

Итак, если я правильно понимаю это, вы хотите, чтобы я переместил весь свой код из индекса и поместил его в функцию, а затем вызвал функцию внутри индекса? – zazvorniki

+0

@zazvorniki; на самом деле, в ответе выше, я объясню, что вы можете переместить код в настоящее время внутри index() в новую функцию и использовать эту функцию вместо index(). В качестве альтернативного решения вы можете использовать маршруты для отправки параметров в функцию индекса. Это то, что вы сейчас пытаетесь сделать без успеха. – AdrienXL

3

Предполагая, что имя функции, которые содержат ваш код нумерации является индекс(), вы должны поменять маршрут на:

$route['blog/(:num)'] = 'blog/index/$1'; 

А функция в индексе(), добавьте параметр $ Страницы:

public function index($page = 1){ 
... 
+0

Я избавился от индекса с .htaccess, мне все равно придется менять маршрут? Где я могу назвать переменную $ page после ее передачи функции? – zazvorniki

+0

вместо '$ page = ($ this-> uri-> segment (2))? $ this-> uri-> segment (2): 0; 'использовать значение, указанное в параметре –

+0

Хорошо, круто. Я использовал маршрут и, похоже, исправил не найденный (спасибо!), Но я все еще путаюсь о странице $. Когда я использую эту страницу $, следующая страница возвращает мне те же результаты, что и первая страница. – zazvorniki

2

Вы можете оставить свой другой код, как это. Просто добавьте это на свои маршруты.PHP файл:

$route['blog/:num'] = "blog/index"; 
//Assumes your code is inside the index method. 
//If not, use this way: 
//$route['blog/:num'] = "blog/YOUR_METHOD_NAME"; 
4

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

$ маршрута [ 'блог /: любой'] = "блог/индекс/$ 1" ;

Поскольку вы использовали сегмент (2), и вы должны изменить блог/индекс/$ 1 в блог /: любой.

+1

Это неправильный ответ. 'blog/abc' перенаправит функцию index.but, но кажется, что она должна перенаправлять функцию' abc'. Только для чисел она должна перенаправлять функцию индекса. а также '$ 1' использовали ненужный и неправильный путь. –

+0

Я правильно использовал этот код и его работу :) –

+1

Попробуйте использовать 'example.com/blog/test'. Он будет выполнять функцию' index', а не 'test'. Также вы использовали неверный путь $ 1. Здесь вы можете найти https://ellislab.com/codeigniter/user-guide/general/routing.html, как использовать $ 1, $ 2 –

2

С вашего маршрута, попробуйте, если вы можете добавить столько, сколько :any s или :num s после того, как вам нравится:

$route['blog'] = 'blog/index'; // For the first level 
$route['blog/(:any)/(:any)'] = 'blog/index/$1/$2'; // For extra "uri" segments. 

// base_url pagination 

$config["base_url"] = base_url("blog"); // Is preferred 
Смежные вопросы