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

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

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




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

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

вот смотрите как было с юзером

Код:
//В модели:
public function getUserList($filter, $pagination)
       {
               $user = ORM::factory('user')
                       ->select('user.*', array('COUNT("role_id")', 'numroles'))
                       ->join('roles_users', 'left')->on('roles_users.user_id', '=', 'user.id')
                       ->group_by('user.id')
                       ->order_by('numroles', 'DESC')
                       ->order_by('name', 'ASC');

               if (isset($filter['FIO']))
                       $user->where('name', 'like', '%'.$filter['FIO'].'%');

               if (isset($filter['role']))
               {
                       if ($filter['role'] == 'teacher')
                       {
                               $role = ORM::factory('role', array('name' => 'teacher'));
                               $user->where('role_id', '=', $role->id);
                       }
                       else
                       {
                               $user->having('numroles', '=', 1); // количество ролей = 1, включая роль login
                       }
               }

               if (isset($filter['isActive']))
               {
                       if ($filter['isActive'] == 'yes')
                       {
                               $user->where('confirmcode', 'is', NULL);
                       }
                       else
                       {
                               $user->where('confirmcode', 'is not', NULL);
                       }
               }

               if (isset($filter['note']))
                       $user->where('note', '=', $filter['note']);

               return $user->limit($pagination->items_per_page)
               ->offset($pagination->offset)->find_all();
       }


// В контроллере :
public function action_list()
       {
               $data = array();
               $filter = Session::instance()->get('userlistFilter', array());

                $user = ORM::factory('user');

               if ($this->isPressed('btnFilter'))
               {
                       $filter['FIO']      = trim(Arr::get($_POST, 'FIO'));
                       $filter['role']     = trim(Arr::get($_POST, 'role'));
                       $filter['isActive'] = trim(Arr::get($_POST, 'isActive'));
                       $filter['note']     = trim(Arr::get($_POST, 'note'));

                       foreach ($filter as $key => $value)
                       {
                               if ($value == '')
                                       unset($filter[$key]);
                       }

                       Session::instance()->set('userlistFilter', $filter);
               }

               if ($this->isPressed('btnDelete'))
               {
                       $idList = Arr::get($_POST, 'cb', array());
                       foreach ($idList as $id => $value)
                       {
                               $user = ORM::factory('user', $id);
                               $user->delete();
                       }
               }

               $user = ORM::factory('user');

             
               $data['notes'] = $user->getDistinctNotes();
               $data['filter'] = $filter;

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

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

  $data['users'] = $user->getUserList($filter, $pagination);
             

               $data['pagination'] = $pagination;

               $this->tpl->content =  View::factory('admin/userlist', $data);
       }


я думал надо вот так

public function getMaterialsByTeacher($teacher_id=NULL, $node_id=NULL, $filter=NULL, $pagination)

но выдавало ошибку...подскажите пожалуйста...

_________________
iReznik.com


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

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

_________________
iReznik.com


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

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Передавали в метод.
Надо в начало поставить
public function getMaterialsByTeacher($pagination, $teacher_id=NULL, $node_id=NULL, $filter=NULL)

и там и там. порядок должен быть одинаковым.
А ошибку выдает, потому что порядок неверный задаете. Сначала идут обязательные параметры, а потом необязательные.

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


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

Зарегистрирован: 01 май 2012, 23:50
Сообщения: 72
что вы имели введу под порядок должен быть одинаковым?
вот так public function getMaterialsByTeacher($pagination, $teacher_id=NULL, $node_id=NULL, $filter=NULL)
была ошибка..сейчас так сделал
ошибка другая вот такая

ErrorException [ Notice ]: Trying to get property of non-object

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


++++++++++++++++++++++++++

да и подскажите
такая ситуация
вот при выводе пользователей все ок
но когда делаешь фильтр отображает норм
но показывает лишнии страницы
вот сам код подскажите что нужно добавить?

Код:
public function getUserList($filter, $pagination)
       {
               $user = ORM::factory('user')
                       ->select('user.*', array('COUNT("role_id")', 'numroles'))
                       ->join('roles_users', 'left')->on('roles_users.user_id', '=', 'user.id')
                       ->group_by('user.id')
                       ->order_by('numroles', 'DESC')
                       ->order_by('name', 'ASC');

               if (isset($filter['FIO']))
                       $user->where('name', 'like', '%'.$filter['FIO'].'%');

               if (isset($filter['role']))
               {
                       if ($filter['role'] == 'teacher')
                       {
                               $role = ORM::factory('role', array('name' => 'teacher'));
                               $user->where('role_id', '=', $role->id);
                       }
                       else
                       {
                               $user->having('numroles', '=', 1); // количество ролей = 1, включая роль login
                       }
               }

               if (isset($filter['isActive']))
               {
                       if ($filter['isActive'] == 'yes')
                       {
                               $user->where('confirmcode', 'is', NULL);
                       }
                       else
                       {
                               $user->where('confirmcode', 'is not', NULL);
                       }
               }

               if (isset($filter['note']))
                       $user->where('note', '=', $filter['note']);

               return $user->limit($pagination->items_per_page)
               ->offset($pagination->offset)->find_all();
       }

_________________
iReznik.com


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

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Порядок должен быть одинаковым в том смысле, что аргументы при передаче в метод должны идти в том же порядке, как и аргументы, которые принимает этот метод.
Т.е. если передаются $a, $b и $c , нельзя их принимать как $b, $c, $a.
Насчет лишних страниц вообще не понял.

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


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

Зарегистрирован: 01 май 2012, 23:50
Сообщения: 72
1)смотрите вот при обычном выводе все ок показывает все страницы, но там на странице есть фильтр например я хочу увидеть только учителей выбираю критерий жму ентер их показывает
но допустим всего пользователей 40
а учителей всего 10
вывод на стр по 10 пользователей так вот мне с фильтром покажет 10 учителей но количество страниц внизу будет не 1 (1=10 отношение)
а покажет 4 но все 3 остальные будут пустые....что нужно добавить в екшен что бы такого не было? просто в инете искал пока пусто(((

2)насчет ошибки Trying to get property of non-object
я понял смысл вашего поста но в коде что то не до понял вот смотрите мне показывает ошибку в этой строчке
->limit($pagination->items_per_page) переменная погинатион у меня же определена в контроллере..
чего тогда он от меня хочет?(

п.с. заранее спасибо) вы стольким мне помогли..надеюсь подскажите и это...

_________________
iReznik.com


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

Зарегистрирован: 12 фев 2012, 01:02
Сообщения: 462
Цитата:
1)смотрите вот при обычном выводе все ок показывает все страницы, но там на странице есть фильтр например я хочу увидеть только учителей выбираю критерий жму ентер их показывает
но допустим всего пользователей 40
а учителей всего 10
вывод на стр по 10 пользователей так вот мне с фильтром покажет 10 учителей но количество страниц внизу будет не 1 (1=10 отношение)
а покажет 4 но все 3 остальные будут пустые....что нужно добавить в екшен что бы такого не было? просто в инете искал пока пусто(((


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


тоже нужен фильтр. Иначе все время будет общее количество.
Что-то вроде
Код:
$count = ORM::factory('user')->where(тут условие)->count_last_query();

Тогда пагинатор правильно разобъет новое количество по страничкам и лишних не будет.

Цитата:
2)насчет ошибки Trying to get property of non-object
я понял смысл вашего поста но в коде что то не до понял вот смотрите мне показывает ошибку в этой строчке
->limit($pagination->items_per_page) переменная погинатион у меня же определена в контроллере..
чего тогда он от меня хочет?(


Определена в контроллере, но не в модели же.

В модели
Код:
public function getMaterialsByTeacher($pagination, $teacher_id=NULL, $node_id=NULL, $filter=NULL)

В контроллере
Код:
      $material = ORM::factory('material');
     
      if ($user->isAdmin())
      {
         $data['materials'] = $material->getMaterialsByTeacher($pagination, NULL, NULL, $filter);
      }
      else
      {
         $data['materials'] = $material->getMaterialsByTeacher($pagination, $user->id);
      }


И определение пагинатора закинуть выше этих строк.

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


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

Зарегистрирован: 01 май 2012, 23:50
Сообщения: 72
с материалами все ок..но при присмотре вот так http://thesupport.info/public/shownode/4/22.html
выдает ошибку
ErrorException [ Notice ]: Trying to get property of non-object

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

я так понял надо добавить $pagination
пока думаю куда....насчет вывода с фильтром посмотрю позже...

_________________
iReznik.com


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

Зарегистрирован: 01 май 2012, 23:50
Сообщения: 72
так с страницами на материалах разабраля, сейчас попробую еще один финт + буду пробовать фильтры настроить...

_________________
iReznik.com


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

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

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


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

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


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

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


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

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