Пагинация по уму

Тема в разделе "Создание расширений для Joomla", создана пользователем ujhgj, 06.07.2010.

  1. Offline

    ujhgj Недавно здесь

    Регистрация:
    06.07.2010
    Сообщения:
    3
    Симпатии:
    0
    Пол:
    Мужской
    Здравсвуйте!

    Я сделал пагинацию в своём компоненте по этой статье:
    http://kjoomla.com/notes/36-notes/51-2008-02-29-10-27-31.html

    Моя модель:
    Код (PHP):
    1. function getCurrentDeals()
    2. {
    3.   $db =& JFactory::getDBO();
    4.   $user =& JFactory::getUser();
    5.  
    6.   // пагинация
    7.   if (! $paginatorStart = JRequest::getVar('start'))
    8.   {
    9.     $paginatorStart = 0;
    10.   }
    11.   $paginatorLimit = 10; // 10 строк на страницу
    12.  
    13.   $query = 'SELECT * from repository WHERE user_id = '.$user->id.' ORDER BY ticket DESC LIMIT '.$paginatorStart.', '.$paginatorLimit;
    14.   $db->setQuery( $query );
    15.   return $db->loadObjectList();
    16. }
    17.  
    18. function getTotalRowsNumber()
    19. {
    20.   $db =& JFactory::getDBO();
    21.   $user =& JFactory::getUser();
    22.   [B]$query = 'SELECT COUNT(*) from repository WHERE user_id = '.$user->id;[/B]
    23.   $db->setQuery( $query );
    24.   return $db->loadResult();
    25. }
    26.  
    27. function getCurRowNumber()
    28. {
    29.   if (! $paginatorStart = JRequest::getVar('start'))
    30.   {
    31.     $paginatorStart = 0;
    32.   }
    33.   return $paginatorStart;
    34. }


    Функция моей вьюхи:
    Код (PHP):
    1. function display($tpl = null)
    2.   {
    3.     $model =& $this->getModel();
    4.     $currentDeals =& $model->getCurrentDeals();
    5.     $this->assignRef( 'currentDeals', $currentDeals );
    6.    
    7.     $total = $model->getTotalRowsNumber();
    8.     $limitstart = $model->getCurRowNumber();
    9.     $limit = 10; // 10 строк на страницу
    10.     $pagination = new JPagination($total, $limitstart, $limit);
    11.  
    12.     $this->assignRef('pagination', $pagination);
    13.     $this->assignRef('total', $total);
    14.     $this->assignRef('limitstart', $limitstart);
    15.  
    16.     parent::display($tpl);
    17.   }


    В статье даны общие указания, додумывать нужно самому. Я пока еще не вполне освоился с MVC и Joomla, поэтому прошу подтвердить мои догадки относительно функционирования такого механизма. Получается, при каждом перелисте пагинатора, модель будет заново лезть в базу данных, запуская функцию getTotalRowsNumber(), и выполнять один и тот же запрос, чтобы получить общее кол-во строк в таблице. Мне хотелось бы снизить нагрузку на СУБД, а гонять попусту один и тот же запрос - недопустимая роскошь.
    Пожалуйста, посоветуйте как оптимизировать мою пагинацию.
     
  2.  
  3. woojin
    Offline

    woojin Местный Команда форума

    Регистрация:
    31.05.2009
    Сообщения:
    3 209
    Симпатии:
    335
    Пол:
    Мужской
    желание конечно очень правильное!!!!!!!

    но если с сайтом в этот момент будут работать несколько человек которые будут добавлять материал?

    то при перелистывании в стандартном варианте (каждый раз лезть в БД) количество страниц будет увеличиваться или уменьшаться смотря что делают эти люди

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

    если сможешь сделать такой алгоритм работы выкладывай компонент сюда многим пригодится
     

Поделиться этой страницей

Загрузка...