2013-08-05 1 views
0

Bootstap:Kohana 3.3 - пагинация отсутствует действие Parametr

Route::set('user', 'user/<username>(/<action>)') 
->defaults(array(
    'controller' => 'user', 
    'username' => '\d+', 
)); 

пользователя контроллера:

public function action_cget(){ 
     $page_num = @$_GET['page']? $_GET['page'] : 1; 
     $per_page = 5; 
     $offset = ($page_num - 1) * $per_page; 
     $username = $this->request->param('username'); 

     $session = Session::instance(); 
     $mUser = Model::factory('User'); 
     $id = $mUser->getID($username); 
     $view = View::factory('index'); 

     $total = DB::query(Database::SELECT, 'SELECT * FROM `comments` WHERE `post_id` IN('.$ids.')')->execute()->as_array(); 

     $q = DB::query(Database::SELECT, 'SELECT * FROM `comments` WHERE `post_id` IN('.$ids.') LIMIT '.$per_page.' OFFSET '.$offset)->execute()->as_array(); 
     $pagination = Pagination::factory(array(
      'total_items' => count($total), 
      'current_page' => array('source' => 'query_string', 'key' => 'page'), 
      'items_per_page' => $per_page, 
      'view' => 'pagination/basic')); 



     $view->content = View::factory('user/cget'); 
     $view->content->comments = $q; 
     $view->content->pagi = $pagination; 
     $this->response->body($view); 

(я удалил больше кода)

Все это хорошо, но с нумерацией страниц делают плохо - оказывать без действий.

Я на странице http://mysite.com/user/NetJaro/cget

и постраничной делают ссылки, как http://mysite.com/user/NetJaro?page=2 (нет никаких действий, как «cget»).

Кто-нибудь может мне помочь? :)

Спасибо!

ответ

0

Начну с создания некоторых общих исправлений.

Прежде всего, Kohana является каркасом HMVC. Это означает, что любой Request может вызывать любое количество «подзапросов». Ваш код не HMVC-дружелюбно. Предположим, вы хотите правильно назвать это действие как подзапрос.

echo Request::Factory('user/NetJaro/cget') 
     ->query(array('some' => 'some-query-parameters', ...)) 
     ->execute(); 

Это не сработает! Даже если вы поместите параметры запроса в запрос! Именно из-за этой линии, которая использует суперглобальном, который никогда не ступала в подзапрос:

$page_num = @$_GET['page']? $_GET['page'] : 1; 

Он должен быть следующий, который делает то же самое, и это подзапрос удобно.

$page_num = Arr::get($this->request->query(), 'page', 1); 

Далее я взглянул на ваш маршрут. И заметил это регулярное выражение для имени пользователя 'username' => '\d+',. Вы разрешаете только номера? Не должно быть [a-zA-Z0-9] Чтобы разрешить все обычные символы, из которых может быть имя пользователя?

Тогда мы приходим к следующим направлениям:

$mUser = Model::factory('User'); 
$id = $mUser->getID($username); 

Если я правильно создать пользовательский объект, а затем получить идентификатор отдельно. Почему бы вам не использовать:

$user = ORM::factory('User', array('username' => $username)); 
$user_id = $user->id; 

Запросить вашу базу данных для пользователя с этим именем пользователя.

Далее мы подходим к созданию контента.

$total = DB::query(Database::SELECT, 'SELECT * FROM `comments` WHERE `post_id` IN('.$ids.')')->execute()->as_array(); 

Откуда: $ids? И почему вы не используете ORM?

$total = ORM::factory('Comment')->where('post_id', 'IN', $ids)->count_all(); 

То же самое для следующего запроса.

$q = ORM::factory('Comment') 
    ->where('post_id', 'IN', $ids) 
    ->limit($per_page) 
    ->offset($offset) 
    ->find_all(); 

Теперь вам не нужно беспокоиться о внедрении SQL или вообще о чем-либо. И модели, которые вы создаете, - это модели ORM, предоставляющие вам все функции, которые вам нужны из этой модели!

И, наконец, мы придем к вашей ошибке. Вероятно, это потому, что никаких действий нет. Везде, где вы повторяете эти URL-адреса, добавьте: <?php echo Request::$initial->action(); ?>. Но я не вижу код разбивки на страницы. Поэтому я не знаю точно.

+0

Привет! Большое спасибо за ваш совет. Я использую action(); ?> и это покажет мне мое действие. In/users/NetJaro/cwrite это показывает мне «cwrite», так что все в порядке. Я использую Pagination из Kohana 3.3 на https://github.com/shadowhand/pagination – Marcin

+0

Итак, вы его исправили? – AmazingDreams

+0

№ Когда я использую разбиение на страницы и выставляю его на сайт http://site.com/user/NetJaro/cwrite pagination, визуализируйте ссылку без действия (http://site.com/user/NetJaro/?page= 2). Но action(); ?> показывает действие corret. – Marcin