Разбитие вывода из БД на части

Тема в разделе "PHP", создана пользователем yeaahhh, 11 янв 2011.

Модераторы: latteo
  1. yeaahhh

    yeaahhh

    Регистр.:
    8 май 2008
    Сообщения:
    278
    Симпатии:
    11
    Друзья. Подскажите самый разумный способ разбития вывода информации на части, вида:

    КОнтент
    КОнтент
    КОнтент
    КОнтент
    КОнтент
    кнопка "показать ранние записи" (по нажатию открываются ещё записи)
    откр. запись
    откр. запись
    откр. запись
    откр. запись
    откр. запись
    кнопка, по нажатию открываются ещё записи..

    Заранее большое спасибо.
     
  2. Phrack

    Phrack

    Регистр.:
    3 ноя 2010
    Сообщения:
    264
    Симпатии:
    38
    да, асинхронный запрос к бд.
    читай про json, ajax (jquery.post/jquery.ajax)
     
  3. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.549
    Симпатии:
    1.435
    Для решения
    вижу несколько вариантов:
    a) Можно сразу загружать, но для элементов установить hidden http://htmlbook.ru/css/visibility, по нажатию на JS параметр отображения менять на visible.
    b) Как было сказанно выше подгружать через JS

    Но к php они мало имеют отношения.

    А вот этот блок тоже нужно по частям подгружать?
     
  4. Californicated

    Californicated Писатель

    Регистр.:
    26 янв 2009
    Сообщения:
    8
    Симпатии:
    0
    Это не PHP, это JS/AJAX :)
    Вот здесь пример без AJAX можно посмотреть, справа колонка новостей с плюсом и минусом.
    http://www.aif.ru/money
     
  5. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    на сервере с php это выборка данных от и до, запрос в базу с limit x,x и т.д.
    Например генерируется цикл от и до, скрипт получает данные через get

    load_more.php
    PHP:
    <?
    header('Content-Type: text/plain; charset=utf-8');
    $from intval($_GET['from']);
    $limit intval($_GET['limit']);

    if(
    $from+$limit>15){
        echo 
    "Больше нету.";
        exit();
    }

    for(
    $i=$from$i<$from+$limit$i++){
        echo 
    $i."<br />";
    }
    ?>
    Тогда на странице надо только ссылку на php файл генерировать и загружать данные из php файла с ajax, пример с jquery
    HTML:
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    
    <script language="JavaScript" type="text/javascript">
    
    //глобальные переменные для запроса от и сколько
    var from = 0;
    var limit = 5;
    $(document).ready(function(){
                               
        //функция загрузки
        function loader(){
            $.ajax({
              //ссылка на данные
              url: 'load_more.php?from='+encodeURIComponent(from)+'&limit='+encodeURIComponent(limit),
              cache: false,
              //после получения данных
              success: function(data){
                  //в элемент с id=text добавить полученные данные
                  $("#text").append(data);
                  $("#text").append('закачано '+limit+' от '+from+'<br />');
                  if(data!="Больше нету."){
                      //для следующих данных увеличить счётчик от
                      from += limit;
                  }else{
                      //убрать элемент id=more уже нет данных и не нужен
                      $("#more").hide();
                  }
              }
            });
        }
        
        //обработка кликов на элемент id=more
        $("#more").click(function(){
            loader();
            //запретить переход по ссылке после клика
            return false;
        });
        
        //загружаем первые данные
        loader();
    });
    
    </script>
    
    
    <title>Загрузка с JQuery</title>
    </head>
    
    <body>
    
    <div id="text"></div>
    <a id="more" href="#">ещё</a>
    
    </body>
    </html>
    
     
    yeaahhh нравится это.
  6. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    еще лучше все сжимать каким-нибудь Minify, или HTTP_StaticMerger. Можно считывать указатель скролла, чтобы понять, когда надо подгружать (как это делает ВК)

    P.S. Вы хоть раз думали, когда писали JS/AJAX ?
    JS = javascript
    AJAX = Asynchronous Javascript and XML

    какбы AJAX подразумевает использование Javascript.