Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 05 июл 2025, 23:37

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.
Автор Сообщение
 Заголовок сообщения: Re: Модуль Pagination
СообщениеДобавлено: 02 май 2012, 21:55 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
По материалам. Сначала покажите роут.

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль Pagination
СообщениеДобавлено: 02 май 2012, 21:59 
Не в сети
Бывалый

Зарегистрирован: 01 май 2012, 23:50
Сообщения: 72
Route::set('material', 'material(/page<id>)(.html)')
->defaults(array(
'controller' => 'material',
'action' => 'index',
));

вот роут

а сам контролер вот (остановился на такой версии)

часть кода

Код:
      // получаем общее количество (в моем случае) товаров
      $count = ORM::factory('material')->count_all();

      // передаем значение количества пользователей в модуль pagination и формируем ссылки
         $pagination = Pagination::factory(array('total_items' => $count))->route_params
        (array('controller' => Request::current()->controller(), 'action' => Request::current()->action(),));

      //получаем товары с указанной позиции ($pagination->offset)
      //и указанное количество на страницу ($pagination->items_per_page)
      $material = ORM::factory('material')
      ->limit($pagination->items_per_page)
      ->offset($pagination->offset)
      ->find_all();
      
      $data['pagination'] = $pagination;

_________________
iReznik.com


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль Pagination
СообщениеДобавлено: 02 май 2012, 22:15 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Ну. И делайте по аналогии с юзерами. Только теперь в модели вам нужен по всей видимости метод

Код:
// Возвращает список материалов по указанному преподавателю
   public function getMaterialsByTeacher($teacher_id=NULL, $node_id=NULL, $filter=NULL)


_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль Pagination
СообщениеДобавлено: 02 май 2012, 22:20 
Не в сети
Бывалый

Зарегистрирован: 01 май 2012, 23:50
Сообщения: 72
ну смотрите что получилось

модель

Код:
   public function getMaterialsByTeacher($teacher_id=NULL, $node_id=NULL, $filter=NULL)
   {
      $cat = new Model_Category;
      
      $qry = DB::select('materials.*',
         array('users.name', 'name')
      )
         ->join('users', 'left')->on('users.id', '=', 'materials.teacher_id')
         ->from('materials');
      
      if ($teacher_id)
      {
         $qry->where('teacher_id', '=', $teacher_id);
      }
      
      if ($node_id)
      {
         $qry->where('node_id', '=', $node_id);
      }
      
      if (isset($filter['FIO']) && ($filter['FIO'] != ''))
      {
         $qry->where('name', 'like', '%'.$filter['FIO'].'%');
      }
      
      if (!$teacher_id)
      {
         $qry->order_by('users.name', 'asc');
      }
      
      $data =   $qry->order_by('subjectName', 'asc')
         ->order_by('ctime', 'asc')
         ->execute()
         ->as_array();
      
      foreach ($data as $key => $item)
      {
         $data[$key]['path']   = $cat->getPath($item['node_id']);
         $data[$key]['isLeaf'] = $cat->isLeaf($item['node_id']);
         $data[$key]['link'] = $this->getLink($item);
      }
      
       return $data->limit($pagination->items_per_page)
           ->offset($pagination->offset)->find_all();
   }


контроллер

Код:
public function action_index()
   {
      $data = array();
      $filter = Session::instance()->get('materialsFilter', array());
      
      $user = Auth::instance()->get_user();
      
      if ($this->isPressed('btnFilter'))
      {
         $filter['FIO'] = Arr::get($_POST, 'FIO');
         
         Session::instance()->set('materialsFilter', $filter);
      }
      
      $material = ORM::factory('material');
      
      if ($user->isAdmin())
      {
         $data['materials'] = $material->getMaterialsByTeacher(NULL, NULL, $filter);
      }
      else
      {
         $data['materials'] = $material->getMaterialsByTeacher($user->id);
      }
      

      
        // получаем общее количество (в моем случае) товаров
        $count = ORM::factory('material')->count_all();

        // передаем значение количества пользователей в модуль pagination и формируем ссылки
          $pagination = Pagination::factory(array('total_items' => $count))->route_params
         (array('controller' => Request::current()->controller(), 'action' => Request::current()->action(),));

       
      $data['isAdmin'] = $user->isAdmin();
      $data['filter'] = $filter;
      $data['pagination'] = $pagination;
      
      $this->tpl->content = View::factory('materials/index', $data);
   }


и выдает ошибочку

ErrorException [ Fatal Error ]: Call to a member function limit() on a non-object

в этой строчке
122 return $data->limit($pagination->items_per_page)

_________________
iReznik.com


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль Pagination
СообщениеДобавлено: 02 май 2012, 22:26 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Ну правильно выдает. Это же уже массив. Засовывать сюда надо
Код:
$data =   $qry->order_by('subjectName', 'asc')
         ->order_by('ctime', 'asc')
         ->execute()
         ->as_array();


_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль Pagination
СообщениеДобавлено: 02 май 2012, 22:29 
Не в сети
Бывалый

Зарегистрирован: 01 май 2012, 23:50
Сообщения: 72
мда..что то я в этом не сильно шарю(

вот в конец модели написал

}

return $data = $qry->order_by('subjectName', 'asc')
->order_by('ctime', 'asc')
->execute()
->as_array();
}

теперь пишет

ErrorException [ Notice ]: Undefined index: isLeaf

в этой строчке

42 <? if ($item['isLeaf']) {?>

_________________
iReznik.com


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль Pagination
СообщениеДобавлено: 02 май 2012, 22:33 
Не в сети
Бывалый

Зарегистрирован: 01 май 2012, 23:50
Сообщения: 72
ааа понял

$data = $qry->order_by('subjectName', 'asc')
->order_by('ctime', 'asc')
->execute()
->as_array()
->limit($pagination->items_per_page)
->offset($pagination->offset)->find_all();


вот так
но все же

ErrorException [ Fatal Error ]: Call to a member function limit() on a non-object

вот тут ->limit($pagination->items_per_page)

_________________
iReznik.com


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль Pagination
СообщениеДобавлено: 02 май 2012, 22:36 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Нет :)
После того как вы пишете
Код:

->execute()
->as_array()

Происходит обработка запроса (первая строка) и выдается результат в виде массива (вторая строка).
Добавлять нужно на этапе формирования запроса. Видимо вот так

Код:
$data = $qry->order_by('subjectName', 'asc')
->order_by('ctime', 'asc')
->limit($pagination->items_per_page)
->offset($pagination->offset)
->execute()
->as_array();

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль Pagination
СообщениеДобавлено: 02 май 2012, 22:38 
Не в сети
Бывалый

Зарегистрирован: 01 май 2012, 23:50
Сообщения: 72
вроде думал уже получится

ErrorException [ Notice ]: Undefined variable: pagination

во тут ->limit($pagination->items_per_page)

_________________
iReznik.com


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Модуль Pagination
СообщениеДобавлено: 02 май 2012, 22:40 
Не в сети
Администратор
Аватара пользователя

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Ну да. Она ж не определена или определена, но в контроллере.
Когда юзеров делали, как поступили ?

_________________
kohanaframework.su - обучение фреймворку Kohana


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 61 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7  След.

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group