Как: реализовать базовый php-пейджинг с помощью mysql, ajax и linq - PullRequest
0 голосов
/ 16 июня 2011

Я пытаюсь реализовать простую подкачку данных MySQL, используя php, ajax и (настоящий кикер) linq. Для php есть реализация linq, называемая phplinq

Мне удалось реализовать пейджинг без части linq, и соответствующий код такой: (разбит на несколько файлов)

  1. pagination.php, где все начинается.

    Нумерация страниц с помощью Jquery, Ajax, PHP

         <script type="text/javascript"
    

    SRC = "JS / jquery1_5_2_min.js">

  2. load_data.php, файл, в котором все данные извлекаются

        $query_pag_data = "SELECT id as msg_id,name as message from student LIMIT $start, $per_page";
        $result_pag_data = mysql_query($query_pag_data) or die('MySql Error' . mysql_error());
        $msg = "";
        while ($row = mysql_fetch_array($result_pag_data)) {
            $htmlmsg=htmlentities($row['message']);
            $msg .= "<li><b>" . $row['msg_id'] . "</b> " . $htmlmsg . "</li>";
        }
        $msg = "<div class='data'><ul>" . $msg . "</ul></div>"; // Content for Data
    
        /* --------------------------------------------- */
        $query_pag_num = "SELECT COUNT(*) AS count FROM student";
        $result_pag_num = mysql_query($query_pag_num);
        $row = mysql_fetch_array($result_pag_num);
        $count = $row['count'];
        $no_of_paginations = ceil($count / $per_page);
    
        /* ---------------Calculating the starting and endign values for the loop----------------------------------- */
        if ($cur_page >= 7) {
            $start_loop = $cur_page - 3;
            if ($no_of_paginations > $cur_page + 3)
                $end_loop = $cur_page + 3;
            else if ($cur_page <= $no_of_paginations && $cur_page > $no_of_paginations - 6) {
                $start_loop = $no_of_paginations - 6;
                $end_loop = $no_of_paginations;
            } else {
                $end_loop = $no_of_paginations;
            }
        } else {
            $start_loop = 1;
            if ($no_of_paginations > 7)
                $end_loop = 7;
            else
                $end_loop = $no_of_paginations;
        }
        /* ----------------------------------------------------------------------------------------------------------- */
        $msg .= "<div class='pagination'><ul>";
    
        // FOR ENABLING THE FIRST BUTTON
        if ($first_btn && $cur_page > 1) {
            $msg .= "<li p='1' class='active'>First</li>";
        } else if ($first_btn) {
            $msg .= "<li p='1' class='inactive'>First</li>";
        }
    
        // FOR ENABLING THE PREVIOUS BUTTON
        if ($previous_btn && $cur_page > 1) {
            $pre = $cur_page - 1;
            $msg .= "<li p='$pre' class='active'>Previous</li>";
        } else if ($previous_btn) {
            $msg .= "<li class='inactive'>Previous</li>";
        }
        for ($i = $start_loop; $i <= $end_loop; $i++) {
    
            if ($cur_page == $i)
                $msg .= "<li p='$i' style='color:#fff;background-color:#006699;' class='active'>{$i}</li>";
            else
                $msg .= "<li p='$i' class='active'>{$i}</li>";
        }
    
        // TO ENABLE THE NEXT BUTTON
        if ($next_btn && $cur_page < $no_of_paginations) {
            $nex = $cur_page + 1;
            $msg .= "<li p='$nex' class='active'>Next</li>";
        } else if ($next_btn) {
            $msg .= "<li class='inactive'>Next</li>";
        }
    
        // TO ENABLE THE END BUTTON
        if ($last_btn && $cur_page < $no_of_paginations) {
            $msg .= "<li p='$no_of_paginations' class='active'>Last</li>";
        } else if ($last_btn) {
            $msg .= "<li p='$no_of_paginations' class='inactive'>Last</li>";
        }
        $goto = "<input type='text' class='goto' size='1' style='margin-top:-1px;margin-left:60px;'/><input type='button' id='go_btn' class='go_button' value='Go'/>";
        $total_string = "<span class='total' a='$no_of_paginations'>Page <b>" . $cur_page . "</b> of <b>$no_of_paginations</b></span>";
        $msg = $msg . "</ul>" . $goto . $total_string . "</div>";  // Content for pagination
        echo $msg;
    }
    
  3. dbconnect.php, содержащий данные для входа

  4. paginator.js, файл с функциями JavaScript.

    $ (документ) .ready (функция () { function loading_show () { $ ( '# Загрузки') HTML ( "") FadeIn ( 'быстрый')..; } function loading_hide () { $ ( '# Загрузки') Затухание ( 'быстрый'). }
    function loadData (page) { loading_show (); * * тысяча тридцать-три $ .ajax ({ тип: "POST", URL: «load_data.php», данные: "страница =" + страница, успех: функция (сообщение) { $ ("# container"). ajaxComplete (функция (событие, запрос, настройки) { loading_hide (); . $ ( "# Контейнер") HTML (MSG); }); } }); } LoadData (1); // При первой загрузке страницы результаты по умолчанию $ ('# container .pagination li.active'). live ('click', function () { var page = $ (this) .attr ('p'); LoadData (страница);

    });           
    $('#go_btn').live('click',function(){
        var page = parseInt($('.goto').val());
        var no_of_pages = parseInt($('.total').attr('a'));
        if(page != 0 && page <= no_of_pages){
            loadData(page);
        }
        else{
            alert('Enter a PAGE between 1 and '+no_of_pages);
            $('.goto').val("").focus();
            return false;            
        }
    });
    

    });

И, наконец, table.css, файл с некоторыми базовыми стилями.

body{
    width: 800px;
    margin: 0 auto;
    padding: 0;
}
#loading{
    width: 100%;
    position: absolute;
    top: 100px;
    left: 100px;
    margin-top:200px;
}
#container .pagination ul li.inactive,
#container .pagination ul li.inactive:hover{
    background-color:#ededed;
    color:#bababa;
    border:1px solid #bababa;
    cursor: default;
}
#container .data ul li{
    list-style: none;
    font-family: verdana;
    margin: 5px 0 5px 0;
    color: #000;
    font-size: 13px;
}

#container .pagination{
    width: 800px;
    height: 25px;
}
#container .pagination ul li{
    list-style: none;
    float: left;
    border: 1px solid #006699;
    padding: 2px 6px 2px 6px;
    margin: 0 3px 0 3px;
    font-family: arial;
    font-size: 14px;
    color: #006699;
    font-weight: bold;
    background-color: #f2f2f2;
}
#container .pagination ul li:hover{
    color: #fff;
    background-color: #006699;
    cursor: pointer;
}
.go_button
{
background-color:#f2f2f2;border:1px solid #006699;color:#cc0000;padding:2px 6px 2px 6px;cursor:pointer;position:absolute;margin-top:-1px;
}
.total
{
float:right;font-family:arial;color:#999;
}

Если вы собираетесь скопировать это, есть папка css и папка js, и я скачал jquery 1.5.2 из Google. Вы можете заменить линию

<script type="text/javascript" src="js/jquery1_5_2_min.js"></script>

в pagination.php с

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>

Также используется таблица

CREATE TABLE student    (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(150)
);
my

Цель здесь - избавиться от всех прямых вызовов запросов mysql внутри файлов с помощью всего, что я могу поместить с помощью linq. Я широко использовал linq в .NET 4.0, поэтому в основном здесь я пытаюсь абстрагировать слой доступа к данным, как если бы я использовал объекты .NET для взаимодействия с данными, а не просто запросы запросов mysql.

Имеет ли это смысл? моей конечной целью является возможность заменить все вызовы mysql-запросов на phplinq и полностью изолировать код доступа к данным. (Если linq является избыточным или каким-то неадекватным, я его отброшу). настроить сетку (в этом примере это просто список) и будущий уровень доступа к данным

Я не настолько опытен в php, поэтому, пожалуйста, не направляйте меня к обширному чтению. то, что я мог бы взять и поиграть, было бы намного лучше

1 Ответ

0 голосов
/ 23 июня 2011

Ну, я думаю, у вас проблемы с извлечением записей из базы данных .. Я много работал над php-пейджингом и, поверьте мне, php работает лучше с запросами mySQL, чем с LINQ. Вы можете прочитать пост в блоге на LINQ Paging здесь . Он использует ASP.net, но я почти уверен, что вы можете получить хотя бы идею сделать свою работу. Всякий раз, когда я иду на пейджинг с LINQ, я обычно использую этот запрос

(from ac in dc.students where StudentIDs.Contains(ac.Ids) select ac).Skip((PageNumber - 1) * NumberOfRecordsInPage).Take(NumberOfRecordsInPage)

Надеюсь, это поможет:)

...